1*8ec69e4bSAlexander Hansen #include "../exampledevice/example_device.hpp"
2*8ec69e4bSAlexander Hansen
3*8ec69e4bSAlexander Hansen #include <phosphor-logging/lg2.hpp>
4*8ec69e4bSAlexander Hansen #include <sdbusplus/asio/connection.hpp>
5*8ec69e4bSAlexander Hansen #include <sdbusplus/asio/object_server.hpp>
6*8ec69e4bSAlexander Hansen #include <sdbusplus/async.hpp>
7*8ec69e4bSAlexander Hansen #include <sdbusplus/server.hpp>
8*8ec69e4bSAlexander Hansen
9*8ec69e4bSAlexander Hansen #include <memory>
10*8ec69e4bSAlexander Hansen #include <regex>
11*8ec69e4bSAlexander Hansen
12*8ec69e4bSAlexander Hansen #include <gtest/gtest.h>
13*8ec69e4bSAlexander Hansen
14*8ec69e4bSAlexander Hansen PHOSPHOR_LOG2_USING;
15*8ec69e4bSAlexander Hansen
16*8ec69e4bSAlexander Hansen using namespace phosphor::software;
17*8ec69e4bSAlexander Hansen using namespace phosphor::software::example_device;
18*8ec69e4bSAlexander Hansen
19*8ec69e4bSAlexander Hansen class TestSoftware : public Software
20*8ec69e4bSAlexander Hansen {
21*8ec69e4bSAlexander Hansen public:
wrapGetRandomSoftwareId(Device & parent)22*8ec69e4bSAlexander Hansen static std::string wrapGetRandomSoftwareId(Device& parent)
23*8ec69e4bSAlexander Hansen {
24*8ec69e4bSAlexander Hansen return Software::getRandomSoftwareId(parent);
25*8ec69e4bSAlexander Hansen };
26*8ec69e4bSAlexander Hansen };
27*8ec69e4bSAlexander Hansen
28*8ec69e4bSAlexander Hansen constexpr const char* mb1ExampleComponent = "MB1ExampleComponent";
29*8ec69e4bSAlexander Hansen
TEST(SoftwareTest,testGetRandomSoftwareId)30*8ec69e4bSAlexander Hansen TEST(SoftwareTest, testGetRandomSoftwareId)
31*8ec69e4bSAlexander Hansen {
32*8ec69e4bSAlexander Hansen sdbusplus::async::context ctx;
33*8ec69e4bSAlexander Hansen ExampleCodeUpdater exampleUpdater(ctx);
34*8ec69e4bSAlexander Hansen
35*8ec69e4bSAlexander Hansen std::string objPath =
36*8ec69e4bSAlexander Hansen "/xyz/openbmc_project/inventory/system/board/ExampleBoard/ExampleDevice";
37*8ec69e4bSAlexander Hansen
38*8ec69e4bSAlexander Hansen SoftwareConfig config(objPath, 0x1234, "my.example.compatible", "Example",
39*8ec69e4bSAlexander Hansen mb1ExampleComponent);
40*8ec69e4bSAlexander Hansen
41*8ec69e4bSAlexander Hansen auto device = std::make_unique<ExampleDevice>(ctx, &exampleUpdater, config);
42*8ec69e4bSAlexander Hansen
43*8ec69e4bSAlexander Hansen std::string swid = TestSoftware::wrapGetRandomSoftwareId(*device);
44*8ec69e4bSAlexander Hansen debug("{SWID}", "SWID", swid);
45*8ec69e4bSAlexander Hansen
46*8ec69e4bSAlexander Hansen std::regex re("[a-zA-Z0-9]+_[0-9]+");
47*8ec69e4bSAlexander Hansen std::cmatch m;
48*8ec69e4bSAlexander Hansen
49*8ec69e4bSAlexander Hansen EXPECT_TRUE(std::regex_match(swid.c_str(), m, re));
50*8ec69e4bSAlexander Hansen
51*8ec69e4bSAlexander Hansen EXPECT_TRUE(swid.starts_with(std::string(mb1ExampleComponent) + "_"));
52*8ec69e4bSAlexander Hansen }
53