xref: /openbmc/phosphor-psu-code-mgmt/test/test_utils.cpp (revision b8590f56389a9dfd1af6ae4f722cc2fed46de918)
1 #include "config.h"
2 
3 #include "utils.hpp"
4 
5 #include <sdbusplus/test/sdbus_mock.hpp>
6 
7 #include <gmock/gmock.h>
8 #include <gtest/gtest.h>
9 
10 using ::testing::_;
11 using ::testing::Invoke;
12 using ::testing::IsNull;
13 using ::testing::NiceMock;
14 using ::testing::Return;
15 using ::testing::StrEq;
16 
TEST(Utils,GetPSUInventoryPath)17 TEST(Utils, GetPSUInventoryPath)
18 {
19     NiceMock<sdbusplus::SdBusMock> sdbusMock;
20     auto bus = sdbusplus::get_mocked_new(&sdbusMock);
21 
22     EXPECT_CALL(sdbusMock, sd_bus_message_new_method_call(
23                                _, _, _, _, _, StrEq("GetSubTreePaths")));
24 
25     EXPECT_CALL(sdbusMock, sd_bus_message_ref(IsNull()))
26         .WillOnce(Return(nullptr));
27     sdbusplus::message_t msg(nullptr, &sdbusMock);
28 
29     const char* path0 = "/com/example/chassis/powersupply0";
30     const char* path1 = "/com/example/chassis/powersupply1";
31 
32     // std::vector
33     EXPECT_CALL(sdbusMock,
34                 sd_bus_message_enter_container(IsNull(), 'a', StrEq("s")))
35         .WillOnce(Return(1));
36 
37     // while !at_end()
38     EXPECT_CALL(sdbusMock, sd_bus_message_at_end(IsNull(), 0))
39         .WillOnce(Return(0))
40         .WillOnce(Return(0))
41         .WillOnce(Return(1)); // So it exits the loop after reading two strings.
42 
43     // std::string
44     EXPECT_CALL(sdbusMock, sd_bus_message_read_basic(IsNull(), 's', _))
45         .WillOnce(Invoke([&](sd_bus_message*, char, void* p) {
46             const char** s = static_cast<const char**>(p);
47             // Read the first parameter, the string.
48             *s = path0;
49             return 0;
50         }))
51         .WillOnce(Invoke([&](sd_bus_message*, char, void* p) {
52             const char** s = static_cast<const char**>(p);
53             // Read the first parameter, the string.
54             *s = path1;
55             return 0;
56         }));
57 
58     EXPECT_CALL(sdbusMock, sd_bus_message_exit_container(IsNull()))
59         .WillOnce(Return(0)); /* end of std::vector */
60 
61     auto ret = utils::getPSUInventoryPaths(bus);
62     EXPECT_EQ(2U, ret.size());
63     EXPECT_EQ(path0, ret[0]);
64     EXPECT_EQ(path1, ret[1]);
65 }
66 
TEST(Utils,GetVersionID)67 TEST(Utils, GetVersionID)
68 {
69     auto ret = utils::getVersionId("");
70     EXPECT_EQ("", ret);
71 
72     ret = utils::getVersionId("some version");
73     EXPECT_EQ(8U, ret.size());
74 }
75 
TEST(Utils,IsAssociated)76 TEST(Utils, IsAssociated)
77 {
78     std::string path = "/com/example/chassis/powersupply0";
79     utils::AssociationList assocs = {
80         {ACTIVATION_FWD_ASSOCIATION, ACTIVATION_REV_ASSOCIATION,
81          "a-different-path"}};
82 
83     EXPECT_FALSE(utils::isAssociated(path, assocs));
84 
85     assocs.emplace_back(ACTIVATION_FWD_ASSOCIATION, ACTIVATION_REV_ASSOCIATION,
86                         path);
87     EXPECT_TRUE(utils::isAssociated(path, assocs));
88 }
89