summaryrefslogtreecommitdiffhomepage
path: root/test/syscalls/linux
diff options
context:
space:
mode:
authorZach Koopmans <zkoopmans@google.com>2020-08-21 14:19:29 -0700
committergVisor bot <gvisor-bot@google.com>2020-08-21 14:21:44 -0700
commitc9e752b6440cfa78f7bdcd47af4c4f5fe33d57b4 (patch)
tree2903367054e1ff96b87e1cd848eef8908b0487af /test/syscalls/linux
parent2c422b7f21b3503e9b1ab52bdf8f0de7fcf4b8ce (diff)
Fix Inotify tests in open source.
The order of unlink events (dir event/file event) is undefined, so make tests accept both orderings. PiperOrigin-RevId: 327873316
Diffstat (limited to 'test/syscalls/linux')
-rw-r--r--test/syscalls/linux/inotify.cc56
1 files changed, 36 insertions, 20 deletions
diff --git a/test/syscalls/linux/inotify.cc b/test/syscalls/linux/inotify.cc
index 5cb325a9e..a5c421118 100644
--- a/test/syscalls/linux/inotify.cc
+++ b/test/syscalls/linux/inotify.cc
@@ -1371,9 +1371,10 @@ TEST(Inotify, HardlinksReuseSameWatch) {
// that now and drain the resulting events.
file1_fd.reset();
events = ASSERT_NO_ERRNO_AND_VALUE(DrainEvents(fd.get()));
- ASSERT_THAT(events,
- Are({Event(IN_CLOSE_WRITE, root_wd, Basename(file1.path())),
- Event(IN_CLOSE_WRITE, file1_wd)}));
+ ASSERT_THAT(
+ events,
+ AreUnordered({Event(IN_CLOSE_WRITE, root_wd, Basename(file1.path())),
+ Event(IN_CLOSE_WRITE, file1_wd)}));
// Try removing the link and let's see what events show up. Note that after
// this, we still have a link to the file so the watch shouldn't be
@@ -1381,8 +1382,9 @@ TEST(Inotify, HardlinksReuseSameWatch) {
const std::string link1_path = link1.reset();
events = ASSERT_NO_ERRNO_AND_VALUE(DrainEvents(fd.get()));
- ASSERT_THAT(events, Are({Event(IN_ATTRIB, link1_wd),
- Event(IN_DELETE, root_wd, Basename(link1_path))}));
+ ASSERT_THAT(events,
+ AreUnordered({Event(IN_ATTRIB, link1_wd),
+ Event(IN_DELETE, root_wd, Basename(link1_path))}));
// Now remove the other link. Since this is the last link to the file, the
// watch should be automatically removed.
@@ -1934,14 +1936,22 @@ TEST(Inotify, IncludeUnlinkedFile_NoRandomSave) {
ASSERT_THAT(write(fd.get(), &val, sizeof(val)), SyscallSucceeds());
std::vector<Event> events =
ASSERT_NO_ERRNO_AND_VALUE(DrainEvents(inotify_fd.get()));
- EXPECT_THAT(events, Are({
- Event(IN_ATTRIB, file_wd),
- Event(IN_DELETE, dir_wd, Basename(file.path())),
- Event(IN_ACCESS, dir_wd, Basename(file.path())),
- Event(IN_ACCESS, file_wd),
- Event(IN_MODIFY, dir_wd, Basename(file.path())),
- Event(IN_MODIFY, file_wd),
- }));
+ EXPECT_THAT(events, AnyOf(Are({
+ Event(IN_ATTRIB, file_wd),
+ Event(IN_DELETE, dir_wd, Basename(file.path())),
+ Event(IN_ACCESS, dir_wd, Basename(file.path())),
+ Event(IN_ACCESS, file_wd),
+ Event(IN_MODIFY, dir_wd, Basename(file.path())),
+ Event(IN_MODIFY, file_wd),
+ }),
+ Are({
+ Event(IN_DELETE, dir_wd, Basename(file.path())),
+ Event(IN_ATTRIB, file_wd),
+ Event(IN_ACCESS, dir_wd, Basename(file.path())),
+ Event(IN_ACCESS, file_wd),
+ Event(IN_MODIFY, dir_wd, Basename(file.path())),
+ Event(IN_MODIFY, file_wd),
+ })));
fd.reset();
events = ASSERT_NO_ERRNO_AND_VALUE(DrainEvents(inotify_fd.get()));
@@ -1984,7 +1994,7 @@ TEST(Inotify, ExcludeUnlink_NoRandomSave) {
ASSERT_THAT(read(fd.get(), &val, sizeof(val)), SyscallSucceeds());
std::vector<Event> events =
ASSERT_NO_ERRNO_AND_VALUE(DrainEvents(inotify_fd.get()));
- EXPECT_THAT(events, Are({
+ EXPECT_THAT(events, AreUnordered({
Event(IN_ATTRIB, file_wd),
Event(IN_DELETE, dir_wd, Basename(file.path())),
}));
@@ -2127,12 +2137,18 @@ TEST(Inotify, ExcludeUnlinkInodeEvents_NoRandomSave) {
ASSERT_THAT(ftruncate(fd.get(), 12345), SyscallSucceeds());
std::vector<Event> events =
ASSERT_NO_ERRNO_AND_VALUE(DrainEvents(inotify_fd.get()));
- EXPECT_THAT(events, Are({
- Event(IN_ATTRIB, file_wd),
- Event(IN_DELETE, dir_wd, Basename(file.path())),
- Event(IN_MODIFY, dir_wd, Basename(file.path())),
- Event(IN_MODIFY, file_wd),
- }));
+ EXPECT_THAT(events, AnyOf(Are({
+ Event(IN_ATTRIB, file_wd),
+ Event(IN_DELETE, dir_wd, Basename(file.path())),
+ Event(IN_MODIFY, dir_wd, Basename(file.path())),
+ Event(IN_MODIFY, file_wd),
+ }),
+ Are({
+ Event(IN_DELETE, dir_wd, Basename(file.path())),
+ Event(IN_ATTRIB, file_wd),
+ Event(IN_MODIFY, dir_wd, Basename(file.path())),
+ Event(IN_MODIFY, file_wd),
+ })));
const struct timeval times[2] = {{1, 0}, {2, 0}};
ASSERT_THAT(futimes(fd.get(), times), SyscallSucceeds());