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;
+};