1 #include "env_mock.hpp" 2 #include "gpio_mock.hpp" 3 #include "hwmonio_mock.hpp" 4 #include "sensor.hpp" 5 6 #include <gpioplus/test/handle.hpp> 7 #include <memory> 8 #include <utility> 9 10 #include <gmock/gmock.h> 11 #include <gtest/gtest.h> 12 13 class SensorTest : public ::testing::Test 14 { 15 protected: 16 void SetUp() override 17 { 18 envIntf = nullptr; 19 gpioIntf = nullptr; 20 } 21 }; 22 23 using ::testing::Eq; 24 using ::testing::Invoke; 25 using ::testing::Return; 26 using ::testing::StrictMock; 27 28 TEST_F(SensorTest, BasicConstructorTest) 29 { 30 /* Constructor test with nothing in an rcList or GPIO chip. */ 31 32 StrictMock<EnvMock> eMock; 33 envIntf = &eMock; 34 35 auto sensorKey = std::make_pair(std::string("temp"), std::string("5")); 36 std::unique_ptr<hwmonio::HwmonIOInterface> hwmonio_mock = 37 std::make_unique<hwmonio::HwmonIOMock>(); 38 std::string path = "/"; 39 40 /* Always calls GPIOCHIP and GPIO checks, returning empty string. */ 41 EXPECT_CALL(eMock, getEnv(Eq("GPIOCHIP"), Eq(sensorKey))) 42 .WillOnce(Return("")); 43 EXPECT_CALL(eMock, getEnv(Eq("GPIO"), Eq(sensorKey))).WillOnce(Return("")); 44 45 /* Always calls GAIN and OFFSET, can use ON_CALL instead of EXPECT_CALL */ 46 EXPECT_CALL(eMock, getEnv(Eq("GAIN"), Eq(sensorKey))).WillOnce(Return("")); 47 EXPECT_CALL(eMock, getEnv(Eq("OFFSET"), Eq(sensorKey))) 48 .WillOnce(Return("")); 49 EXPECT_CALL(eMock, getEnv(Eq("REMOVERCS"), Eq(sensorKey))) 50 .WillOnce(Return("")); 51 52 auto sensor = 53 std::make_unique<sensor::Sensor>(sensorKey, hwmonio_mock.get(), path); 54 EXPECT_FALSE(sensor == nullptr); 55 } 56 57 TEST_F(SensorTest, SensorRequiresGpio) 58 { 59 /* Constructor test with only the GPIO chip set. */ 60 61 StrictMock<EnvMock> eMock; 62 envIntf = &eMock; 63 64 StrictMock<GpioHandleMock> gMock; 65 gpioIntf = &gMock; 66 67 /* The following piece of code can probably be copied above once it's 68 * working. 69 */ 70 auto handleMock = std::make_unique<gpioplus::test::HandleMock>(); 71 72 auto sensorKey = std::make_pair(std::string("temp"), std::string("5")); 73 std::unique_ptr<hwmonio::HwmonIOInterface> hwmonio_mock = 74 std::make_unique<hwmonio::HwmonIOMock>(); 75 std::string path = "/"; 76 77 EXPECT_CALL(eMock, getEnv(Eq("GPIOCHIP"), Eq(sensorKey))) 78 .WillOnce(Return("chipA")); 79 EXPECT_CALL(eMock, getEnv(Eq("GPIO"), Eq(sensorKey))).WillOnce(Return("5")); 80 81 EXPECT_CALL(gMock, build(Eq("chipA"), Eq("5"))) 82 .WillOnce(Invoke([&](const std::string& chip, const std::string& line) { 83 return std::move(handleMock); 84 })); 85 86 /* Always calls GAIN and OFFSET, can use ON_CALL instead of EXPECT_CALL */ 87 EXPECT_CALL(eMock, getEnv(Eq("GAIN"), Eq(sensorKey))).WillOnce(Return("")); 88 EXPECT_CALL(eMock, getEnv(Eq("OFFSET"), Eq(sensorKey))) 89 .WillOnce(Return("")); 90 EXPECT_CALL(eMock, getEnv(Eq("REMOVERCS"), Eq(sensorKey))) 91 .WillOnce(Return("")); 92 93 auto sensor = 94 std::make_unique<sensor::Sensor>(sensorKey, hwmonio_mock.get(), path); 95 EXPECT_FALSE(sensor == nullptr); 96 } 97