This is an automated email from the ASF dual-hosted git repository. mzhu pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/mesos.git
commit c7979930e7901b090ebed98baf1e525e9aea80fb Author: Meng Zhu <[email protected]> AuthorDate: Mon Aug 19 13:58:11 2019 -0700 Added a test for RoleTree for basic add and remove operations. Review: https://reviews.apache.org/r/71313 --- src/tests/sorter_tests.cpp | 91 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) diff --git a/src/tests/sorter_tests.cpp b/src/tests/sorter_tests.cpp index fc33971..97ab910 100644 --- a/src/tests/sorter_tests.cpp +++ b/src/tests/sorter_tests.cpp @@ -30,12 +30,17 @@ #include "master/allocator/mesos/sorter/random/sorter.hpp" #include "master/allocator/mesos/sorter/random/utils.hpp" +#include "master/allocator/mesos/hierarchical.hpp" + +#include "tests/allocator.hpp" #include "tests/mesos.hpp" #include "tests/resources_utils.hpp" using mesos::internal::master::allocator::DRFSorter; using mesos::internal::master::allocator::RandomSorter; +using mesos::internal::master::allocator::internal::RoleTree; + using std::cout; using std::endl; using std::pair; @@ -2180,6 +2185,92 @@ TYPED_TEST(CommonSorterTest, BENCHMARK_HierarchyFullSort) } } + +TEST(RoleTreeTest, RolesTracking) { + RoleTree roleTree; + + // Tracking by weights. + + roleTree.updateWeight("a/b/c", 2.0); + + EXPECT_SOME(roleTree.get("a")); + EXPECT_SOME(roleTree.get("a/b")); + EXPECT_SOME(roleTree.get("a/b/c")); + + EXPECT_EQ(master::DEFAULT_WEIGHT, (*roleTree.get("a"))->weight()); + EXPECT_EQ(master::DEFAULT_WEIGHT, (*roleTree.get("a/b"))->weight()); + EXPECT_EQ(2.0, (*roleTree.get("a/b/c"))->weight()); + + roleTree.updateWeight("a/b/c", master::DEFAULT_WEIGHT); + + EXPECT_NONE(roleTree.get("a/b/c")); + EXPECT_NONE(roleTree.get("a/b")); + EXPECT_NONE(roleTree.get("a")); + + // Tracking by quota. + + Quota quota = createQuota("cpus:1"); + roleTree.updateQuota("a/b/c", quota); + + EXPECT_SOME(roleTree.get("a")); + EXPECT_SOME(roleTree.get("a/b")); + EXPECT_SOME(roleTree.get("a/b/c")); + + EXPECT_EQ(master::DEFAULT_QUOTA, (*roleTree.get("a"))->quota()); + EXPECT_EQ(master::DEFAULT_QUOTA, (*roleTree.get("a/b"))->quota()); + EXPECT_EQ(quota, (*roleTree.get("a/b/c"))->quota()); + + roleTree.updateQuota("a/b/c", master::DEFAULT_QUOTA); + + EXPECT_NONE(roleTree.get("a/b/c")); + EXPECT_NONE(roleTree.get("a/b")); + EXPECT_NONE(roleTree.get("a")); + + // Tracking by reservation. + + Resources reserved = CHECK_NOTERROR(Resources::parse("cpus(a/b/c):1")); + ResourceQuantities quantities = + ResourceQuantities::fromScalarResources(reserved); + + roleTree.trackReservations(reserved); + + EXPECT_SOME(roleTree.get("a")); + EXPECT_SOME(roleTree.get("a/b")); + EXPECT_SOME(roleTree.get("a/b/c")); + + EXPECT_EQ(quantities, (*roleTree.get("a"))->reservationScalarQuantities()); + EXPECT_EQ(quantities, (*roleTree.get("a/b"))->reservationScalarQuantities()); + EXPECT_EQ( + quantities, (*roleTree.get("a/b/c"))->reservationScalarQuantities()); + + roleTree.untrackReservations(reserved); + + EXPECT_NONE(roleTree.get("a/b/c")); + EXPECT_NONE(roleTree.get("a/b")); + EXPECT_NONE(roleTree.get("a")); + + // Tracking by frameworks. + + FrameworkID frameworkId; + frameworkId.set_value("framework"); + roleTree.trackFramework(frameworkId, "a/b/c"); + + EXPECT_SOME(roleTree.get("a")); + EXPECT_SOME(roleTree.get("a/b")); + EXPECT_SOME(roleTree.get("a/b/c")); + + EXPECT_TRUE((*roleTree.get("a"))->frameworks().empty()); + EXPECT_TRUE((*roleTree.get("a/b"))->frameworks().empty()); + EXPECT_EQ(1u, (*roleTree.get("a/b/c"))->frameworks().size()); + + roleTree.untrackFramework(frameworkId, "a/b/c"); + + EXPECT_NONE(roleTree.get("a/b/c")); + EXPECT_NONE(roleTree.get("a/b")); + EXPECT_NONE(roleTree.get("a")); +} + + } // namespace tests { } // namespace internal { } // namespace mesos {
