This is an automated email from the ASF dual-hosted git repository.

mzhu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mesos.git

commit 4371ea211bf00d0ea8b9fd8104259fec6f65a133
Author: Meng Zhu <[email protected]>
AuthorDate: Wed Mar 6 17:52:50 2019 -0800

    Added tests for `ResourceLimits`.
    
    Review: https://reviews.apache.org/r/70152
---
 src/tests/resource_quantities_tests.cpp | 140 ++++++++++++++++++++++++++++++++
 1 file changed, 140 insertions(+)

diff --git a/src/tests/resource_quantities_tests.cpp 
b/src/tests/resource_quantities_tests.cpp
index 5edbac3..0f27df7 100644
--- a/src/tests/resource_quantities_tests.cpp
+++ b/src/tests/resource_quantities_tests.cpp
@@ -289,6 +289,146 @@ TEST(QuantitiesTest, Contains)
 }
 
 
+static vector<pair<string, double>> toVector(
+  const ResourceLimits& limits)
+{
+  vector<pair<string, double>> result;
+
+  foreach (auto& limit, limits) {
+    result.push_back(std::make_pair(limit.first, limit.second.value()));
+  }
+
+  return result;
+}
+
+
+// These are similar to `QuantitiesTest.FromStringValid` except when zero
+// values are involved.
+TEST(LimitsTest, FromStringValid)
+{
+  // A single resource.
+  ResourceLimits resourceLimits =
+    CHECK_NOTERROR(ResourceLimits::fromString("cpus:10"));
+  vector<pair<string, double>> expected = {{"cpus", 10}};
+  EXPECT_EQ(expected, toVector(resourceLimits));
+
+  resourceLimits =
+    CHECK_NOTERROR(ResourceLimits::fromString("cpus:3.14"));
+  expected = {{"cpus", 3.14}};
+  EXPECT_EQ(expected, toVector(resourceLimits));
+
+  // Whitespace is trimmed.
+  resourceLimits =
+    CHECK_NOTERROR(ResourceLimits::fromString(" cpus : 3.14 ; disk : 10 "));
+  expected = {{"cpus", 3.14}, {"disk", 10}};
+  EXPECT_EQ(expected, toVector(resourceLimits));
+
+  // Zero value is preserved.
+  resourceLimits = CHECK_NOTERROR(ResourceLimits::fromString("cpus:0"));
+  expected = {{"cpus", 0}};
+  EXPECT_EQ(expected, toVector(resourceLimits));
+
+  // Two resources.
+  resourceLimits =
+    CHECK_NOTERROR(ResourceLimits::fromString("cpus:10.5;ports:1"));
+  expected = {{"cpus", 10.5}, {"ports", 1}};
+  EXPECT_EQ(expected, toVector(resourceLimits));
+
+  // Two resources with names out of alphabetical order.
+  resourceLimits =
+    CHECK_NOTERROR(ResourceLimits::fromString("ports:3;cpus:10.5"));
+  expected = {{"cpus", 10.5}, {"ports", 3}};
+  EXPECT_EQ(expected, toVector(resourceLimits));
+}
+
+
+// These are identical to `QuantitiesTest.FromStringInvalid`.
+TEST(LimitsTest, FromStringInvalid)
+{
+  // Invalid scalar.
+  Try<ResourceLimits> resourceLimits =
+    ResourceLimits::fromString("cpus:a10");
+  EXPECT_ERROR(resourceLimits);
+
+  resourceLimits = ResourceLimits::fromString("cpus:3.14c");
+  EXPECT_ERROR(resourceLimits);
+
+  // Missing semicolon.
+  resourceLimits = ResourceLimits::fromString("ports:3,cpus:1");
+  EXPECT_ERROR(resourceLimits);
+
+  // Negative value.
+  resourceLimits = ResourceLimits::fromString("ports:3,cpus:-1");
+  EXPECT_ERROR(resourceLimits);
+
+  resourceLimits = ResourceLimits::fromString("cpus:nan");
+  EXPECT_ERROR(resourceLimits);
+
+  resourceLimits = ResourceLimits::fromString("cpus:-nan");
+  EXPECT_ERROR(resourceLimits);
+
+  resourceLimits = ResourceLimits::fromString("cpus:inf");
+  EXPECT_ERROR(resourceLimits);
+
+  resourceLimits = ResourceLimits::fromString("cpus:-inf");
+  EXPECT_ERROR(resourceLimits);
+
+  resourceLimits = ResourceLimits::fromString("cpus:infinity");
+  EXPECT_ERROR(resourceLimits);
+
+  resourceLimits = ResourceLimits::fromString("cpus:-infinity");
+  EXPECT_ERROR(resourceLimits);
+
+  // Duplicate entries.
+  resourceLimits = ResourceLimits::fromString("cpus:1;cpus:2");
+  EXPECT_ERROR(resourceLimits);
+}
+
+
+TEST(LimitsTest, Contains)
+{
+  ResourceLimits infinite{};
+  EXPECT_TRUE(infinite.contains(infinite));
+
+  ResourceLimits finite = CHECK_NOTERROR(ResourceLimits::fromString("cpus:1"));
+  infinite = ResourceLimits();
+  EXPECT_TRUE(infinite.contains(finite));
+  EXPECT_FALSE(finite.contains(infinite));
+
+  finite = CHECK_NOTERROR(ResourceLimits::fromString("cpus:1;mem:1"));
+  EXPECT_TRUE(finite.contains(finite));
+
+  ResourceLimits moreLimits =
+    CHECK_NOTERROR(ResourceLimits::fromString("cpus:1;mem:1;disk:1"));
+  ResourceLimits lessLimits =
+    CHECK_NOTERROR(ResourceLimits::fromString("cpus:1;mem:1"));
+  EXPECT_TRUE(lessLimits.contains(moreLimits));
+  EXPECT_FALSE(moreLimits.contains(lessLimits));
+
+  // Intersected sets.
+  ResourceLimits limits1 =
+    CHECK_NOTERROR(ResourceLimits::fromString("cpus:1;mem:1"));
+  ResourceLimits limits2 =
+    CHECK_NOTERROR(ResourceLimits::fromString("cpus:1;disk:1"));
+  EXPECT_FALSE(limits1.contains(limits2));
+  EXPECT_FALSE(limits2.contains(limits1));
+
+  // Sets with no intersection.
+  limits1 = CHECK_NOTERROR(ResourceLimits::fromString("cpus:1;mem:1"));
+  limits2 = CHECK_NOTERROR(ResourceLimits::fromString("gpu:1;disk:1"));
+  EXPECT_FALSE(limits1.contains(limits2));
+  EXPECT_FALSE(limits2.contains(limits1));
+
+  // Same name, different scalars.
+  ResourceLimits higherLimits =
+    CHECK_NOTERROR(ResourceLimits::fromString("cpus:2;mem:2"));
+  ResourceLimits lowerLimits =
+    CHECK_NOTERROR(ResourceLimits::fromString("cpus:2;mem:1"));
+  EXPECT_TRUE(higherLimits.contains(lowerLimits));
+  EXPECT_FALSE(lowerLimits.contains(higherLimits));
+}
+
+
 } // namespace tests {
 } // namespace internal {
 } // namespace mesos {

Reply via email to