예제 #1
0
// 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();
}
예제 #2
0
TEST(AttributesTest, invalid_attrib_is_ignored)
{
    string s = "default";
    Attributes a;
    a.addFromGFF("foo");
    EXPECT_FALSE(a.get("foo", s));
    EXPECT_EQ("default", s);
}
예제 #3
0
TEST(AttributesTest, get_decoded_value)
{
    string s;
    Attributes a;
    a.addFromGFF("foo=hello%20world%2Cplanet");
    a.get("foo", s);
    EXPECT_EQ("hello world,planet", s);
}
예제 #4
0
TEST(AttributesTest, get_empty_value)
{
    string s;
    Attributes a;
    a.addFromGFF("foo=");
    a.get("foo", s);
    EXPECT_EQ("", s);
}
예제 #5
0
TEST(AttributesTest, get_first_of_many)
{
    string s;
    Attributes a;
    a.addFromGFF("foo=bar,baz");
    a.get("foo", s);
    EXPECT_EQ("bar", s);
}
예제 #6
0
TEST(AttributesTest, get)
{
    string s;
    Attributes a;
    a.addFromGFF("foo=bar");
    a.get("foo", s);
    EXPECT_EQ("bar", s);
}
예제 #7
0
TEST(AttributesTest, Parsing)
{
  Attributes a = Attributes::parse("cpus:45.55;"
                                   "ports:[10000-20000, 30000-50000];"
                                   "rack:rack1,rack2");
  ASSERT_EQ(Value::SCALAR, a.get(0).type());
  ASSERT_EQ("cpus", a.get(0).name());
  ASSERT_FLOAT_EQ(45.55, a.get(0).scalar().value());

  ASSERT_EQ(Value::RANGES, a.get(1).type());
  ASSERT_EQ("ports", a.get(1).name());
  ASSERT_EQ(2, a.get(1).ranges().range_size());
  ASSERT_EQ(10000u, a.get(1).ranges().range(0).begin());
  ASSERT_EQ(20000u, a.get(1).ranges().range(0).end());
  ASSERT_EQ(30000u, a.get(1).ranges().range(1).begin());
  ASSERT_EQ(50000u, a.get(1).ranges().range(1).end());


  ASSERT_EQ(Value::TEXT, a.get(2).type());
  ASSERT_EQ("rack", a.get(2).name());
  ASSERT_EQ("rack1,rack2", a.get(2).text().value());

  Attributes b = Attributes::parse("attr1:foo:bar;attr2:baz:qux:");
  ASSERT_EQ(Value::TEXT, b.get(0).type());
  ASSERT_EQ("attr1", b.get(0).name());
  ASSERT_EQ("foo:bar", b.get(0).text().value());
  ASSERT_EQ(Value::TEXT, b.get(1).type());
  ASSERT_EQ("attr2", b.get(1).name());
  ASSERT_EQ("baz:qux:", b.get(1).text().value());
}