Cleaned up a check in the allocator tests. Ensure the future for allocation is pending when there should be no allocations. Reduce the number of allocations triggered in the test.
Review: https://reviews.apache.org/r/42672/ Project: http://git-wip-us.apache.org/repos/asf/mesos/repo Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/45c46f19 Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/45c46f19 Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/45c46f19 Branch: refs/heads/master Commit: 45c46f19cd5dc77df1141e6b0afdfe17c99facdb Parents: c2c41e4 Author: Alexander Rukletsov <[email protected]> Authored: Tue Feb 9 18:44:14 2016 +0100 Committer: Benjamin Mahler <[email protected]> Committed: Tue Feb 9 20:00:42 2016 +0100 ---------------------------------------------------------------------- src/tests/hierarchical_allocator_tests.cpp | 46 ++++++++++--------------- 1 file changed, 19 insertions(+), 27 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/mesos/blob/45c46f19/src/tests/hierarchical_allocator_tests.cpp ---------------------------------------------------------------------- diff --git a/src/tests/hierarchical_allocator_tests.cpp b/src/tests/hierarchical_allocator_tests.cpp index f09517d..990f372 100644 --- a/src/tests/hierarchical_allocator_tests.cpp +++ b/src/tests/hierarchical_allocator_tests.cpp @@ -1477,17 +1477,19 @@ TEST_F(HierarchicalAllocatorTest, QuotaProvidesGuarantee) // NO_QUOTA_ROLE share = 0 // framework2 share = 0 - // Now `framework1` declines the second offer and sets a filter for 5 - // seconds. The declined resources should not be offered to `framework2` - // because by doing so they may not be available to `framework1` when - // the filter expires. - Filters filter5s; - filter5s.set_refuse_seconds(5.); + // Now `framework1` declines the second offer and sets a filter for twice + // the allocation interval. The declined resources should not be offered + // to `framework2` because by doing so they may not be available to + // `framework1` when the filter expires. + Duration filterTimeout = flags.allocation_interval * 2; + Filters offerFilter; + offerFilter.set_refuse_seconds(filterTimeout.secs()); + allocator->recoverResources( framework1.id(), agent2.id(), allocation.get().resources.get(agent2.id()).get(), - filter5s); + offerFilter); // Total cluster resources: cpus=1, mem=512. // QUOTA_ROLE share = 0.5 (cpus=1, mem=512) [quota: cpus=2, mem=1024] @@ -1495,33 +1497,23 @@ TEST_F(HierarchicalAllocatorTest, QuotaProvidesGuarantee) // NO_QUOTA_ROLE share = 0 // framework2 share = 0 - // Assuming the default batch allocation interval is less than 5 seconds, - // all batch allocations that happen while the refuse filter is active - // should yield no new allocations. - ASSERT_LT(flags.allocation_interval.secs(), filter5s.refuse_seconds()); - Clock::advance(flags.allocation_interval); + // Ensure the offer filter timeout is set before advancing the clock. Clock::settle(); - // TODO(alexr): There is currently no way to check the absence of - // allocations. The `process::Queue` class does not support any size - // checking methods. Consider adding `process::Queue::empty()` or - // refactor the test harness so that we can reason about whether the - // Hierarchical allocator has assigned expected allocations or not. - // - // NOTE: It is hard to capture the absense of an allocation in a - // general case, because an allocator may be complex enough to postpone - // decisions beyond its allocation cycle. - - // Now advance the clock to make sure the filter is expired and removed. - Clock::advance(Duration::create(filter5s.refuse_seconds()).get()); + // Trigger a batch allocation. + Clock::advance(flags.allocation_interval); Clock::settle(); - // Trigger the next batch allocation. It should offer the previously - // declined resources to the quota'ed role. + // There should be no allocation due to the offer filter. + allocation = allocations.get(); + ASSERT_TRUE(allocation.isPending()); + + // Ensure the offer filter times out (2x the allocation interval) + // and the next batch allocation occurs. Clock::advance(flags.allocation_interval); Clock::settle(); - allocation = allocations.get(); + // Previously declined resources should be offered to the quota'ed role. AWAIT_READY(allocation); EXPECT_EQ(framework1.id(), allocation.get().frameworkId); EXPECT_EQ(agent2.resources(), Resources::sum(allocation.get().resources));
