Activation: initially support psu update
Initial support for PSU update by starting a systemd unit with PSU
inventory path and image dir as arguments.
Add an example psu-update@.service that shows how the arguments are
passed to systemd unit and expanded to command line arguments.
Tested: Upload a dummy tarball, create a dummy service that only prints
the arguments, and verify the service is invoked correctly when
the RequestedActivation is set to Active.
Signed-off-by: Lei YU <mine260309@gmail.com>
Change-Id: I7e122f1cce234caf4951d3e3daad5bee406b507b
diff --git a/test/meson.build b/test/meson.build
index 4ec6c0e..0b7b217 100644
--- a/test/meson.build
+++ b/test/meson.build
@@ -37,12 +37,13 @@
ssl,
])
-test_item_updater = executable(
- 'test_item_updater',
+test_phosphor_psu_manager = executable(
+ 'test_phosphor_psu_manager',
'../src/activation.cpp',
'../src/item_updater.cpp',
'../src/version.cpp',
'test_item_updater.cpp',
+ 'test_activation.cpp',
include_directories: [psu_inc, test_inc],
link_args: dynamic_linker,
build_rpath: oe_sdk.enabled() ? rpath : '',
@@ -56,4 +57,4 @@
])
test('util', test_util)
-test('item_updater', test_item_updater)
+test('phosphor_psu_manager', test_phosphor_psu_manager)
diff --git a/test/test_activation.cpp b/test/test_activation.cpp
new file mode 100644
index 0000000..0ea3640
--- /dev/null
+++ b/test/test_activation.cpp
@@ -0,0 +1,53 @@
+#include "activation.hpp"
+
+#include <sdbusplus/test/sdbus_mock.hpp>
+
+#include <gmock/gmock.h>
+#include <gtest/gtest.h>
+
+using namespace phosphor::software::updater;
+
+class TestActivation : public ::testing::Test
+{
+ public:
+ using ActivationStatus = sdbusplus::xyz::openbmc_project::Software::server::
+ Activation::Activations;
+ TestActivation()
+ {
+ }
+ ~TestActivation()
+ {
+ }
+ static constexpr auto dBusPath = SOFTWARE_OBJPATH;
+ sdbusplus::SdBusMock sdbusMock;
+ sdbusplus::bus::bus mockedBus = sdbusplus::get_mocked_new(&sdbusMock);
+ std::unique_ptr<Activation> activation;
+ std::string versionId = "abcdefgh";
+ std::string extVersion = "Some Ext Version";
+ ActivationStatus status = ActivationStatus::Active;
+ AssociationList associations;
+};
+
+TEST_F(TestActivation, ctordtor)
+{
+ activation = std::make_unique<Activation>(mockedBus, dBusPath, versionId,
+ extVersion, status, associations);
+}
+
+namespace phosphor::software::updater::internal
+{
+extern std::string getUpdateService(const std::string& psuInventoryPath,
+ const std::string& versionId);
+}
+
+TEST_F(TestActivation, getUpdateService)
+{
+ std::string psuInventoryPath = "/com/example/inventory/powersupply1";
+ std::string versionId = "12345678";
+ std::string toCompare = "psu-update@-com-example-inventory-"
+ "powersupply1\\x20-tmp-images-12345678.service";
+
+ auto service = phosphor::software::updater::internal::getUpdateService(
+ psuInventoryPath, versionId);
+ EXPECT_EQ(toCompare, service);
+}