1 #include <gmock/gmock.h>
3 #include "audit/audit_utils.h"
7 using ::testing::Return;
12 static LibAuditI* impl = nullptr;
18 static LibAuditI* instance()
20 if (impl == nullptr) {
21 throw std::runtime_error("Instance of LibAuditI stub not created.");
26 LibAuditI(const LibAuditI&) = delete;
27 LibAuditI(const LibAuditI&&) = delete;
28 LibAuditI& operator=(const LibAuditI&) = delete;
29 LibAuditI& operator=(LibAuditI&&) = delete;
31 virtual const char* audit_machine_to_name(int machine) = 0;
32 virtual int audit_detect_machine(void) = 0;
33 virtual const char* audit_syscall_to_name(int sc, int machine) = 0;
37 if (impl != nullptr) {
38 throw std::runtime_error("Only one instance of LibAuditI stub implementation is allowed at a time.");
49 const char *audit_machine_to_name(int machine)
51 return LibAuditI::instance()->audit_machine_to_name(machine);
54 int audit_detect_machine(void)
56 return LibAuditI::instance()->audit_detect_machine();
59 const char* audit_syscall_to_name(int sc, int machine)
61 return LibAuditI::instance()->audit_syscall_to_name(sc, machine);
64 class LibAuditMock : public LibAuditI
67 LibAuditMock() : LibAuditI()
71 MOCK_METHOD1(audit_machine_to_name, const char*(int machine));
72 MOCK_METHOD0(audit_detect_machine, int(void));
73 MOCK_METHOD2(audit_syscall_to_name, const char*(int sc, int machine));
78 const int TEST_PLATFORM = 123;
79 const char* TEST_MACHINE_NAME = "test-machine";
80 const char* TEST_SYS_CALL_OPEN = "open";
81 const char* TEST_SYS_CALL_READ = "read";
82 const char* TEST_SYS_CALL_WRITE = "write";
85 TEST(TestAuditUtils, test_platformType)
89 EXPECT_CALL(audit, audit_detect_machine())
91 .WillOnce(Return(TEST_PLATFORM));
92 EXPECT_CALL(audit, audit_machine_to_name(Eq(TEST_PLATFORM)))
93 .WillOnce(Return(TEST_MACHINE_NAME));
95 EXPECT_EQ(nullptr, audit::AuditUtils::platformType());
96 EXPECT_EQ(TEST_MACHINE_NAME, audit::AuditUtils::platformType());
99 TEST(TestAuditUtils, test_syscallTable)
103 EXPECT_CALL(audit, audit_detect_machine())
104 .WillOnce(Return(-1))
105 .WillOnce(Return(TEST_PLATFORM));
106 EXPECT_CALL(audit, audit_syscall_to_name(_, Eq(TEST_PLATFORM)))
107 .WillOnce(Return(TEST_SYS_CALL_OPEN))
108 .WillOnce(Return(TEST_SYS_CALL_READ))
109 .WillOnce(Return(TEST_SYS_CALL_WRITE))
110 .WillRepeatedly(Return(nullptr));
112 EXPECT_TRUE(audit::AuditUtils::syscallTable().empty());
113 EXPECT_EQ(3, audit::AuditUtils::syscallTable().size());