pldmd: move to libpldm instance ID alloc/free

Refactor the dbus_api::Requester class to be implemented in terms of
libpldm's instance ID database. To make that easier to deal with we
introduce a light-weight RAII C++ binding along with a helper class for
unit tests.

Change-Id: Ia03de8245dfb114e6266ba36dcf26ca4398a4ce0
Signed-off-by: Rashmica Gupta <rashmica@linux.ibm.com>
Signed-off-by: Andrew Jeffery <andrew@aj.id.au>
diff --git a/test/test_instance_id.hpp b/test/test_instance_id.hpp
new file mode 100644
index 0000000..6979e56
--- /dev/null
+++ b/test/test_instance_id.hpp
@@ -0,0 +1,38 @@
+#pragma once
+
+#include "instance_id.hpp"
+
+static constexpr uintmax_t pldmMaxInstanceIds = 32;
+
+class TestInstanceIdDb : public pldm::InstanceIdDb
+{
+  public:
+    TestInstanceIdDb() : TestInstanceIdDb(createDb()) {}
+
+    ~TestInstanceIdDb()
+    {
+        std::filesystem::remove(dbPath);
+    };
+
+  private:
+    static std::filesystem::path createDb()
+    {
+        static const char dbTmpl[] = "/tmp/db.XXXXXX";
+        char dbName[sizeof(dbTmpl)] = {};
+
+        ::strncpy(dbName, dbTmpl, sizeof(dbName));
+        ::close(::mkstemp(dbName));
+
+        std::filesystem::path dbPath(dbName);
+        std::filesystem::resize_file(
+            dbPath, static_cast<uintmax_t>(PLDM_MAX_TIDS) * pldmMaxInstanceIds);
+
+        return dbPath;
+    };
+
+    TestInstanceIdDb(std::filesystem::path dbPath) :
+        InstanceIdDb(dbPath), dbPath(dbPath)
+    {}
+
+    std::filesystem::path dbPath;
+};