1 #include "config.h"
2
3 #include "elog_serialize.hpp"
4 #include "log_manager.hpp"
5 #include "xyz/openbmc_project/Common/error.hpp"
6
7 #include <phosphor-logging/elog-errors.hpp>
8 #include <phosphor-logging/elog.hpp>
9 #include <phosphor-logging/log.hpp>
10 #include <sdbusplus/bus.hpp>
11
12 #include <filesystem>
13
14 #include <gmock/gmock.h>
15 #include <gtest/gtest.h>
16
17 namespace phosphor
18 {
19 namespace logging
20 {
21 namespace internal
22 {
23
24 namespace fs = std::filesystem;
25
26 class journalInterface
27 {
28 public:
29 virtual ~journalInterface() = default;
30
31 virtual void journalSync() = 0;
32 virtual int sd_journal_open(sd_journal** j, int k) = 0;
33 virtual int sd_journal_get_data(sd_journal* j, const char* transactionIdVar,
34 const void** data, size_t length) = 0;
35 virtual void sd_journal_close(sd_journal* j) = 0;
36 };
37
38 class journalImpl : public journalInterface
39 {
40 public:
41 void journalSync() override;
42 int sd_journal_open(sd_journal** j, int k) override;
43 int sd_journal_get_data(sd_journal* j, const char* transactionIdVar,
44 const void** data, size_t length) override;
45 void sd_journal_close(sd_journal* j) override;
46 };
47
sd_journal_open(sd_journal **,int)48 int journalImpl::sd_journal_open(sd_journal**, int)
49 {
50 return 1;
51 }
52
journalSync()53 void journalImpl::journalSync()
54 {
55 return;
56 }
57
sd_journal_get_data(sd_journal *,const char *,const void **,size_t)58 int journalImpl::sd_journal_get_data(sd_journal*, const char*, const void**,
59 size_t)
60 {
61 return 1;
62 }
63
sd_journal_close(sd_journal *)64 void journalImpl::sd_journal_close(sd_journal*)
65 {
66 return;
67 }
68
69 class MockJournal : public Manager
70 {
71 public:
MockJournal(sdbusplus::bus_t & bus,const char * objPath)72 MockJournal(sdbusplus::bus_t& bus, const char* objPath) :
73 Manager(bus, objPath) {};
74 MOCK_METHOD0(journalSync, void());
75 MOCK_METHOD2(sd_journal_open, int(sd_journal**, int));
76 MOCK_METHOD4(sd_journal_get_data,
77 int(sd_journal*, const char*, const void**, size_t));
78 MOCK_METHOD1(sd_journal_close, void(sd_journal*));
79 };
80
81 class TestLogManager : public testing::Test
82 {
83 public:
84 sdbusplus::bus_t bus;
85 MockJournal manager;
TestLogManager()86 TestLogManager() :
87 bus(sdbusplus::bus::new_default()),
88 manager(bus, "/xyz/openbmc_test/abc")
89 {
90 fs::create_directories(ERRLOG_PERSIST_PATH);
91 }
92
~TestLogManager()93 ~TestLogManager()
94 {
95 // Leave the directory as other testcases use it and they
96 // may be running in parallel from other jobs.
97 }
98 };
99
100 } // namespace internal
101 } // namespace logging
102 } // namespace phosphor
103