sensormanager: use bus reference_wrapper over pointer

Switch the SensorManager class to use a `reference_wrapper` to the
sdbusplus connection rather than a raw pointer for code safety.
This has a side-effect of disabling the default constructor for the
class, which implicates using wrappers like `std::optional`.

Signed-off-by: Patrick Williams <patrick@stwcx.xyz>
Change-Id: I799d4564f0dbd9698951f0ec8e86a7272299ebf6
diff --git a/test/pid_zone_unittest.cpp b/test/pid_zone_unittest.cpp
index ea8ac91..e4e7a26 100644
--- a/test/pid_zone_unittest.cpp
+++ b/test/pid_zone_unittest.cpp
@@ -13,6 +13,7 @@
 
 #include <chrono>
 #include <cstring>
+#include <optional>
 #include <unordered_map>
 #include <vector>
 
@@ -104,9 +105,7 @@
         auto bus_mock_mode = sdbusplus::get_mocked_new(&sdbus_mock_mode);
         auto bus_mock_enable = sdbusplus::get_mocked_new(&sdbus_mock_enable);
 
-        // Compiler weirdly not happy about just instantiating mgr(...);
-        SensorManager m(bus_mock_passive, bus_mock_host);
-        mgr = std::move(m);
+        mgr = SensorManager(bus_mock_passive, bus_mock_host);
 
         SetupDbusObject(&sdbus_mock_mode, defer, objPath, modeInterface,
                         properties, &property_index);
@@ -118,7 +117,7 @@
                         &propertyenable_index);
 
         zone = std::make_unique<DbusPidZone>(
-            zoneId, minThermalOutput, failSafePercent, cycleTime, mgr,
+            zoneId, minThermalOutput, failSafePercent, cycleTime, *mgr,
             bus_mock_mode, objPath, defer, accSetPoint);
     }
 
@@ -139,7 +138,7 @@
     bool defer = true;
     bool accSetPoint = false;
     const char* objPath = "/path/";
-    SensorManager mgr;
+    std::optional<SensorManager> mgr;
     conf::CycleTime cycleTime;
 
     std::string sensorname = "temp1";
@@ -381,10 +380,10 @@
     SensorMock* sensor_ptr2 = reinterpret_cast<SensorMock*>(sensor2.get());
 
     std::string type = "unchecked";
-    mgr.addSensor(type, name1, std::move(sensor1));
-    EXPECT_EQ(mgr.getSensor(name1), sensor_ptr1);
-    mgr.addSensor(type, name2, std::move(sensor2));
-    EXPECT_EQ(mgr.getSensor(name2), sensor_ptr2);
+    mgr->addSensor(type, name1, std::move(sensor1));
+    EXPECT_EQ(mgr->getSensor(name1), sensor_ptr1);
+    mgr->addSensor(type, name2, std::move(sensor2));
+    EXPECT_EQ(mgr->getSensor(name2), sensor_ptr2);
 
     // Now that the sensors exist, add them to the zone.
     zone->addThermalInput(name1, false);
@@ -437,10 +436,10 @@
     SensorMock* sensor_ptr2 = reinterpret_cast<SensorMock*>(sensor2.get());
 
     std::string type = "unchecked";
-    mgr.addSensor(type, name1, std::move(sensor1));
-    EXPECT_EQ(mgr.getSensor(name1), sensor_ptr1);
-    mgr.addSensor(type, name2, std::move(sensor2));
-    EXPECT_EQ(mgr.getSensor(name2), sensor_ptr2);
+    mgr->addSensor(type, name1, std::move(sensor1));
+    EXPECT_EQ(mgr->getSensor(name1), sensor_ptr1);
+    mgr->addSensor(type, name2, std::move(sensor2));
+    EXPECT_EQ(mgr->getSensor(name2), sensor_ptr2);
 
     // Now that the sensors exist, add them to the zone.
     zone->addFanInput(name1, false);
@@ -489,10 +488,10 @@
     SensorMock* sensor_ptr2 = reinterpret_cast<SensorMock*>(sensor2.get());
 
     std::string type = "unchecked";
