xref: /openbmc/phosphor-logging/test/elog_errorwrap_test.hpp (revision fa2d962b5da807ac17bb7a355709ff05dd10d041)
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