summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLei YU <mine260309@gmail.com>2017-07-14 11:07:37 +0800
committerLei YU <mine260309@gmail.com>2017-08-28 10:31:42 +0800
commit6c56a4a82863859d0d593621dc86f2a576440e77 (patch)
tree2a5fb6a3f016ce8be0cbfd6449837c571349cfeb
parent0ab90ca75b825db8e2427ea62ea3ee212c9accbb (diff)
downloadopenpower-occ-control-6c56a4a82863859d0d593621dc86f2a576440e77.zip
openpower-occ-control-6c56a4a82863859d0d593621dc86f2a576440e77.tar.gz
Add unit tests for utils and refactor Makefiles
1. Add unit tests for utils; 2. Put the common code shared by app and utest into a library, and link the library to app and utest. This eliminates the duplicated compiled objects. 3. Update .gitignore Change-Id: I05ee93c2b23748a1e038eeec3534d49b94911366 Signed-off-by: Lei YU <mine260309@gmail.com>
-rw-r--r--.gitignore14
-rw-r--r--Makefile.am25
-rw-r--r--test/Makefile.am30
-rw-r--r--test/TestI2cOcc.cpp155
4 files changed, 196 insertions, 28 deletions
diff --git a/.gitignore b/.gitignore
index 6c72e31..02849ca 100644
--- a/.gitignore
+++ b/.gitignore
@@ -36,17 +36,21 @@ Makefile.in
/texinfo.tex
# Repo Specific Items
-/*.o
+*.o
+*.la
+*.lo
+*.log
/config.h
/config.h.in~
-/config.log
/config.status
Makefile
.deps
*-libtool
-/org/open_power/OCC/PassThrough/
+.libs
+/occ_sensor.hpp
+/org/open_power/OCC/Device/
/openpower-occ-control
+
+# UT related items
/test/utest
-/test/utest-utest.o
-/test/*.log
/test/*.trs
diff --git a/Makefile.am b/Makefile.am
index d71d6e5..0a2d05a 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -8,19 +8,26 @@ noinst_HEADERS = \
occ_finder.hpp \
utils.hpp
+noinst_LTLIBRARIES = libocc_control.la
+
sbin_PROGRAMS = openpower-occ-control
+
openpower_occ_control_SOURCES = \
+ app.cpp
+
+libocc_control_la_SOURCES = \
occ_pass_through.cpp \
occ_status.cpp \
occ_device.cpp \
occ_errors.cpp \
- app.cpp \
powercap.cpp \
org/open_power/OCC/Device/error.cpp \
occ_finder.cpp \
i2c_occ.cpp \
utils.cpp
+openpower_occ_control_LDADD = libocc_control.la -lstdc++fs
+
BUILT_SOURCES = org/open_power/OCC/Device/error.hpp \
org/open_power/OCC/Device/error.cpp \
occ_sensor.hpp
@@ -35,19 +42,27 @@ EXTRA_DIST = $(REQ_MAKO_FILE) $(REQ_PY_SCRIPT)
occ_sensor.hpp: ${REQ_PY_SCRIPT} ${REQ_MAKO_FILE}
$(AM_V_GEN) ${PYTHON} ${REQ_PY_SCRIPT} -i ${YAML_PATH} > $@
-openpower_occ_control_LDFLAGS = \
+
+generic_ld_flags = \
$(SDBUSPLUS_LIBS) \
$(PHOSPHOR_LOGGING_LIBS) \
$(OPENPOWER_DBUS_INTERFACES_LIBS) \
- $(PHOSPHOR_DBUS_INTERFACES_LIBS) \
- -lstdc++fs
+ $(PHOSPHOR_DBUS_INTERFACES_LIBS)
-openpower_occ_control_CXXFLAGS =
+generic_cxx_flags = \
$(SDBUSPLUS_CFLAGS) \
$(PHOSPHOR_LOGGING_CFLAGS) \
$(OPENPOWER_DBUS_INTERFACES_CFLAGS) \
$(PHOSPHOR_DBUS_INTERFACES_CFLAGS)
+libocc_control_la_CXXFLAGS = $(generic_cxx_flags)
+
+libocc_control_la_LDFLAGS = $(generic_ld_flags)
+
+openpower_occ_control_CXXFLAGS = $(generic_cxx_flags)
+
+openpower_occ_control_LDFLAGS = $(generic_ld_flags)
+
org/open_power/OCC/Device/error.hpp: ${top_srcdir}/org/open_power/OCC/Device.errors.yaml
@mkdir -p `dirname $@`
$(SDBUSPLUSPLUS) -r $(top_srcdir) error exception-header org.open_power.OCC.Device > $@
diff --git a/test/Makefile.am b/test/Makefile.am
index cd879f5..5311f9f 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -4,22 +4,16 @@ check_PROGRAMS = utest
# Run all 'check' test programs
TESTS = $(check_PROGRAMS)
-# Build/add utest to test suite
-utest_CPPFLAGS = -Igtest $(GTEST_CPPFLAGS) $(AM_CPPFLAGS)
+utest_LDADD = $(top_builddir)/libocc_control.la -lstdc++fs
+
+utest_SOURCES = utest.cpp \
+ TestI2cOcc.cpp
+
+utest_CPPFLAGS = $(GTEST_CPPFLAGS) \
+ $(AM_CPPFLAGS)
+
utest_CXXFLAGS = $(PTHREAD_CFLAGS)
-utest_LDFLAGS = -lgtest_main -lgtest \
- $(PTHREAD_LIBS) \
- $(OESDK_TESTCASE_FLAGS) \
- $(SYSTEMD_LIBS) \
- ${SDBUSPLUS_LIBS} \
- $(OPENPOWER_DBUS_INTERFACES_LIBS) \
- $(PHOSPHOR_DBUS_INTERFACES_LIBS) \
- -lstdc++fs
-utest_SOURCES = utest.cpp
-utest_LDADD = $(top_builddir)/powercap.o \
- $(top_builddir)/occ_status.o \
- $(top_builddir)/occ_device.o \
- $(top_builddir)/occ_errors.o \
- $(top_builddir)/i2c_occ.o \
- $(top_builddir)/utils.o \
- $(top_builddir)/org/open_power/OCC/Device/error.o
+
+utest_LDFLAGS = -lgmock_main \
+ $(PTHREAD_LIBS) \
+ $(OESDK_TESTCASE_FLAGS)
diff --git a/test/TestI2cOcc.cpp b/test/TestI2cOcc.cpp
new file mode 100644
index 0000000..3fb6e6e
--- /dev/null
+++ b/test/TestI2cOcc.cpp
@@ -0,0 +1,155 @@
+#include <experimental/filesystem>
+#include <fstream>
+#include <gtest/gtest.h>
+#include <string>
+
+#include "i2c_occ.hpp"
+
+#ifdef I2C_OCC
+namespace i2c_occ
+{
+
+namespace fs = std::experimental::filesystem;
+
+using namespace std::string_literals;
+const auto STR_4_0050 = "4-0050"s;
+const auto STR_5_0051 = "5-0051"s;
+const auto STR_6_0056 = "6-0056"s;
+const auto STR_7_0057 = "7-0057"s;
+
+const auto TEST_DIR = "test-dir/"s;
+const auto BASE = TEST_DIR + "sys/bus/i2c/devices/";
+const auto I2C_0 = BASE + "i2c-0";
+const auto I2C_1 = BASE + "i2c-1";
+const auto I2C_2 = BASE + "i2c-2";
+const auto I2C_0_0068 = BASE + "0-0068";
+const auto I2C_4_0050 = BASE + STR_4_0050;
+const auto I2C_5_0051 = BASE + STR_5_0051;
+const auto I2C_6_0056 = BASE + STR_6_0056;
+const auto I2C_7_0057 = BASE + STR_7_0057;
+const auto NAME = "/name";
+const auto P8_OCC_HWMON = "p8-occ-hwmon";
+
+const auto OTHER_STRING = "SomeOtherString123"s;
+
+
+class TestUtilGetOccHwmonDevices : public testing::Test
+{
+public:
+ TestUtilGetOccHwmonDevices()
+ {
+ // Prepare env for test case
+ fs::create_directories(I2C_0);
+ fs::create_directories(I2C_1);
+ fs::create_directories(I2C_2);
+ fs::create_directories(I2C_0_0068);
+ fs::create_directories(I2C_4_0050);
+ fs::create_directories(I2C_5_0051);
+ fs::create_directories(I2C_6_0056);
+ fs::create_directories(I2C_7_0057);
+
+ std::ofstream ofs;
+
+ ofs.open(I2C_0 + NAME); // i2c-0 has empty name
+ ofs.close();
+
+ ofs.open(I2C_1 + NAME);
+ ofs << "some text\n"; // i2c-1/name has some text
+ ofs.close();
+
+ ofs.open(I2C_2 + NAME);
+ ofs << "Aspped i2c"; // i2c-2/name is aspeed i2c
+ ofs.close();
+
+ ofs.open(I2C_0_0068 + NAME);
+ ofs << "other text"; // 0-0068/name is has other text
+ ofs.close();
+
+ ofs.open(I2C_4_0050 + NAME);
+ ofs << "p8-occ-hwmon\n"; // 4-0050/name is p8-occ-hwmon
+ ofs.close();
+
+ ofs.open(I2C_5_0051 + NAME);
+ ofs << "p8-occ-hwmon\n"; // 5-0051/name is p8-occ-hwmon
+ ofs.close();
+
+ ofs.open(I2C_6_0056 + NAME);
+ ofs << "p8-occ-hwmon\n"; // 6-0056/name is p8-occ-hwmon
+ ofs.close();
+
+ ofs.open(I2C_7_0057 + NAME);
+ ofs << "p8-occ-hwmon\n"; // 7-0057/name is p8-occ-hwmon
+ ofs.close();
+ }
+
+ ~TestUtilGetOccHwmonDevices()
+ {
+ // Cleanup test env
+ fs::remove_all(TEST_DIR);
+ }
+};
+
+TEST_F(TestUtilGetOccHwmonDevices, getDevicesOK)
+{
+ // With test env, it shall find all the 4 p8-occ-hwmon devices
+ auto ret = getOccHwmonDevices(BASE.c_str());
+ EXPECT_EQ(4u, ret.size());
+ EXPECT_EQ(STR_4_0050, ret[0]);
+ EXPECT_EQ(STR_5_0051, ret[1]);
+ EXPECT_EQ(STR_6_0056, ret[2]);
+ EXPECT_EQ(STR_7_0057, ret[3]);
+}
+
+TEST_F(TestUtilGetOccHwmonDevices, getDevicesValidDirNoDevices)
+{
+ // Giving a dir without valid devices,
+ // it shall return an empty vector
+ auto ret = getOccHwmonDevices(TEST_DIR.c_str());
+ EXPECT_TRUE(ret.empty());
+}
+
+TEST_F(TestUtilGetOccHwmonDevices, getDevicesDirNotExist)
+{
+ // Giving a dir that does not exist,
+ // it shall return an empty vector
+ auto ret = getOccHwmonDevices((TEST_DIR + "not-exist").c_str());
+ EXPECT_TRUE(ret.empty());
+}
+
+TEST(TestI2cDbusNames, i2cToDbus)
+{
+ // It shall convert 4-0050 to 4_0050
+ auto str = STR_4_0050;
+ i2cToDbus(str);
+ EXPECT_EQ("4_0050", str);
+
+ // It shall not modify for other strings without '-'
+ str = OTHER_STRING;
+ i2cToDbus(str);
+ EXPECT_EQ(OTHER_STRING, str);
+}
+
+TEST(TestI2cDbusNames, dbusToI2c)
+{
+ // It shall convert 4_0050 to 4-0050
+ auto str = "4_0050"s;
+ dbusToI2c(str);
+ EXPECT_EQ(STR_4_0050, str);
+
+ // It shall not modify for other strings without '-'
+ str = OTHER_STRING;
+ dbusToI2c(str);
+ EXPECT_EQ(OTHER_STRING, str);
+}
+
+TEST(TestI2cDbusNames, getI2cDeviceName)
+{
+ auto path = "/org/open_power/control/4_0050"s;
+ auto name = getI2cDeviceName(path);
+ EXPECT_EQ(STR_4_0050, name);
+}
+
+} // namespace i2c_occ
+
+#endif // I2C_OCC
+
OpenPOWER on IntegriCloud