-    mgr.addSensor(type, name1, std::move(sensor1));
-    EXPECT_EQ(mgr.getSensor(name1), sensor_ptr1);
-    mgr.addSensor(type, name2, std::move(sensor2));
-    EXPECT_EQ(mgr.getSensor(name2), sensor_ptr2);
+    mgr->addSensor(type, name1, std::move(sensor1));
+    EXPECT_EQ(mgr->getSensor(name1), sensor_ptr1);
+    mgr->addSensor(type, name2, std::move(sensor2));
+    EXPECT_EQ(mgr->getSensor(name2), sensor_ptr2);
 
     zone->addThermalInput(name1, false);
     zone->addThermalInput(name2, false);
@@ -555,10 +554,10 @@
     SensorMock* sensor_ptr2 = reinterpret_cast<SensorMock*>(sensor2.get());
 
     std::string type = "unchecked";
-    mgr.addSensor(type, name1, std::move(sensor1));
-    EXPECT_EQ(mgr.getSensor(name1), sensor_ptr1);
-    mgr.addSensor(type, name2, std::move(sensor2));
-    EXPECT_EQ(mgr.getSensor(name2), sensor_ptr2);
+    mgr->addSensor(type, name1, std::move(sensor1));
+    EXPECT_EQ(mgr->getSensor(name1), sensor_ptr1);
+    mgr->addSensor(type, name2, std::move(sensor2));
+    EXPECT_EQ(mgr->getSensor(name2), sensor_ptr2);
 
     // Only sensor1 has MissingIsAcceptable enabled for it
     zone->addThermalInput(name1, true);
@@ -655,10 +654,10 @@
     SensorMock* sensor_ptr2 = reinterpret_cast<SensorMock*>(sensor2.get());
 
     std::string type = "unchecked";
-    mgr.addSensor(type, name1, std::move(sensor1));
-    EXPECT_EQ(mgr.getSensor(name1), sensor_ptr1);
-    mgr.addSensor(type, name2, std::move(sensor2));
-    EXPECT_EQ(mgr.getSensor(name2), sensor_ptr2);
+    mgr->addSensor(type, name1, std::move(sensor1));
+    EXPECT_EQ(mgr->getSensor(name1), sensor_ptr1);
+    mgr->addSensor(type, name2, std::move(sensor2));
+    EXPECT_EQ(mgr->getSensor(name2), sensor_ptr2);
 
     // Now that the sensors exist, add them to the zone.
     zone->addFanInput(name1, false);
@@ -712,10 +711,10 @@
     SensorMock* sensor_ptr2 = reinterpret_cast<SensorMock*>(sensor2.get());
 
     std::string type = "unchecked";
-    mgr.addSensor(type, name1, std::move(sensor1));
-    EXPECT_EQ(mgr.getSensor(name1), sensor_ptr1);
-    mgr.addSensor(type, name2, std::move(sensor2));
-    EXPECT_EQ(mgr.getSensor(name2), sensor_ptr2);
+    mgr->addSensor(type, name1, std::move(sensor1));
+    EXPECT_EQ(mgr->getSensor(name1), sensor_ptr1);
+    mgr->addSensor(type, name2, std::move(sensor2));
+    EXPECT_EQ(mgr->getSensor(name2), sensor_ptr2);
 
     // Now that the sensors exist, add them to the zone.
     zone->addFanInput(name1, false);
@@ -770,13 +769,13 @@
     SensorMock* sensor_ptr1 = reinterpret_cast<SensorMock*>(sensor1.get());
 
     std::string type = "unchecked";
-    mgr.addSensor(type, name1, std::move(sensor1));
-    EXPECT_EQ(mgr.getSensor(name1), sensor_ptr1);
+    mgr->addSensor(type, name1, std::move(sensor1));
+    EXPECT_EQ(mgr->getSensor(name1), sensor_ptr1);
 
     zone->addThermalInput(name1, false);
 
     // Verify method under test returns the pointer we expect.
-    EXPECT_EQ(mgr.getSensor(name1), zone->getSensor(name1));
+    EXPECT_EQ(mgr->getSensor(name1), zone->getSensor(name1));
 }
 
 TEST_F(PidZoneTest, AddThermalPIDTest_VerifiesThermalPIDsProcessed)