blob: 9d788c96f47ce7a5d3ecb9804589625691d67d5e [file] [log] [blame]
Matt Spinler89fa0822019-07-17 13:54:30 -05001#include "extensions/openpower-pels/manager.hpp"
2#include "log_manager.hpp"
3#include "pel_utils.hpp"
4
5#include <fstream>
6#include <regex>
7
8#include <gtest/gtest.h>
9
10using namespace openpower::pels;
11namespace fs = std::filesystem;
12
13class ManagerTest : public CleanPELFiles
14{
15};
16
17fs::path makeTempDir()
18{
19 char path[] = "/tmp/tempnameXXXXXX";
20 std::filesystem::path dir = mkdtemp(path);
21 return dir;
22}
23
24// Test that using the RAWPEL=<file> with the Manager::create() call gets
25// a PEL saved in the repository.
26TEST_F(ManagerTest, TestCreateWithPEL)
27{
28 auto bus = sdbusplus::bus::new_default();
29 phosphor::logging::internal::Manager logManager(bus, "logging_path");
30
31 openpower::pels::Manager manager{logManager};
32
33 // Create a PEL, write it to a file, and pass that filename into
34 // the create function.
35 auto data = pelDataFactory(TestPelType::pelSimple);
36
37 fs::path pelFilename = makeTempDir() / "rawpel";
38 std::ofstream pelFile{pelFilename};
39 pelFile.write(reinterpret_cast<const char*>(data->data()), data->size());
40 pelFile.close();
41
42 std::string adItem = "RAWPEL=" + pelFilename.string();
43 std::vector<std::string> additionalData{adItem};
44 std::vector<std::string> associations;
45
46 manager.create("error message", 42, 0, Entry::Level::Error, additionalData,
47 associations);
48
49 // We don't know the exact name, but a file should have been added to the
50 // repo of the form <timestamp>_<ID>
51 std::regex expr{"\\d+_\\d+"};
52
53 bool found = false;
54 for (auto& f : fs::directory_iterator(getPELRepoPath() / "logs"))
55 {
56 if (std::regex_search(f.path().string(), expr))
57 {
58 found = true;
59 break;
60 }
61 }
62
63 EXPECT_TRUE(found);
64
Matt Spinler475e5742019-07-18 16:09:49 -050065 // Now remove it based on its OpenBMC event log ID
66 manager.erase(42);
67
68 found = false;
69
70 for (auto& f : fs::directory_iterator(getPELRepoPath() / "logs"))
71 {
72 if (std::regex_search(f.path().string(), expr))
73 {
74 found = true;
75 break;
76 }
77 }
78
79 EXPECT_FALSE(found);
80
Matt Spinler89fa0822019-07-17 13:54:30 -050081 fs::remove_all(pelFilename.parent_path());
82}