From 8a545c207ba9f0b8d20b88196874272a766b5ccf 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. --- 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 81f6586ca..dc336a385 100644 --- a/tests/test_inotify_c.py +++ b/tests/test_inotify_c.py @@ -10,6 +10,7 @@ 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