pseq: Add presence caching to Services

Add caching of hardware presence data to the Services class in the
phosphor-power-sequencer application.  Obtaining hardware presence from
D-Bus is a slow operation.  During pgood fault isolation, multiple rails
may need the same hardware presence information.  Cache this information
to improve performance.

Provide a method to clear the cached data since it is only valid for a
short period of time.  For example, power supplies are hot-pluggable, so
their presence may change while a system is powered on.

Tested:
* BMCServices
  * createPMBus()
    * Verify correct sysfs path passed to PMBus constructor
  * isPresent()
    * Test where hardware is present
      * Test where value is not cached
        * Verify value is cached after data obtained from D-Bus
      * Test where value is cached
    * Test where hardware is not present
      * Test where value is not cached
        * Verify value is cached after data obtained from D-Bus
      * Test where value is cached
    * Test where D-Bus method call fails with an expected exception
      * Verify false is stored in cache
      * Verify false is returned
    * Test where D-Bus method call fails with an unexpected exception
      * Verify nothing is cached
      * Verify exception is re-thrown
  * clearCache()
    * Verify clears all cached data
* MockServices
  * Verify all methods can be called from an automated test
* Run existing automated tests

Change-Id: I3e92be3ded1ed333acbedc970409176cabe98c09
Signed-off-by: Shawn McCarney <shawnmm@us.ibm.com>
diff --git a/phosphor-power-sequencer/test/mock_services.hpp b/phosphor-power-sequencer/test/mock_services.hpp
index 78ccbc2..c0544f0 100644
--- a/phosphor-power-sequencer/test/mock_services.hpp
+++ b/phosphor-power-sequencer/test/mock_services.hpp
@@ -44,7 +44,7 @@
     MOCK_METHOD(void, logInfoMsg, (const std::string& message), (override));
     MOCK_METHOD(void, logError,
                 (const std::string& message, Entry::Level severity,
-                 std::map<std::string, std::string>& additionalData),
+                 (std::map<std::string, std::string> & additionalData)),
                 (override));
     MOCK_METHOD(bool, isPresent, (const std::string& inventoryPath),
                 (override));
@@ -52,12 +52,12 @@
                 (override));
 
     virtual std::unique_ptr<PMBusBase>
-        createPMBus(uint8_t bus, uint16_t address,
-                    const std::string& driverName = "",
-                    size_t instance = 0) override
+        createPMBus(uint8_t, uint16_t, const std::string&, size_t) override
     {
         return std::make_unique<MockPMBus>();
     }
+
+    MOCK_METHOD(void, clearCache, (), (override));
 };
 
 } // namespace phosphor::power::sequencer