You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by be...@apache.org on 2012/08/20 23:42:03 UTC

svn commit: r1375241 - /incubator/mesos/trunk/src/tests/sorter_tests.cpp

Author: benh
Date: Mon Aug 20 21:42:03 2012
New Revision: 1375241

URL: http://svn.apache.org/viewvc?rev=1375241&view=rev
Log:
Forgot to add new file.

Added:
    incubator/mesos/trunk/src/tests/sorter_tests.cpp

Added: incubator/mesos/trunk/src/tests/sorter_tests.cpp
URL: http://svn.apache.org/viewvc/incubator/mesos/trunk/src/tests/sorter_tests.cpp?rev=1375241&view=auto
==============================================================================
--- incubator/mesos/trunk/src/tests/sorter_tests.cpp (added)
+++ incubator/mesos/trunk/src/tests/sorter_tests.cpp Mon Aug 20 21:42:03 2012
@@ -0,0 +1,124 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <gmock/gmock.h>
+
+#include "master/drf_sorter.hpp"
+#include "master/sorter.hpp"
+
+using namespace mesos::internal;
+
+using mesos::internal::master::Sorter;
+using mesos::internal::master::DRFSorter;
+
+using std::list;
+using std::string;
+
+void checkSorter(Sorter& sorter, int count, ...)
+{
+  va_list elements;
+  va_start(elements, count);
+  list<string> ordering = sorter.sort();
+  EXPECT_EQ(ordering.size(), count);
+
+  foreach (const string& actual, ordering) {
+    const char* expected = va_arg(elements, char*);
+    EXPECT_EQ(actual, expected);
+  }
+}
+
+
+TEST(SorterTest, DRFSorter)
+{
+  DRFSorter sorter;
+
+  Resources totalResources = Resources::parse("cpus:100;mem:100");
+  sorter.add(totalResources);
+
+  sorter.add("a");
+  Resources aResources = Resources::parse("cpus:5;mem:5");
+  sorter.allocated("a", aResources);
+
+  Resources bResources = Resources::parse("cpus:6;mem:6");
+  sorter.add("b");
+  sorter.allocated("b", bResources);
+
+  // shares: a = .05, b = .06
+  checkSorter(sorter, 2, "a", "b");
+
+  Resources cResources = Resources::parse("cpus:1;mem:1");
+  sorter.add("c");
+  sorter.allocated("c", cResources);
+
+  Resources dResources = Resources::parse("cpus:3;mem:1");
+  sorter.add("d");
+  sorter.allocated("d", dResources);
+
+  // shares: a = .05, b = .06, c = .01, d = .03
+  checkSorter(sorter, 4, "c", "d", "a", "b");
+
+  sorter.remove("a");
+  Resources bUnallocated = Resources::parse("cpus:4;mem:4");
+  sorter.unallocated("b", bUnallocated);
+
+  // shares: b = .02, c = .01, d = .03
+  checkSorter(sorter, 3, "c", "b", "d");
+
+  Resources eResources = Resources::parse("cpus:1;mem:5");
+  sorter.add("e");
+  sorter.allocated("e", eResources);
+
+  Resources removedResources = Resources::parse("cpus:50;mem:0");
+  sorter.remove(removedResources);
+  // total resources is now cpus = 50, mem = 100
+
+  // shares: b = .04, c = .02, d = .06, e = .05
+  checkSorter(sorter, 4, "c", "b", "e", "d");
+
+  Resources addedResources = Resources::parse("cpus:0;mem:100");
+  sorter.add(addedResources);
+  // total resources is now cpus = 50, mem = 200
+
+  Resources fResources = Resources::parse("cpus:5;mem:1");
+  sorter.add("f");
+  sorter.allocated("f", fResources);
+
+  Resources cResources2 = Resources::parse("cpus:0;mem:15");
+  sorter.allocated("c", cResources2);
+
+  // shares: b = .04, c = .08, d = .06, e = .025, f = .1
+  checkSorter(sorter, 5, "e", "b", "d", "c", "f");
+
+  EXPECT_TRUE(sorter.contains("b"));
+
+  EXPECT_FALSE(sorter.contains("a"));
+
+  EXPECT_EQ(sorter.count(), 5);
+
+  sorter.deactivate("d");
+
+  EXPECT_TRUE(sorter.contains("d"));
+
+  checkSorter(sorter, 4, "e", "b", "c", "f");
+
+  EXPECT_EQ(sorter.count(), 5);
+
+  sorter.activate("d");
+
+  checkSorter(sorter, 5, "e", "b", "d", "c", "f");
+}