1f18bf836SPatrick Venture #include "config.h"
2f18bf836SPatrick Venture
3f18bf836SPatrick Venture #include "elog_serialize.hpp"
4477b731aSNagaraju Goruganti #include "log_manager.hpp"
5*fa2d962bSPatrick Williams #include "paths.hpp"
6477b731aSNagaraju Goruganti #include "xyz/openbmc_project/Common/error.hpp"
7f18bf836SPatrick Venture
8f18bf836SPatrick Venture #include <phosphor-logging/elog-errors.hpp>
9477b731aSNagaraju Goruganti #include <phosphor-logging/elog.hpp>
10477b731aSNagaraju Goruganti #include <phosphor-logging/log.hpp>
11f18bf836SPatrick Venture #include <sdbusplus/bus.hpp>
12f18bf836SPatrick Venture
132544b419SPatrick Williams #include <filesystem>
142544b419SPatrick Williams
15f18bf836SPatrick Venture #include <gmock/gmock.h>
16f18bf836SPatrick Venture #include <gtest/gtest.h>
17477b731aSNagaraju Goruganti
18477b731aSNagaraju Goruganti namespace phosphor
19477b731aSNagaraju Goruganti {
20477b731aSNagaraju Goruganti namespace logging
21477b731aSNagaraju Goruganti {
22477b731aSNagaraju Goruganti namespace internal
23477b731aSNagaraju Goruganti {
24477b731aSNagaraju Goruganti
25331c4857SPatrick Williams namespace fs = std::filesystem;
26477b731aSNagaraju Goruganti
27477b731aSNagaraju Goruganti class journalInterface
28477b731aSNagaraju Goruganti {
29477b731aSNagaraju Goruganti public:
30ce0bdf1dSPatrick Williams virtual ~journalInterface() = default;
31ce0bdf1dSPatrick Williams
32477b731aSNagaraju Goruganti virtual void journalSync() = 0;
33477b731aSNagaraju Goruganti virtual int sd_journal_open(sd_journal** j, int k) = 0;
34f18bf836SPatrick Venture virtual int sd_journal_get_data(sd_journal* j, const char* transactionIdVar,
35f18bf836SPatrick Venture const void** data, size_t length) = 0;
36477b731aSNagaraju Goruganti virtual void sd_journal_close(sd_journal* j) = 0;
37477b731aSNagaraju Goruganti };
38477b731aSNagaraju Goruganti
39477b731aSNagaraju Goruganti class journalImpl : public journalInterface
40477b731aSNagaraju Goruganti {
41477b731aSNagaraju Goruganti public:
424a375950SMatt Spinler void journalSync() override;
434a375950SMatt Spinler int sd_journal_open(sd_journal** j, int k) override;
44f18bf836SPatrick Venture int sd_journal_get_data(sd_journal* j, const char* transactionIdVar,
454a375950SMatt Spinler const void** data, size_t length) override;
464a375950SMatt Spinler void sd_journal_close(sd_journal* j) override;
47477b731aSNagaraju Goruganti };
48477b731aSNagaraju Goruganti
sd_journal_open(sd_journal **,int)49ce0bdf1dSPatrick Williams int journalImpl::sd_journal_open(sd_journal**, int)
50477b731aSNagaraju Goruganti {
51477b731aSNagaraju Goruganti return 1;
52477b731aSNagaraju Goruganti }
53477b731aSNagaraju Goruganti
journalSync()54477b731aSNagaraju Goruganti void journalImpl::journalSync()
55477b731aSNagaraju Goruganti {
56477b731aSNagaraju Goruganti return;
57477b731aSNagaraju Goruganti }
58477b731aSNagaraju Goruganti
sd_journal_get_data(sd_journal *,const char *,const void **,size_t)59ce0bdf1dSPatrick Williams int journalImpl::sd_journal_get_data(sd_journal*, const char*, const void**,
60ce0bdf1dSPatrick Williams size_t)
61477b731aSNagaraju Goruganti {
62477b731aSNagaraju Goruganti return 1;
63477b731aSNagaraju Goruganti }
64477b731aSNagaraju Goruganti
sd_journal_close(sd_journal *)65ce0bdf1dSPatrick Williams void journalImpl::sd_journal_close(sd_journal*)
66477b731aSNagaraju Goruganti {
67477b731aSNagaraju Goruganti return;
68477b731aSNagaraju Goruganti }
69477b731aSNagaraju Goruganti
70477b731aSNagaraju Goruganti class MockJournal : public Manager
71477b731aSNagaraju Goruganti {
72477b731aSNagaraju Goruganti public:
MockJournal(sdbusplus::bus_t & bus,const char * objPath)7345e83521SPatrick Williams MockJournal(sdbusplus::bus_t& bus, const char* objPath) :
74f18bf836SPatrick Venture Manager(bus, objPath) {};
75477b731aSNagaraju Goruganti MOCK_METHOD0(journalSync, void());
76477b731aSNagaraju Goruganti MOCK_METHOD2(sd_journal_open, int(sd_journal**, int));
77f18bf836SPatrick Venture MOCK_METHOD4(sd_journal_get_data,
78f18bf836SPatrick Venture int(sd_journal*, const char*, const void**, size_t));
79477b731aSNagaraju Goruganti MOCK_METHOD1(sd_journal_close, void(sd_journal*));
80477b731aSNagaraju Goruganti };
81477b731aSNagaraju Goruganti
82477b731aSNagaraju Goruganti class TestLogManager : public testing::Test
83477b731aSNagaraju Goruganti {
84477b731aSNagaraju Goruganti public:
8545e83521SPatrick Williams sdbusplus::bus_t bus;
86477b731aSNagaraju Goruganti MockJournal manager;
TestLogManager()87f18bf836SPatrick Venture TestLogManager() :
88f18bf836SPatrick Venture bus(sdbusplus::bus::new_default()),
89477b731aSNagaraju Goruganti manager(bus, "/xyz/openbmc_test/abc")
90477b731aSNagaraju Goruganti {
91*fa2d962bSPatrick Williams fs::create_directories(paths::error());
92477b731aSNagaraju Goruganti }
93477b731aSNagaraju Goruganti
~TestLogManager()94477b731aSNagaraju Goruganti ~TestLogManager()
95477b731aSNagaraju Goruganti {
967ec2ab7eSMatt Spinler // Leave the directory as other testcases use it and they
977ec2ab7eSMatt Spinler // may be running in parallel from other jobs.
98477b731aSNagaraju Goruganti }
99477b731aSNagaraju Goruganti };
100477b731aSNagaraju Goruganti
101f18bf836SPatrick Venture } // namespace internal
102477b731aSNagaraju Goruganti } // namespace logging
103477b731aSNagaraju Goruganti } // namespace phosphor
104