xref: /openbmc/phosphor-logging/test/openpower-pels/log_id_test.cpp (revision 40fb54935ce7367636a7156039396ee91cc4d5e2)
1 // SPDX-License-Identifier: Apache-2.0
2 // SPDX-FileCopyrightText: Copyright 2019 IBM Corporation
3 
4 #include "extensions/openpower-pels/log_id.hpp"
5 #include "extensions/openpower-pels/paths.hpp"
6 
7 #include <arpa/inet.h>
8 
9 #include <chrono>
10 #include <filesystem>
11 #include <fstream>
12 #include <thread>
13 
14 #include <gtest/gtest.h>
15 
16 using namespace openpower::pels;
17 namespace fs = std::filesystem;
18 
TEST(LogIdTest,TimeBasedIDTest)19 TEST(LogIdTest, TimeBasedIDTest)
20 {
21     uint32_t lastID = 0;
22     for (int i = 0; i < 10; i++)
23     {
24         auto id = detail::getTimeBasedLogID();
25 
26         EXPECT_EQ(id & 0xFF000000, 0x50000000);
27         EXPECT_NE(id, lastID);
28         lastID = id;
29         std::this_thread::sleep_for(std::chrono::milliseconds(1));
30     }
31 }
32 
TEST(LogIdTest,IDTest)33 TEST(LogIdTest, IDTest)
34 {
35     EXPECT_EQ(generatePELID(), 0x50000001);
36     EXPECT_EQ(generatePELID(), 0x50000002);
37     EXPECT_EQ(generatePELID(), 0x50000003);
38     EXPECT_EQ(generatePELID(), 0x50000004);
39     EXPECT_EQ(generatePELID(), 0x50000005);
40     EXPECT_EQ(generatePELID(), 0x50000006);
41 
42     auto backingFile = getPELIDFile();
43     fs::remove(backingFile);
44     EXPECT_EQ(generatePELID(), 0x50000001);
45     EXPECT_EQ(generatePELID(), 0x50000002);
46     EXPECT_EQ(generatePELID(), 0x50000003);
47 
48     fs::remove_all(fs::path{backingFile}.parent_path());
49 }
50 
TEST(LogIdTest,PELIDTest)51 TEST(LogIdTest, PELIDTest)
52 {
53     // Get PEL ID file updated with binary zeros
54     auto backingFile = getPELIDFile();
55     std::ofstream wf{backingFile, std::ios::binary};
56     char id = '\0';
57     for (int i = 0; i < 4; i++)
58     {
59         wf.write(&id, sizeof(id));
60     }
61     wf.close();
62 
63     // Expect existing PEL ID file to be deleted and
64     // new PEL ID regenerated
65     EXPECT_EQ(generatePELID(), 0x50000001);
66     EXPECT_EQ(generatePELID(), 0x50000002);
67     EXPECT_EQ(generatePELID(), 0x50000003);
68     EXPECT_EQ(generatePELID(), 0x50000004);
69     EXPECT_EQ(generatePELID(), 0x50000005);
70 
71     // Get PEL ID file updated with binary zeros again
72     std::ofstream fw{backingFile, std::ios::binary};
73     for (int i = 0; i < 4; i++)
74     {
75         fw.write(&id, sizeof(id));
76     }
77     fw.close();
78 
79     // This time PEL IDs are random generated
80     EXPECT_NE(generatePELID(), 0x50000001);
81     EXPECT_NE(generatePELID(), 0x50000002);
82     EXPECT_NE(generatePELID(), 0x50000003);
83     EXPECT_NE(generatePELID(), 0x50000004);
84     EXPECT_NE(generatePELID(), 0x50000005);
85 
86     fs::remove_all(fs::path{backingFile}.parent_path());
87 }
88