#include "filesystem_mock.hpp" #include "hwmonio.hpp" #include <chrono> #include <string> #include <gmock/gmock.h> #include <gtest/gtest.h> namespace hwmonio { namespace { using ::testing::_; using ::testing::Return; class HwmonIOTest : public ::testing::Test { protected: HwmonIOTest() : _hwmonio(_path, &_mock) { } const int64_t _value = 12; const std::string _path = "abcd"; const std::string _type = "fan"; const std::string _id = "a"; const std::string _sensor = "1"; const size_t _retries = 1; const std::chrono::milliseconds _delay = std::chrono::milliseconds{10}; FileSystemMock _mock; HwmonIO _hwmonio; }; TEST_F(HwmonIOTest, ReadReturnsValue) { EXPECT_CALL(_mock, read(_)).WillOnce(Return(_value)); EXPECT_THAT(_hwmonio.read(_type, _id, _sensor, _retries, _delay), _value); } int64_t SetErrnoExcept(const std::string&) { errno = ETIMEDOUT; throw std::runtime_error("bad times"); } TEST_F(HwmonIOTest, ReadExceptsRetryable) { EXPECT_CALL(_mock, read(_)) .WillOnce(&SetErrnoExcept) .WillOnce(Return(_value)); EXPECT_THAT(_hwmonio.read(_type, _id, _sensor, _retries, _delay), _value); } } // namespace } // namespace hwmonio