Add initial unit tests

Signed-off-by: Lei YU <yulei.sh@bytedance.com>
Change-Id: Id4850e52073ea6780a978c6cd5a5c439aa8ed846
diff --git a/src/inspur_oem.cpp b/src/inspur_oem.cpp
index 04df3fb..53eb429 100644
--- a/src/inspur_oem.cpp
+++ b/src/inspur_oem.cpp
@@ -2,12 +2,12 @@
 
 #include "inspur_oem.hpp"
 
+#include "sdbus_wrapper.hpp"
 #include "utils.hpp"
 
 #include <ipmid/api.h>
 
 #include <phosphor-logging/log.hpp>
-#include <sdbusplus/bus.hpp>
 
 #include <optional>
 
@@ -21,6 +21,7 @@
 constexpr auto FIRMWARE_BUILDTIME_OFFSET =
     FIRMWARE_VERSION_OFFSET + FIRMWARE_VERSION_SIZE;
 constexpr auto FIRMWARE_BUILDTIME_SIZE = 20;
+constexpr auto FIRMWARE_MIN_SIZE = FIRMWARE_BUILDTIME_OFFSET;
 
 static_assert(FIRMWARE_VERSION_OFFSET == 1);
 static_assert(FIRMWARE_BUILDTIME_OFFSET == 16);
@@ -35,7 +36,7 @@
 using namespace inspur;
 
 static void registerOEMFunctions() __attribute__((constructor));
-sdbusplus::bus::bus bus(ipmid_get_sd_bus_connection());
+static auto& bus = getBus();
 
 struct ParsedAssetInfo
 {
@@ -120,6 +121,10 @@
 
 void parseBIOSInfo(const std::vector<uint8_t>& data)
 {
+    if (data.size() < FIRMWARE_MIN_SIZE)
+    {
+        return;
+    }
     bios_version_devname dev = static_cast<bios_version_devname>(data[0]);
     std::string version{data.data() + FIRMWARE_VERSION_OFFSET,
                         data.data() + FIRMWARE_VERSION_SIZE};
diff --git a/src/inspur_oem.hpp b/src/inspur_oem.hpp
index 8c47e8d..fc5fc85 100644
--- a/src/inspur_oem.hpp
+++ b/src/inspur_oem.hpp
@@ -1,4 +1,5 @@
 #pragma once
+
 #include <array>
 #include <cstdint>
 #include <string_view>
diff --git a/src/meson.build b/src/meson.build
index b6828c7..620197a 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -10,6 +10,7 @@
   'inspur-ipmi-oem',
   'inspur_oem.cpp',
   'utils.cpp',
+  'sdbus_wrapper.cpp',
   dependencies: [
     phosphor_dbus_interfaces,
     phosphor_logging,
diff --git a/src/sdbus_wrapper.cpp b/src/sdbus_wrapper.cpp
new file mode 100644
index 0000000..a781036
--- /dev/null
+++ b/src/sdbus_wrapper.cpp
@@ -0,0 +1,9 @@
+#include "sdbus_wrapper.hpp"
+
+#include <ipmid/api.h>
+
+sdbusplus::bus::bus& getBus()
+{
+    static sdbusplus::bus::bus bus(ipmid_get_sd_bus_connection());
+    return bus;
+}
diff --git a/src/sdbus_wrapper.hpp b/src/sdbus_wrapper.hpp
new file mode 100644
index 0000000..d6273d1
--- /dev/null
+++ b/src/sdbus_wrapper.hpp
@@ -0,0 +1,5 @@
+#pragma once
+
+#include <sdbusplus/bus.hpp>
+
+sdbusplus::bus::bus& getBus();