|
13 | 13 |
|
14 | 14 | from watchdog.observers.inotify_buffer import InotifyBuffer |
15 | 15 |
|
16 | | -from .shell import mkdir, mount_tmpfs, mv, rm, touch, unmount |
| 16 | +from .shell import mkdir, mount_tmpfs, mv, rm, symlink, touch, unmount |
17 | 17 |
|
18 | 18 |
|
19 | 19 | def wait_for_move_event(read_event): |
@@ -65,6 +65,21 @@ def test_move_internal(p): |
65 | 65 | inotify.close() |
66 | 66 |
|
67 | 67 |
|
| 68 | +@pytest.mark.timeout(5) |
| 69 | +def test_move_internal_symlink_followed(p): |
| 70 | + mkdir(p("dir", "dir1"), parents=True) |
| 71 | + mkdir(p("dir", "dir2")) |
| 72 | + touch(p("dir", "dir1", "a")) |
| 73 | + symlink(p("dir"), p("symdir"), target_is_directory=True) |
| 74 | + |
| 75 | + inotify = InotifyBuffer(p("symdir").encode(), recursive=True, follow_symlink=True) |
| 76 | + mv(p("dir", "dir1", "a"), p("dir", "dir2", "b")) |
| 77 | + frm, to = wait_for_move_event(inotify.read_event) |
| 78 | + assert frm.src_path == p("symdir", "dir1", "a").encode() |
| 79 | + assert to.src_path == p("symdir", "dir2", "b").encode() |
| 80 | + inotify.close() |
| 81 | + |
| 82 | + |
68 | 83 | @pytest.mark.timeout(10) |
69 | 84 | def test_move_internal_batch(p): |
70 | 85 | n = 100 |
@@ -102,6 +117,21 @@ def test_delete_watched_directory(p): |
102 | 117 | inotify.close() |
103 | 118 |
|
104 | 119 |
|
| 120 | +@pytest.mark.timeout(5) |
| 121 | +def test_delete_watched_directory_symlink_followed(p): |
| 122 | + mkdir(p("dir", "dir2"), parents=True) |
| 123 | + symlink(p("dir"), p("symdir"), target_is_directory=True) |
| 124 | + |
| 125 | + inotify = InotifyBuffer(p("symdir").encode(), follow_symlink=True) |
| 126 | + rm(p("dir", "dir2"), recursive=True) |
| 127 | + |
| 128 | + # Wait for the event to be picked up |
| 129 | + inotify.read_event() |
| 130 | + |
| 131 | + # Ensure InotifyBuffer shuts down cleanly without raising an exception |
| 132 | + inotify.close() |
| 133 | + |
| 134 | + |
105 | 135 | @pytest.mark.timeout(5) |
106 | 136 | @pytest.mark.skipif("GITHUB_REF" not in os.environ, reason="sudo password prompt") |
107 | 137 | def test_unmount_watched_directory_filesystem(p): |
|
0 commit comments