Add occ-dbus object

- The intent behind this commit is to add APIs for dynamically
  createing D-Bus objects.

- When temperature values such as DIMM or Core are monitored, D-Bus
  objects need to be dynamically created and the corresponding
  attribute values updated. If the object path exists, only the
  attribute value needs to be updated.

- Currently supports Sensor and OperationalStatus interfaces.

- Also, added Unit Test to occ_dbus file.

Tested: built openpower-occ-control successfully and UTest pass.

Signed-off-by: George Liu <liuxiwei@inspur.com>
Change-Id: I1eac918d6a7a04d6b72b4e68fff868b04dde9c28
diff --git a/test/occ_dbus_test.cpp b/test/occ_dbus_test.cpp
new file mode 100644
index 0000000..d11a373
--- /dev/null
+++ b/test/occ_dbus_test.cpp
@@ -0,0 +1,74 @@
+#include <occ_dbus.hpp>
+
+#include <gtest/gtest.h>
+
+using namespace open_power::occ::dbus;
+
+TEST(OccDBusSensors, MaxValue)
+{
+    std::string tmpPath = "/abc/def";
+    double maxValue = 100.00;
+    double retMaxValue = 0;
+
+    OccDBusSensors::getOccDBus().setMaxValue(tmpPath, maxValue);
+    retMaxValue = OccDBusSensors::getOccDBus().getMaxValue(tmpPath);
+
+    EXPECT_EQ(maxValue, retMaxValue);
+    ASSERT_THROW(OccDBusSensors::getOccDBus().getMaxValue("/abcd/"),
+                 std::invalid_argument);
+}
+
+TEST(OccDBusSensors, MinValue)
+{
+    std::string tmpPath = "/abc/def";
+    double minValue = 10.00;
+    double retMinValue = 0;
+
+    OccDBusSensors::getOccDBus().setMinValue(tmpPath, minValue);
+    retMinValue = OccDBusSensors::getOccDBus().getMinValue(tmpPath);
+
+    EXPECT_EQ(minValue, retMinValue);
+    ASSERT_THROW(OccDBusSensors::getOccDBus().getMinValue("/abcd/"),
+                 std::invalid_argument);
+}
+
+TEST(OccDBusSensors, Value)
+{
+    std::string tmpPath = "/abc/def";
+    double value = 30.00;
+    double retValue = 0;
+
+    OccDBusSensors::getOccDBus().setValue(tmpPath, value);
+    retValue = OccDBusSensors::getOccDBus().getValue(tmpPath);
+
+    EXPECT_EQ(value, retValue);
+    ASSERT_THROW(OccDBusSensors::getOccDBus().getValue("/abcd/"),
+                 std::invalid_argument);
+}
+
+TEST(OccDBusSensors, Unit)
+{
+    std::string tmpPath = "/abc/def";
+    const std::string unit = "xyz.openbmc_project.Sensor.Value.Unit.DegreesC";
+    std::string retUnit = "";
+
+    OccDBusSensors::getOccDBus().setUnit(tmpPath, unit);
+    retUnit = OccDBusSensors::getOccDBus().getUnit(tmpPath);
+
+    EXPECT_EQ(unit, retUnit);
+    ASSERT_THROW(OccDBusSensors::getOccDBus().getUnit("/abcd/"),
+                 std::invalid_argument);
+}
+
+TEST(OccDBusSensors, OperationalStatus)
+{
+    std::string tmpPath = "/abc/def";
+    bool retStatus = false;
+
+    OccDBusSensors::getOccDBus().setOperationalStatus(tmpPath, true);
+    retStatus = OccDBusSensors::getOccDBus().getOperationalStatus(tmpPath);
+
+    EXPECT_EQ(true, retStatus);
+    ASSERT_THROW(OccDBusSensors::getOccDBus().getOperationalStatus("/abcd/"),
+                 std::invalid_argument);
+}
\ No newline at end of file