// 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()); }