// Test that the changes made by the resources decorator hook are correctly // propagated to the resource offer. TEST_F(HookTest, VerifySlaveResourcesAndAttributesDecorator) { Try<PID<Master>> master = StartMaster(CreateMasterFlags()); ASSERT_SOME(master); MockExecutor exec(DEFAULT_EXECUTOR_ID); TestContainerizer containerizer(&exec); // Start a mock slave since we aren't testing the slave hooks yet. Try<PID<Slave>> slave = StartSlave(&containerizer); ASSERT_SOME(slave); MockScheduler sched; MesosSchedulerDriver driver( &sched, DEFAULT_FRAMEWORK_INFO, master.get(), DEFAULT_CREDENTIAL); EXPECT_CALL(sched, registered(&driver, _, _)); Future<vector<Offer>> offers; EXPECT_CALL(sched, resourceOffers(&driver, _)) .WillOnce(FutureArg<1>(&offers)) .WillRepeatedly(Return()); // Ignore subsequent offers. driver.start(); AWAIT_READY(offers); EXPECT_NE(0u, offers.get().size()); Resources resources = offers.get()[0].resources(); // The test hook sets "cpus" to 4. EXPECT_EQ(4, resources.cpus().get()); // The test hook adds a resource named "foo" of type set with values "bar" // and "baz". EXPECT_EQ(Resources::parse("foo:{bar,baz}").get(), resources.get("foo")); // The test hook does not modify "mem", the default value must still be // present. EXPECT_SOME(resources.mem()); // The test hook adds an attribute named "rack" with value "rack1". Attributes attributes = offers.get()[0].attributes(); ASSERT_EQ(attributes.get(0).name(), "rack"); ASSERT_EQ(attributes.get(0).text().value(), "rack1"); driver.stop(); driver.join(); Shutdown(); }
TEST(ResourcesTest, Resources) { Resources r = Resources::parse( "cpus:45.55;mem:1024;ports:[10000-20000, 30000-50000];disk:512").get(); EXPECT_SOME_EQ(45.55, r.cpus()); EXPECT_SOME_EQ(Megabytes(1024), r.mem()); EXPECT_SOME_EQ(Megabytes(512), r.disk()); ASSERT_SOME(r.ports()); ostringstream ports; ports << r.ports().get(); EXPECT_EQ("[10000-20000, 30000-50000]", ports.str()); r = Resources::parse("cpus:45.55;disk:512").get(); EXPECT_SOME_EQ(45.55, r.cpus()); EXPECT_SOME_EQ(Megabytes(512), r.disk()); EXPECT_TRUE(r.mem().isNone()); EXPECT_TRUE(r.ports().isNone()); }
TEST(ResourcesTest, ScalarSubtraction2) { Resource cpus1 = Resources::parse("cpus", "5", "role1").get(); Resource cpus2 = Resources::parse("cpus", "3", "role2").get(); Resource cpus3 = Resources::parse("cpus", "1", "role1").get(); Resources r1; r1 += cpus1; r1 += cpus2; Resources r2; r2 += cpus3; Resources diff = r1 - r2; EXPECT_FALSE(diff.empty()); EXPECT_EQ(7, diff.cpus().get()); EXPECT_EQ(diff, Resources::parse("cpus(role1):4;cpus(role2):3").get()); }
TEST(ResourcesTest, ScalarAddition2) { Resource cpus1 = Resources::parse("cpus", "1", "role1").get(); Resource cpus2 = Resources::parse("cpus", "3", "role2").get(); Resource cpus3 = Resources::parse("cpus", "5", "role1").get(); Resources r1; r1 += cpus1; r1 += cpus2; Resources r2; r2 += cpus3; Resources sum = r1 + r2; EXPECT_FALSE(sum.empty()); EXPECT_EQ(9, sum.cpus().get()); EXPECT_EQ(sum, Resources::parse("cpus(role1):6;cpus(role2):3").get()); }