regulators: Add Services& services to classes

Modify the configure() method in the System, Chassis, Device, and Rail
classes to have a new first parameter: Services& services.

Fix mock_services.hpp bug.

Signed-off-by: Bob King <Bob_King@wistron.com>
Change-Id: I6ef41de65d2c5b68c55edb42189ba9c0f2e436ed
diff --git a/phosphor-regulators/test/chassis_tests.cpp b/phosphor-regulators/test/chassis_tests.cpp
index eca6d97..481d71d 100644
--- a/phosphor-regulators/test/chassis_tests.cpp
+++ b/phosphor-regulators/test/chassis_tests.cpp
@@ -21,6 +21,7 @@
 #include "id_map.hpp"
 #include "journal.hpp"
 #include "mock_journal.hpp"
+#include "mock_services.hpp"
 #include "mocked_i2c_interface.hpp"
 #include "pmbus_read_sensor_action.hpp"
 #include "presence_detection.hpp"
@@ -180,6 +181,9 @@
 {
     // Test where no devices were specified in constructor
     {
+        // Create mock services.
+        MockServices services{};
+
         // Create Chassis
         std::unique_ptr<Chassis> chassis = std::make_unique<Chassis>(1);
         Chassis* chassisPtr = chassis.get();
@@ -192,7 +196,7 @@
 
         // Call configure()
         journal::clear();
-        chassisPtr->configure(system);
+        chassisPtr->configure(services, system);
         EXPECT_EQ(journal::getDebugMessages().size(), 0);
         EXPECT_EQ(journal::getErrMessages().size(), 0);
         std::vector<std::string> expectedInfoMessages{"Configuring chassis 1"};
@@ -201,6 +205,9 @@
 
     // Test where devices were specified in constructor
     {
+        // Create mock services.
+        MockServices services{};
+
         std::vector<std::unique_ptr<Device>> devices{};
 
         // Create Device vdd0_reg
@@ -252,7 +259,7 @@
 
         // Call configure()
         journal::clear();
-        chassisPtr->configure(system);
+        chassisPtr->configure(services, system);
         std::vector<std::string> expectedDebugMessages{
             "Configuring vdd0_reg: volts=1.300000",
             "Configuring vdd1_reg: volts=1.200000"};
diff --git a/phosphor-regulators/test/configuration_tests.cpp b/phosphor-regulators/test/configuration_tests.cpp
index a7ba37f..93f1be8 100644
--- a/phosphor-regulators/test/configuration_tests.cpp
+++ b/phosphor-regulators/test/configuration_tests.cpp
@@ -22,6 +22,7 @@
 #include "journal.hpp"
 #include "mock_action.hpp"
 #include "mock_journal.hpp"
+#include "mock_services.hpp"
 #include "mocked_i2c_interface.hpp"
 #include "pmbus_utils.hpp"
 #include "pmbus_write_vout_command_action.hpp"
@@ -80,6 +81,9 @@
 {
     // Test where works: Volts value not specified
     {
+        // Create mock services.
+        MockServices services{};
+
         // Create I2CWriteByteAction with register 0x7C and value 0x0A
         std::unique_ptr<I2CWriteByteAction> action =
             std::make_unique<I2CWriteByteAction>(0x7C, 0x0A);
@@ -123,7 +127,7 @@
 
         // Execute Configuration
         journal::clear();
-        configurationPtr->execute(system, *chassisPtr, *devicePtr);
+        configurationPtr->execute(services, system, *chassisPtr, *devicePtr);
         std::vector<std::string> expectedDebugMessages{"Configuring vdd_reg"};
         EXPECT_EQ(journal::getDebugMessages(), expectedDebugMessages);
         EXPECT_EQ(journal::getErrMessages().size(), 0);
@@ -131,6 +135,9 @@
 
     // Test where works: Volts value specified
     {
+        // Create mock services.
+        MockServices services{};
+
         // Create PMBusWriteVoutCommandAction.  Do not specify a volts value
         // because it will get a value of 1.3V from the
         // ActionEnvironment/Configuration.  Specify a -8 exponent.
@@ -179,7 +186,7 @@
 
         // Execute Configuration
         journal::clear();
-        configurationPtr->execute(system, *chassisPtr, *devicePtr);
+        configurationPtr->execute(services, system, *chassisPtr, *devicePtr);
         std::vector<std::string> expectedDebugMessages{
             "Configuring vdd_reg: volts=1.300000"};
         EXPECT_EQ(journal::getDebugMessages(), expectedDebugMessages);
@@ -188,6 +195,9 @@
 
     // Test where fails
     {
+        // Create mock services.
+        MockServices services{};
+
         // Create I2CWriteByteAction with register 0x7C and value 0x0A
         std::unique_ptr<I2CWriteByteAction> action =
             std::make_unique<I2CWriteByteAction>(0x7C, 0x0A);
@@ -233,7 +243,7 @@
 
         // Execute Configuration
         journal::clear();
-        configurationPtr->execute(system, *chassisPtr, *devicePtr);
+        configurationPtr->execute(services, system, *chassisPtr, *devicePtr);
         std::vector<std::string> expectedDebugMessages{"Configuring vdd_reg"};
         EXPECT_EQ(journal::getDebugMessages(), expectedDebugMessages);
         std::vector<std::string> expectedErrMessages{
@@ -250,6 +260,9 @@
 {
     // Test where works: Volts value not specified
     {
+        // Create mock services.
+        MockServices services{};
+
         // Create I2CWriteByteAction with register 0x7C and value 0x0A
         std::unique_ptr<I2CWriteByteAction> action =
             std::make_unique<I2CWriteByteAction>(0x7C, 0x0A);
@@ -301,7 +314,8 @@
 
         // Execute Configuration
         journal::clear();
-        configurationPtr->execute(system, *chassisPtr, *devicePtr, *railPtr);
+        configurationPtr->execute(services, system, *chassisPtr, *devicePtr,
+                                  *railPtr);
         std::vector<std::string> expectedDebugMessages{"Configuring vio2"};
         EXPECT_EQ(journal::getDebugMessages(), expectedDebugMessages);
         EXPECT_EQ(journal::getErrMessages().size(), 0);
@@ -309,6 +323,9 @@
 
     // Test where works: Volts value specified
     {
+        // Create mock services.
+        MockServices services{};
+
         // Create PMBusWriteVoutCommandAction.  Do not specify a volts value
         // because it will get a value of 1.3V from the
         // ActionEnvironment/Configuration.  Specify a -8 exponent.
@@ -365,7 +382,8 @@
 
         // Execute Configuration
         journal::clear();
-        configurationPtr->execute(system, *chassisPtr, *devicePtr, *railPtr);
+        configurationPtr->execute(services, system, *chassisPtr, *devicePtr,
+                                  *railPtr);
         std::vector<std::string> expectedDebugMessages{
             "Configuring vio2: volts=1.300000"};
         EXPECT_EQ(journal::getDebugMessages(), expectedDebugMessages);
@@ -374,6 +392,9 @@
 
     // Test where fails
     {
+        // Create mock services.
+        MockServices services{};
+
         // Create I2CWriteByteAction with register 0x7C and value 0x0A
         std::unique_ptr<I2CWriteByteAction> action =
             std::make_unique<I2CWriteByteAction>(0x7C, 0x0A);
@@ -427,7 +448,8 @@
 
         // Execute Configuration
         journal::clear();
-        configurationPtr->execute(system, *chassisPtr, *devicePtr, *railPtr);
+        configurationPtr->execute(services, system, *chassisPtr, *devicePtr,
+                                  *railPtr);
         std::vector<std::string> expectedDebugMessages{"Configuring vio2"};
         EXPECT_EQ(journal::getDebugMessages(), expectedDebugMessages);
         std::vector<std::string> expectedErrMessages{
diff --git a/phosphor-regulators/test/device_tests.cpp b/phosphor-regulators/test/device_tests.cpp
index e0efb35..47768e2 100644
--- a/phosphor-regulators/test/device_tests.cpp
+++ b/phosphor-regulators/test/device_tests.cpp
@@ -22,6 +22,7 @@
 #include "journal.hpp"
 #include "mock_action.hpp"
 #include "mock_journal.hpp"
+#include "mock_services.hpp"
 #include "mocked_i2c_interface.hpp"
 #include "pmbus_read_sensor_action.hpp"
 #include "presence_detection.hpp"
@@ -210,6 +211,9 @@
 {
     // Test where Configuration and Rails were not specified in constructor
     {
+        // Create mock services.
+        MockServices services{};
+
         // Create Device
         std::unique_ptr<i2c::I2CInterface> i2cInterface = createI2CInterface();
         std::unique_ptr<Device> device = std::make_unique<Device>(
@@ -232,13 +236,16 @@
 
         // Call configure().  Should do nothing.
         journal::clear();
-        devicePtr->configure(system, *chassisPtr);
+        devicePtr->configure(services, system, *chassisPtr);
         EXPECT_EQ(journal::getDebugMessages().size(), 0);
         EXPECT_EQ(journal::getErrMessages().size(), 0);
     }
 
     // Test where Configuration and Rails were specified in constructor
     {
+        // Create mock services.
+        MockServices services{};
+
         std::vector<std::unique_ptr<Rail>> rails{};
 
         // Create Rail vdd0
@@ -309,7 +316,7 @@
         // Call configure().  For the Device and both Rails, should execute the
         // Configuration and log a debug message.
         journal::clear();
-        devicePtr->configure(system, *chassisPtr);
+        devicePtr->configure(services, system, *chassisPtr);
         std::vector<std::string> expectedDebugMessages{
             "Configuring reg1", "Configuring vdd0: volts=1.300000",
             "Configuring vio0: volts=3.200000"};
diff --git a/phosphor-regulators/test/mock_services.hpp b/phosphor-regulators/test/mock_services.hpp
index 58c565e..075768c 100644
--- a/phosphor-regulators/test/mock_services.hpp
+++ b/phosphor-regulators/test/mock_services.hpp
@@ -19,6 +19,7 @@
 #include "journal.hpp"
 #include "mock_error_logging.hpp"
 #include "mock_journal.hpp"
+#include "services.hpp"
 
 #include <sdbusplus/bus.hpp>
 
@@ -67,7 +68,7 @@
      *
      * @return mock error logging object
      */
-    virtual MockErrorLogging& getMockErrorLogging() override
+    virtual MockErrorLogging& getMockErrorLogging()
     {
         return errorLogging;
     }
@@ -79,7 +80,7 @@
      *
      * @return mock journal object
      */
-    virtual MockJournal& getMockJournal() override
+    virtual MockJournal& getMockJournal()
     {
         return journal;
     }
diff --git a/phosphor-regulators/test/rail_tests.cpp b/phosphor-regulators/test/rail_tests.cpp
index e3c1c6a..d8524dc 100644
--- a/phosphor-regulators/test/rail_tests.cpp
+++ b/phosphor-regulators/test/rail_tests.cpp
@@ -21,6 +21,7 @@
 #include "journal.hpp"
 #include "mock_action.hpp"
 #include "mock_journal.hpp"
+#include "mock_services.hpp"
 #include "mocked_i2c_interface.hpp"
 #include "pmbus_read_sensor_action.hpp"
 #include "presence_detection.hpp"
@@ -86,6 +87,9 @@
 {
     // Test where Configuration was not specified in constructor
     {
+        // Create mock services.
+        MockServices services{};
+
         // Create Rail
         std::unique_ptr<Rail> rail = std::make_unique<Rail>("vdd0");
         Rail* railPtr = rail.get();
@@ -118,13 +122,16 @@
 
         // Call configure().  Should do nothing.
         journal::clear();
-        railPtr->configure(system, *chassisPtr, *devicePtr);
+        railPtr->configure(services, system, *chassisPtr, *devicePtr);
         EXPECT_EQ(journal::getDebugMessages().size(), 0);
         EXPECT_EQ(journal::getErrMessages().size(), 0);
     }
 
     // Test where Configuration was specified in constructor
     {
+        // Create mock services.
+        MockServices services{};
+
         // Create Configuration
         std::optional<double> volts{1.3};
         std::unique_ptr<MockAction> action = std::make_unique<MockAction>();
@@ -168,7 +175,7 @@
         // Call configure().  Should execute Configuration and log debug message
         // to journal.
         journal::clear();
-        railPtr->configure(system, *chassisPtr, *devicePtr);
+        railPtr->configure(services, system, *chassisPtr, *devicePtr);
         std::vector<std::string> expectedDebugMessages{
             "Configuring vddr1: volts=1.300000"};
         EXPECT_EQ(journal::getDebugMessages(), expectedDebugMessages);
diff --git a/phosphor-regulators/test/system_tests.cpp b/phosphor-regulators/test/system_tests.cpp
index b79e1ba..daa2084 100644
--- a/phosphor-regulators/test/system_tests.cpp
+++ b/phosphor-regulators/test/system_tests.cpp
@@ -18,6 +18,7 @@
 #include "id_map.hpp"
 #include "journal.hpp"
 #include "mock_journal.hpp"
+#include "mock_services.hpp"
 #include "mocked_i2c_interface.hpp"
 #include "pmbus_read_sensor_action.hpp"
 #include "rail.hpp"
@@ -90,6 +91,9 @@
 
 TEST(SystemTests, Configure)
 {
+    // Create mock services.
+    MockServices services{};
+
     // Specify an empty rules vector
     std::vector<std::unique_ptr<Rule>> rules{};
 
@@ -103,7 +107,7 @@
 
     // Call configure()
     journal::clear();
-    system.configure();
+    system.configure(services);
     EXPECT_EQ(journal::getDebugMessages().size(), 0);
     EXPECT_EQ(journal::getErrMessages().size(), 0);
     std::vector<std::string> expectedInfoMessages{"Configuring chassis 1",