#include "lpcsnoop/snoop.hpp" #include #include #include #include using ::testing::_; using ::testing::IsNull; using ::testing::NiceMock; using ::testing::Return; using ::testing::StrEq; namespace { // Fixture for testing class PostReporter class PostReporterTest : public ::testing::Test { protected: PostReporterTest() : bus_mock(), bus(sdbusplus::get_mocked_new(&bus_mock)) {} ~PostReporterTest() {} NiceMock bus_mock; sdbusplus::bus_t bus; }; TEST_F(PostReporterTest, EmitsObjectsOnExpectedDbusPath) { EXPECT_CALL(bus_mock, sd_bus_emit_object_added(IsNull(), StrEq(snoopObject))) .WillOnce(Return(0)); PostReporter testReporter(bus, snoopObject, true); testReporter.emit_object_added(); } TEST_F(PostReporterTest, AddsObjectWithExpectedName) { auto slotcb = [](sd_bus*, sd_bus_slot** slot, auto&&...) { *slot = reinterpret_cast(0xdefa); return 0; }; EXPECT_CALL(bus_mock, sd_bus_add_object_vtable(IsNull(), _, StrEq(snoopObject), StrEq(snoopDbus), _, _)) .WillOnce(slotcb); PostReporter testReporter(bus, snoopObject, true); } TEST_F(PostReporterTest, ValueReadsDefaultToEmpty) { PostReporter testReporter(bus, snoopObject, true); EXPECT_TRUE(std::get<0>(testReporter.value()).empty()); } TEST_F(PostReporterTest, SetValueToPositiveValueWorks) { PostReporter testReporter(bus, snoopObject, true); primary_post_code_t primaryCode = {122, 126, 127}; secondary_post_code_t secondaryCode = {123, 124, 125}; testReporter.value(std::make_tuple(primaryCode, secondaryCode)); EXPECT_EQ(primaryCode, std::get<0>(testReporter.value())); EXPECT_EQ(secondaryCode, std::get<1>(testReporter.value())); } TEST_F(PostReporterTest, SetValueMultipleTimesWorks) { PostReporter testReporter(bus, snoopObject, true); primary_post_code_t primaryCode = {20, 21, 0, 123}; secondary_post_code_t secondaryCode = {10, 40, 0, 245, 56}; testReporter.value(std::make_tuple(primaryCode, secondaryCode)); EXPECT_EQ(primaryCode, std::get<0>(testReporter.value())); EXPECT_EQ(secondaryCode, std::get<1>(testReporter.value())); primaryCode = {44, 45}; secondaryCode = {0, 0, 0, 0, 0}; testReporter.value(std::make_tuple(primaryCode, secondaryCode)); EXPECT_EQ(primaryCode, std::get<0>(testReporter.value())); EXPECT_EQ(secondaryCode, std::get<1>(testReporter.value())); primaryCode = {0}; secondaryCode = {23, 200, 0, 45, 2}; testReporter.value(std::make_tuple(primaryCode, secondaryCode)); EXPECT_EQ(primaryCode, std::get<0>(testReporter.value())); EXPECT_EQ(secondaryCode, std::get<1>(testReporter.value())); primaryCode = {46}; secondaryCode = {10, 40, 0, 35, 78}; testReporter.value(std::make_tuple(primaryCode, secondaryCode)); EXPECT_EQ(primaryCode, std::get<0>(testReporter.value())); EXPECT_EQ(secondaryCode, std::get<1>(testReporter.value())); primaryCode = {46}; secondaryCode = {10, 40, 0, 35, 78}; testReporter.value(std::make_tuple(primaryCode, secondaryCode)); EXPECT_EQ(primaryCode, std::get<0>(testReporter.value())); EXPECT_EQ(secondaryCode, std::get<1>(testReporter.value())); } } // namespace