blob: b24114763c734dcb73b560b0dec323602558f9d0 [file] [log] [blame]
Alexander Hansen40fb5492025-10-28 17:56:12 +01001// SPDX-License-Identifier: Apache-2.0
2// SPDX-FileCopyrightText: Copyright 2019 IBM Corporation
3
Matt Spinlerdf13bdb2019-07-10 16:54:13 -05004#include "extensions/openpower-pels/log_id.hpp"
5#include "extensions/openpower-pels/paths.hpp"
6
7#include <arpa/inet.h>
8
Andrew Geissler620ef382020-06-16 14:52:14 -05009#include <chrono>
Matt Spinlerdf13bdb2019-07-10 16:54:13 -050010#include <filesystem>
Sumit Kumarf380c512021-11-19 06:07:31 -060011#include <fstream>
Andrew Geissler620ef382020-06-16 14:52:14 -050012#include <thread>
Matt Spinlerdf13bdb2019-07-10 16:54:13 -050013
14#include <gtest/gtest.h>
15
16using namespace openpower::pels;
17namespace fs = std::filesystem;
18
19TEST(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;
Andrew Geissler620ef382020-06-16 14:52:14 -050029 std::this_thread::sleep_for(std::chrono::milliseconds(1));
Matt Spinlerdf13bdb2019-07-10 16:54:13 -050030 }
31}
32
33TEST(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}
Sumit Kumarf380c512021-11-19 06:07:31 -060050
51TEST(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);
Matt Spinler74102602023-04-25 11:10:45 -050085
86 fs::remove_all(fs::path{backingFile}.parent_path());
Sumit Kumarf380c512021-11-19 06:07:31 -060087}