You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by as...@apache.org on 2020/08/25 14:35:11 UTC
[mesos] 03/03: Added basic tests for offer constraints on a string
attribute equality.
This is an automated email from the ASF dual-hosted git repository.
asekretenko pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mesos.git
commit 62931a04f2cd2a1951d04bd348ff23700cc73d9b
Author: Andrei Sekretenko <as...@apache.org>
AuthorDate: Fri Aug 14 21:52:51 2020 +0200
Added basic tests for offer constraints on a string attribute equality.
Review: https://reviews.apache.org/r/72776
---
.../master/offer_constraints_filter_tests.cpp | 131 +++++++++++++++++++++
1 file changed, 131 insertions(+)
diff --git a/src/tests/master/offer_constraints_filter_tests.cpp b/src/tests/master/offer_constraints_filter_tests.cpp
index f88e201..84a1e91 100644
--- a/src/tests/master/offer_constraints_filter_tests.cpp
+++ b/src/tests/master/offer_constraints_filter_tests.cpp
@@ -128,6 +128,137 @@ TEST(OfferConstraintsFilter, NamedAttributeNotExists)
}
+// Tests a single TextEquals constraint on a named attribute.
+TEST(OfferConstraintsFilter, NamedAttributeTextEquals)
+{
+ Try<OfferConstraints> constraints = OfferConstraintsFromJSON(R"~(
+ {
+ "role_constraints": {
+ "roleA": {
+ "groups": [{
+ "attribute_constraints": [{
+ "selector": {"attribute_name": "bar"},
+ "predicate": {"text_equals": {"value": "baz"}}
+ }]
+ }]
+ }
+ }
+ })~");
+
+ ASSERT_SOME(constraints);
+
+ const Try<OfferConstraintsFilter> filter =
+ OfferConstraintsFilter::create(std::move(*constraints));
+
+ ASSERT_SOME(filter);
+
+ // Attribute exists, is a string and equals to the value in the constraint.
+ EXPECT_FALSE(
+ filter->isAgentExcluded("roleA", slaveInfoWithAttributes("bar:baz")));
+
+ // Attribute is not a string.
+ EXPECT_FALSE(
+ filter->isAgentExcluded("roleA", slaveInfoWithAttributes("bar:123")));
+
+ EXPECT_FALSE(
+ filter->isAgentExcluded("roleA", slaveInfoWithAttributes("bar:[1-17]")));
+
+ // Attribute has a wrong string value.
+ EXPECT_TRUE(
+ filter->isAgentExcluded("roleA", slaveInfoWithAttributes("bar:zab")));
+
+ // Attribute does not exist.
+ EXPECT_TRUE(
+ filter->isAgentExcluded("roleA", slaveInfoWithAttributes("foo:baz")));
+}
+
+
+// Tests a single TextNotEquals constraint on a named attribute.
+TEST(OfferConstraintsFilter, NamedAttributeTextNotEquals)
+{
+ Try<OfferConstraints> constraints = OfferConstraintsFromJSON(R"~(
+ {
+ "role_constraints": {
+ "roleA": {
+ "groups": [{
+ "attribute_constraints": [{
+ "selector": {"attribute_name": "bar"},
+ "predicate": {"text_not_equals": {"value": "baz"}}
+ }]
+ }]
+ }
+ }
+ })~");
+
+ ASSERT_SOME(constraints);
+
+ const Try<OfferConstraintsFilter> filter =
+ OfferConstraintsFilter::create(std::move(*constraints));
+
+ ASSERT_SOME(filter);
+
+ // Attribute exists, is a string and equals to the value in the constraint.
+ EXPECT_TRUE(
+ filter->isAgentExcluded("roleA", slaveInfoWithAttributes("bar:baz")));
+
+ // Attribute is not a string.
+ EXPECT_FALSE(
+ filter->isAgentExcluded("roleA", slaveInfoWithAttributes("bar:123")));
+
+ EXPECT_FALSE(
+ filter->isAgentExcluded("roleA", slaveInfoWithAttributes("bar:[1-17]")));
+
+ // Attribute has a different string value.
+ EXPECT_FALSE(
+ filter->isAgentExcluded("roleA", slaveInfoWithAttributes("bar:zab")));
+
+ // Attribute does not exist.
+ EXPECT_FALSE(
+ filter->isAgentExcluded("roleA", slaveInfoWithAttributes("foo:baz")));
+}
+
+
+// Tests that when an attribute has several values, the constraint's predicate
+// is evaluated against the first one.
+TEST(OfferConstraintsFilter, TwoAttributesWithTheSameName)
+{
+ Try<OfferConstraints> constraints = OfferConstraintsFromJSON(R"~(
+ {
+ "role_constraints": {
+ "roleA": {
+ "groups": [{
+ "attribute_constraints": [{
+ "selector": {"attribute_name": "bar"},
+ "predicate": {"text_equals": {"value": "baz"}}
+ }]
+ }]
+ }
+ }
+ })~");
+
+ ASSERT_SOME(constraints);
+
+ const Try<OfferConstraintsFilter> filter =
+ OfferConstraintsFilter::create(std::move(*constraints));
+
+ ASSERT_SOME(filter);
+
+ // The selected attribute has a suitable value.
+ EXPECT_FALSE(filter->isAgentExcluded(
+ "roleA", slaveInfoWithAttributes("bar:baz;bar:foo")));
+
+ EXPECT_FALSE(filter->isAgentExcluded(
+ "roleA", slaveInfoWithAttributes("bar:123;bar:foo")));
+
+ // The selected attribute has an unsuitable value.
+ EXPECT_TRUE(filter->isAgentExcluded(
+ "roleA", slaveInfoWithAttributes("bar:foo;bar:baz")));
+
+ EXPECT_TRUE(filter->isAgentExcluded(
+ "roleA", slaveInfoWithAttributes("bar:foo;bar:123")));
+}
+
+
// Tests a single group of two constraints.
TEST(OfferConstraintsFilter, TwoConstraintsInGroup)
{