1 #include "lpcsnoop/snoop.hpp" 2 3 #include <sdbusplus/bus.hpp> 4 #include <sdbusplus/test/sdbus_mock.hpp> 5 6 #include <gmock/gmock.h> 7 #include <gtest/gtest.h> 8 9 using ::testing::_; 10 using ::testing::IsNull; 11 using ::testing::NiceMock; 12 using ::testing::Return; 13 using ::testing::StrEq; 14 15 namespace 16 { 17 18 // Fixture for testing class PostReporter 19 class PostReporterTest : public ::testing::Test 20 { 21 protected: 22 PostReporterTest() : bus_mock(), bus(sdbusplus::get_mocked_new(&bus_mock)) 23 { 24 } 25 26 ~PostReporterTest() 27 { 28 } 29 30 NiceMock<sdbusplus::SdBusMock> bus_mock; 31 sdbusplus::bus::bus bus; 32 }; 33 34 TEST_F(PostReporterTest, EmitsObjectsOnExpectedDbusPath) 35 { 36 37 EXPECT_CALL(bus_mock, 38 sd_bus_emit_object_added(IsNull(), StrEq(SNOOP_OBJECTPATH))) 39 .WillOnce(Return(0)); 40 41 PostReporter testReporter(bus, SNOOP_OBJECTPATH, true); 42 testReporter.emit_object_added(); 43 } 44 45 TEST_F(PostReporterTest, AddsObjectWithExpectedName) 46 { 47 EXPECT_CALL(bus_mock, 48 sd_bus_add_object_vtable(IsNull(), _, StrEq(SNOOP_OBJECTPATH), 49 StrEq(SNOOP_BUSNAME), _, _)) 50 .WillOnce(Return(0)); 51 52 PostReporter testReporter(bus, SNOOP_OBJECTPATH, true); 53 } 54 55 TEST_F(PostReporterTest, ValueReadsDefaultToZero) 56 { 57 PostReporter testReporter(bus, SNOOP_OBJECTPATH, true); 58 EXPECT_EQ(0, std::get<primary_post_code_t>(testReporter.value())); 59 } 60 61 TEST_F(PostReporterTest, SetValueToPositiveValueWorks) 62 { 63 PostReporter testReporter(bus, SNOOP_OBJECTPATH, true); 64 secondary_post_code_t secondaryCode = {123, 124, 125}; 65 testReporter.value(std::make_tuple(65537, secondaryCode)); 66 EXPECT_EQ(65537, std::get<primary_post_code_t>(testReporter.value())); 67 EXPECT_EQ(secondaryCode, 68 std::get<secondary_post_code_t>(testReporter.value())); 69 } 70 71 TEST_F(PostReporterTest, SetValueMultipleTimesWorks) 72 { 73 PostReporter testReporter(bus, SNOOP_OBJECTPATH, true); 74 secondary_post_code_t secondaryCode = {10, 40, 0, 245, 56}; 75 testReporter.value(std::make_tuple(123, secondaryCode)); 76 EXPECT_EQ(123, std::get<primary_post_code_t>(testReporter.value())); 77 EXPECT_EQ(secondaryCode, 78 std::get<secondary_post_code_t>(testReporter.value())); 79 80 secondaryCode = {0, 0, 0, 0, 0}; 81 testReporter.value(std::make_tuple(45, secondaryCode)); 82 EXPECT_EQ(45, std::get<primary_post_code_t>(testReporter.value())); 83 EXPECT_EQ(secondaryCode, 84 std::get<secondary_post_code_t>(testReporter.value())); 85 86 secondaryCode = {23, 200, 0, 45, 2}; 87 testReporter.value(std::make_tuple(0, secondaryCode)); 88 EXPECT_EQ(0, std::get<primary_post_code_t>(testReporter.value())); 89 EXPECT_EQ(secondaryCode, 90 std::get<secondary_post_code_t>(testReporter.value())); 91 92 secondaryCode = {10, 40, 0, 35, 78}; 93 testReporter.value(std::make_tuple(46, secondaryCode)); 94 EXPECT_EQ(46, std::get<primary_post_code_t>(testReporter.value())); 95 EXPECT_EQ(secondaryCode, 96 std::get<secondary_post_code_t>(testReporter.value())); 97 98 secondaryCode = {10, 40, 0, 35, 78}; 99 testReporter.value(std::make_tuple(46, secondaryCode)); 100 EXPECT_EQ(46, std::get<primary_post_code_t>(testReporter.value())); 101 EXPECT_EQ(secondaryCode, 102 std::get<secondary_post_code_t>(testReporter.value())); 103 } 104 105 } // namespace 106