From ab6508716f95fb65481ab6232301a095452e9b49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= Date: Thu, 19 Aug 2021 15:13:39 +0200 Subject: [PATCH] Fix test mocks for big endian systems Fix the mocked inotify data to respect system endianness. Instead of harcoding the raw data, reconstruct it using struct.pack(), respecting host endianness. This should also benefit readability a bit. Closes #804 --- tests/test_inotify_c.py | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/tests/test_inotify_c.py b/tests/test_inotify_c.py index 81f6586..dc336a3 100644 --- a/tests/test_inotify_c.py +++ b/tests/test_inotify_c.py @@ -10,6 +10,7 @@ import ctypes import errno import logging import os +import struct from functools import partial from queue import Queue @@ -52,6 +53,19 @@ def teardown_function(function): pass +def struct_inotify(wd, mask, cookie, length, name): + assert len(name) <= length + struct_format = ( + "=" # (native endianness, standard sizes) + "i" # int wd + "i" # uint32_t mask + "i" # uint32_t cookie + "i" # uint32_t len + "%ds" % (length,) # char[] name + ) + return struct.pack(struct_format, wd, mask, cookie, length, name) + + def test_late_double_deletion(monkeypatch): inotify_fd = type(str("FD"), (object,), {})() # Empty object inotify_fd.last = 0 @@ -60,20 +74,18 @@ def test_late_double_deletion(monkeypatch): # CREATE DELETE CREATE DELETE DELETE_SELF IGNORE DELETE_SELF IGNORE inotify_fd.buf = ( # IN_CREATE|IS_DIR (wd = 1, path = subdir1) - b"\x01\x00\x00\x00\x00\x01\x00\x40\x00\x00\x00\x00\x10\x00\x00\x00" - b"\x73\x75\x62\x64\x69\x72\x31\x00\x00\x00\x00\x00\x00\x00\x00\x00" + struct_inotify(1, 0x40000100, 0, 16, b"subdir1") + # IN_DELETE|IS_DIR (wd = 1, path = subdir1) - b"\x01\x00\x00\x00\x00\x02\x00\x40\x00\x00\x00\x00\x10\x00\x00\x00" - b"\x73\x75\x62\x64\x69\x72\x31\x00\x00\x00\x00\x00\x00\x00\x00\x00" + struct_inotify(1, 0x40000200, 0, 16, b"subdir1") ) * 2 + ( # IN_DELETE_SELF (wd = 2) - b"\x02\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + struct_inotify(2, 0x00000400, 0, 0, b"") + # IN_IGNORE (wd = 2) - b"\x02\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + struct_inotify(2, 0x00008000, 0, 0, b"") + # IN_DELETE_SELF (wd = 3) - b"\x03\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + struct_inotify(3, 0x00000400, 0, 0, b"") + # IN_IGNORE (wd = 3) - b"\x03\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + struct_inotify(3, 0x00008000, 0, 0, b"") ) os_read_bkp = os.read -- 2.33.0