PEL: Let Callout object ctor take a MRU list

A list of MRUs (Manufacturing Replaceable Units) can now be passed into
the Callout object constructor.  There is also a new MRU object
constructor that will build that object with a MRU list as well.

This will be used in the future when someone wants to add MRUs to a
callout.

Signed-off-by: Matt Spinler <spinler@us.ibm.com>
Change-Id: Ic0e93e081a91ffc47dfd6642a34f02fd9a6edb8e
diff --git a/test/openpower-pels/src_callout_test.cpp b/test/openpower-pels/src_callout_test.cpp
index fa93111..12f8c2b 100644
--- a/test/openpower-pels/src_callout_test.cpp
+++ b/test/openpower-pels/src_callout_test.cpp
@@ -276,6 +276,34 @@
             EXPECT_EQ(fru->getSN().value(), "123456789ABC");
         }
     }
+
+    {
+        // With MRUs
+        std::vector<MRU::MRUCallout> mruList{{'H', 1}, {'H', 2}};
+
+        Callout callout{CalloutPriority::high, "U99-P5", "1234567", "ABCD",
+                        "123456789ABC",        mruList};
+
+        EXPECT_EQ(callout.flags(), Callout::calloutType |
+                                       Callout::fruIdentIncluded |
+                                       Callout::mruIncluded);
+
+        EXPECT_EQ(callout.priority(), 'H');
+        EXPECT_EQ(callout.locationCode(), "U99-P5");
+        EXPECT_EQ(callout.locationCodeSize(), 8);
+
+        auto& fru = callout.fruIdentity();
+        EXPECT_EQ(fru->getPN().value(), "1234567");
+        EXPECT_EQ(fru->getCCIN().value(), "ABCD");
+        EXPECT_EQ(fru->getSN().value(), "123456789ABC");
+
+        auto& mruSection = callout.mru();
+        EXPECT_EQ(mruSection->mrus().size(), 2);
+        EXPECT_EQ(mruSection->mrus().at(0).priority, 'H');
+        EXPECT_EQ(mruSection->mrus().at(0).id, 1);
+        EXPECT_EQ(mruSection->mrus().at(1).priority, 'H');
+        EXPECT_EQ(mruSection->mrus().at(1).id, 2);
+    }
 }
 
 // Create a callout object by passing in the maintenance procedure to add.