Added test to test corner cases with sorted 'MountInfoTable::read()'. We allow entries in the MountInfoTable to be out of order, as well as parent's of themselves. This test makes sure that this functionality is exercised.
Review: https://reviews.apache.org/r/52703/ Project: http://git-wip-us.apache.org/repos/asf/mesos/repo Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/2f005a03 Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/2f005a03 Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/2f005a03 Branch: refs/heads/master Commit: 2f005a03d59948c9a41b3fea8f81332e4e74ab3c Parents: 44c4383 Author: Kevin Klues <klue...@gmail.com> Authored: Wed Oct 12 22:34:15 2016 -0700 Committer: Jie Yu <yujie....@gmail.com> Committed: Wed Oct 12 22:34:15 2016 -0700 ---------------------------------------------------------------------- src/tests/containerizer/fs_tests.cpp | 35 +++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/mesos/blob/2f005a03/src/tests/containerizer/fs_tests.cpp ---------------------------------------------------------------------- diff --git a/src/tests/containerizer/fs_tests.cpp b/src/tests/containerizer/fs_tests.cpp index 0dd212f..d8bd1d0 100644 --- a/src/tests/containerizer/fs_tests.cpp +++ b/src/tests/containerizer/fs_tests.cpp @@ -22,6 +22,7 @@ #include <stout/foreach.hpp> #include <stout/gtest.hpp> +#include <stout/hashset.hpp> #include <stout/none.hpp> #include <stout/option.hpp> #include <stout/os.hpp> @@ -184,6 +185,40 @@ TEST_F(FsTest, MountInfoTableReadSorted) } +TEST_F(FsTest, MountInfoTableReadSortedParentOfSelf) +{ + // Construct a mount info table with a few entries out of order as + // well as a few having themselves as parents. + string lines = + "1 1 0:00 / / rw shared:6 - sysfs sysfs rw\n" + "6 5 0:00 / /6 rw shared:6 - sysfs sysfs rw\n" + "7 6 0:00 / /7 rw shared:6 - sysfs sysfs rw\n" + "8 8 0:00 / /8 rw shared:6 - sysfs sysfs rw\n" + "9 8 0:00 / /9 rw shared:6 - sysfs sysfs rw\n" + "2 1 0:00 / /2 rw shared:6 - sysfs sysfs rw\n" + "3 2 0:00 / /3 rw shared:6 - sysfs sysfs rw\n" + "4 3 0:00 / /4 rw shared:6 - sysfs sysfs rw\n" + "5 4 0:00 / /5 rw shared:6 - sysfs sysfs rw\n"; + + // Examine the calling process's mountinfo table. + Try<MountInfoTable> table = MountInfoTable::read(lines); + ASSERT_SOME(table); + + hashset<int> ids; + + // Verify that all parent entries appear *before* their children. + foreach (const MountInfoTable::Entry& entry, table->entries) { + if (entry.target != "/") { + ASSERT_TRUE(ids.contains(entry.parent)); + } + + ASSERT_FALSE(ids.contains(entry.id)); + + ids.insert(entry.id); + } +} + + TEST_F(FsTest, ROOT_SharedMount) { string directory = os::getcwd();