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