1 #include <experimental/filesystem>
2 #include <fstream>
3 #include <gtest/gtest.h>
4 #include <string>
5 
6 #include "i2c_occ.hpp"
7 
8 #ifdef I2C_OCC
9 namespace i2c_occ
10 {
11 
12 namespace fs = std::experimental::filesystem;
13 
14 using namespace std::string_literals;
15 const auto STR_4_0050 = "4-0050"s;
16 const auto STR_5_0051 = "5-0051"s;
17 const auto STR_6_0056 = "6-0056"s;
18 const auto STR_7_0057 = "7-0057"s;
19 
20 const auto TEST_DIR = "test-dir/"s;
21 const auto BASE = TEST_DIR + "sys/bus/i2c/devices/";
22 const auto I2C_0 = BASE + "i2c-0";
23 const auto I2C_1 = BASE + "i2c-1";
24 const auto I2C_2 = BASE + "i2c-2";
25 const auto I2C_0_0068 = BASE + "0-0068";
26 const auto I2C_4_0050 = BASE + STR_4_0050;
27 const auto I2C_5_0051 = BASE + STR_5_0051;
28 const auto I2C_6_0056 = BASE + STR_6_0056;
29 const auto I2C_7_0057 = BASE + STR_7_0057;
30 const auto NAME = "/name";
31 const auto P8_OCC_HWMON = "p8-occ-hwmon";
32 
33 const auto OTHER_STRING = "SomeOtherString123"s;
34 
35 
36 class TestUtilGetOccHwmonDevices : public testing::Test
37 {
38 public:
39     TestUtilGetOccHwmonDevices()
40     {
41         // Prepare env for test case
42         fs::create_directories(I2C_0);
43         fs::create_directories(I2C_1);
44         fs::create_directories(I2C_2);
45         fs::create_directories(I2C_0_0068);
46         fs::create_directories(I2C_4_0050);
47         fs::create_directories(I2C_5_0051);
48         fs::create_directories(I2C_6_0056);
49         fs::create_directories(I2C_7_0057);
50 
51         std::ofstream ofs;
52 
53         ofs.open(I2C_0 + NAME); // i2c-0 has empty name
54         ofs.close();
55 
56         ofs.open(I2C_1 + NAME);
57         ofs << "some text\n"; // i2c-1/name has some text
58         ofs.close();
59 
60         ofs.open(I2C_2 + NAME);
61         ofs << "Aspped i2c"; // i2c-2/name is aspeed i2c
62         ofs.close();
63 
64         ofs.open(I2C_0_0068 + NAME);
65         ofs << "other text"; // 0-0068/name is has other text
66         ofs.close();
67 
68         ofs.open(I2C_4_0050 + NAME);
69         ofs << "p8-occ-hwmon\n"; // 4-0050/name is p8-occ-hwmon
70         ofs.close();
71 
72         ofs.open(I2C_5_0051 + NAME);
73         ofs << "p8-occ-hwmon\n"; // 5-0051/name is p8-occ-hwmon
74         ofs.close();
75 
76         ofs.open(I2C_6_0056 + NAME);
77         ofs << "p8-occ-hwmon\n"; // 6-0056/name is p8-occ-hwmon
78         ofs.close();
79 
80         ofs.open(I2C_7_0057 + NAME);
81         ofs << "p8-occ-hwmon\n"; // 7-0057/name is p8-occ-hwmon
82         ofs.close();
83     }
84 
85     ~TestUtilGetOccHwmonDevices()
86     {
87         // Cleanup test env
88         fs::remove_all(TEST_DIR);
89     }
90 };
91 
92 TEST_F(TestUtilGetOccHwmonDevices, getDevicesOK)
93 {
94     // With test env, it shall find all the 4 p8-occ-hwmon devices
95     auto ret = getOccHwmonDevices(BASE.c_str());
96     EXPECT_EQ(4u, ret.size());
97     EXPECT_EQ(STR_4_0050, ret[0]);
98     EXPECT_EQ(STR_5_0051, ret[1]);
99     EXPECT_EQ(STR_6_0056, ret[2]);
100     EXPECT_EQ(STR_7_0057, ret[3]);
101 }
102 
103 TEST_F(TestUtilGetOccHwmonDevices, getDevicesValidDirNoDevices)
104 {
105     // Giving a dir without valid devices,
106     // it shall return an empty vector
107     auto ret = getOccHwmonDevices(TEST_DIR.c_str());
108     EXPECT_TRUE(ret.empty());
109 }
110 
111 TEST_F(TestUtilGetOccHwmonDevices, getDevicesDirNotExist)
112 {
113     // Giving a dir that does not exist,
114     // it shall return an empty vector
115     auto ret = getOccHwmonDevices((TEST_DIR + "not-exist").c_str());
116     EXPECT_TRUE(ret.empty());
117 }
118 
119 TEST(TestI2cDbusNames, i2cToDbus)
120 {
121     // It shall convert 4-0050 to 4_0050
122     auto str = STR_4_0050;
123     i2cToDbus(str);
124     EXPECT_EQ("4_0050", str);
125 
126     // It shall not modify for other strings without '-'
127     str = OTHER_STRING;
128     i2cToDbus(str);
129     EXPECT_EQ(OTHER_STRING, str);
130 }
131 
132 TEST(TestI2cDbusNames, dbusToI2c)
133 {
134     // It shall convert 4_0050 to 4-0050
135     auto str = "4_0050"s;
136     dbusToI2c(str);
137     EXPECT_EQ(STR_4_0050, str);
138 
139     // It shall not modify for other strings without '-'
140     str = OTHER_STRING;
141     dbusToI2c(str);
142     EXPECT_EQ(OTHER_STRING, str);
143 }
144 
145 TEST(TestI2cDbusNames, getI2cDeviceName)
146 {
147     auto path = "/org/open_power/control/4_0050"s;
148     auto name = getI2cDeviceName(path);
149     EXPECT_EQ(STR_4_0050, name);
150 }
151 
152 } // namespace i2c_occ
153 
154 #endif // I2C_OCC
155 
156