Specify PEL callout priority and sort callouts.
Allow the priority to be passed in at creation time by calling the
CALLOUT_PRIORITY keyword. When creating a PEL, callouts will always
be sorted by priority instead of creation time, the order is as follows:
H,M,A,B,C,L.
Signed-off-by: Miguel Gomez <mgomez@mx1.ibm.com>
Change-Id: I84345aaf3fad7b2e4958b698ab761966f499986b
diff --git a/test/openpower-pels/src_callouts_test.cpp b/test/openpower-pels/src_callouts_test.cpp
index b1fe9c4..69c26b8 100644
--- a/test/openpower-pels/src_callouts_test.cpp
+++ b/test/openpower-pels/src_callouts_test.cpp
@@ -120,3 +120,83 @@
EXPECT_EQ(callouts.callouts().size(), maxNumberOfCallouts);
}
+
+TEST(CalloutsTest, TestSortCallouts)
+{
+ Callouts callouts;
+
+ // Add callouts with different priorities to test sorting in descending
+ // order
+
+ auto c0 = std::make_unique<Callout>(CalloutPriority::high, "U1-P1",
+ "1234567", "ABC", "123456789ABC");
+
+ callouts.addCallout(std::move(c0));
+
+ auto c1 = std::make_unique<Callout>(CalloutPriority::medium, "U1-P2",
+ "1234567", "ABCD", "123456789ABC");
+
+ callouts.addCallout(std::move(c1));
+
+ auto c2 = std::make_unique<Callout>(CalloutPriority::low, "U1-P3",
+ "1234567", "ABCDE", "123456789ABC");
+
+ callouts.addCallout(std::move(c2));
+
+ auto c3 = std::make_unique<Callout>(CalloutPriority::high, "U1-P4",
+ "1234567", "ABCDE1", "123456789ABC");
+
+ callouts.addCallout(std::move(c3));
+
+ auto c4 = std::make_unique<Callout>(CalloutPriority::high, "U1-P5",
+ "1234567", "ABCDE2", "123456789ABC");
+
+ callouts.addCallout(std::move(c4));
+
+ auto c5 = std::make_unique<Callout>(CalloutPriority::low, "U1-P6",
+ "1234567", "ABCDE2", "123456789ABC");
+
+ callouts.addCallout(std::move(c5));
+
+ auto c6 = std::make_unique<Callout>(CalloutPriority::medium, "U1-P7",
+ "1234567", "ABCD2", "123456789ABC");
+
+ callouts.addCallout(std::move(c6));
+
+ auto c7 = std::make_unique<Callout>(CalloutPriority::mediumGroupA, "U1-P8",
+ "1234567", "ABCDE3", "123456789ABC");
+
+ callouts.addCallout(std::move(c7));
+
+ auto c8 = std::make_unique<Callout>(CalloutPriority::mediumGroupC, "U1-P9",
+ "1234567", "ABCDE4", "123456789ABC");
+
+ callouts.addCallout(std::move(c8));
+
+ auto c9 = std::make_unique<Callout>(CalloutPriority::low, "U1-P10",
+ "1234567", "ABCDE3", "123456789ABC");
+
+ callouts.addCallout(std::move(c9));
+
+ const auto& calloutObjects = callouts.callouts();
+ EXPECT_EQ(calloutObjects[0]->locationCode(), "U1-P1");
+ EXPECT_EQ(calloutObjects[0]->priority(), 'H');
+ EXPECT_EQ(calloutObjects[1]->locationCode(), "U1-P4");
+ EXPECT_EQ(calloutObjects[1]->priority(), 'H');
+ EXPECT_EQ(calloutObjects[2]->locationCode(), "U1-P5");
+ EXPECT_EQ(calloutObjects[2]->priority(), 'H');
+ EXPECT_EQ(calloutObjects[3]->locationCode(), "U1-P2");
+ EXPECT_EQ(calloutObjects[3]->priority(), 'M');
+ EXPECT_EQ(calloutObjects[4]->locationCode(), "U1-P7");
+ EXPECT_EQ(calloutObjects[4]->priority(), 'M');
+ EXPECT_EQ(calloutObjects[5]->locationCode(), "U1-P8");
+ EXPECT_EQ(calloutObjects[5]->priority(), 'A');
+ EXPECT_EQ(calloutObjects[6]->locationCode(), "U1-P9");
+ EXPECT_EQ(calloutObjects[6]->priority(), 'C');
+ EXPECT_EQ(calloutObjects[7]->locationCode(), "U1-P3");
+ EXPECT_EQ(calloutObjects[7]->priority(), 'L');
+ EXPECT_EQ(calloutObjects[8]->locationCode(), "U1-P6");
+ EXPECT_EQ(calloutObjects[8]->priority(), 'L');
+ EXPECT_EQ(calloutObjects[9]->locationCode(), "U1-P10");
+ EXPECT_EQ(calloutObjects[9]->priority(), 'L');
+}