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"); }
TEST(SorterTest, DRFSorter) { DRFSorter sorter; SlaveID slaveId; slaveId.set_value("agentId"); Resources totalResources = Resources::parse("cpus:100;mem:100").get(); sorter.add(slaveId, totalResources); sorter.add("a"); Resources aResources = Resources::parse("cpus:5;mem:5").get(); sorter.allocated("a", slaveId, aResources); Resources bResources = Resources::parse("cpus:6;mem:6").get(); sorter.add("b"); sorter.allocated("b", slaveId, bResources); // shares: a = .05, b = .06 EXPECT_EQ(list<string>({"a", "b"}), sorter.sort()); Resources cResources = Resources::parse("cpus:1;mem:1").get(); sorter.add("c"); sorter.allocated("c", slaveId, cResources); Resources dResources = Resources::parse("cpus:3;mem:1").get(); sorter.add("d"); sorter.allocated("d", slaveId, dResources); // shares: a = .05, b = .06, c = .01, d = .03 EXPECT_EQ(list<string>({"c", "d", "a", "b"}), sorter.sort()); sorter.remove("a"); Resources bUnallocated = Resources::parse("cpus:4;mem:4").get(); sorter.unallocated("b", slaveId, bUnallocated); // shares: b = .02, c = .01, d = .03 EXPECT_EQ(list<string>({"c", "b", "d"}), sorter.sort()); Resources eResources = Resources::parse("cpus:1;mem:5").get(); sorter.add("e"); sorter.allocated("e", slaveId, eResources); Resources removedResources = Resources::parse("cpus:50;mem:0").get(); sorter.remove(slaveId, removedResources); // total resources is now cpus = 50, mem = 100 // shares: b = .04, c = .02, d = .06, e = .05 EXPECT_EQ(list<string>({"c", "b", "e", "d"}), sorter.sort()); Resources addedResources = Resources::parse("cpus:0;mem:100").get(); sorter.add(slaveId, addedResources); // total resources is now cpus = 50, mem = 200 Resources fResources = Resources::parse("cpus:5;mem:1").get(); sorter.add("f"); sorter.allocated("f", slaveId, fResources); Resources cResources2 = Resources::parse("cpus:0;mem:15").get(); sorter.allocated("c", slaveId, cResources2); // shares: b = .04, c = .08, d = .06, e = .025, f = .1 EXPECT_EQ(list<string>({"e", "b", "d", "c", "f"}), sorter.sort()); EXPECT_TRUE(sorter.contains("b")); EXPECT_FALSE(sorter.contains("a")); EXPECT_EQ(5, sorter.count()); sorter.deactivate("d"); EXPECT_TRUE(sorter.contains("d")); EXPECT_EQ(list<string>({"e", "b", "c", "f"}), sorter.sort()); EXPECT_EQ(5, sorter.count()); sorter.activate("d"); EXPECT_EQ(list<string>({"e", "b", "d", "c", "f"}), sorter.sort()); }