197f7abcfSMatt Spinler /**
297f7abcfSMatt Spinler  * Copyright © 2019 IBM Corporation
397f7abcfSMatt Spinler  *
497f7abcfSMatt Spinler  * Licensed under the Apache License, Version 2.0 (the "License");
597f7abcfSMatt Spinler  * you may not use this file except in compliance with the License.
697f7abcfSMatt Spinler  * You may obtain a copy of the License at
797f7abcfSMatt Spinler  *
897f7abcfSMatt Spinler  *     http://www.apache.org/licenses/LICENSE-2.0
997f7abcfSMatt Spinler  *
1097f7abcfSMatt Spinler  * Unless required by applicable law or agreed to in writing, software
1197f7abcfSMatt Spinler  * distributed under the License is distributed on an "AS IS" BASIS,
1297f7abcfSMatt Spinler  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1397f7abcfSMatt Spinler  * See the License for the specific language governing permissions and
1497f7abcfSMatt Spinler  * limitations under the License.
1597f7abcfSMatt Spinler  */
16df13bdb6SMatt Spinler #include "extensions/openpower-pels/log_id.hpp"
17df13bdb6SMatt Spinler #include "extensions/openpower-pels/paths.hpp"
18df13bdb6SMatt Spinler 
19df13bdb6SMatt Spinler #include <arpa/inet.h>
20df13bdb6SMatt Spinler 
21*620ef38cSAndrew Geissler #include <chrono>
22df13bdb6SMatt Spinler #include <filesystem>
23*620ef38cSAndrew Geissler #include <thread>
24df13bdb6SMatt Spinler 
25df13bdb6SMatt Spinler #include <gtest/gtest.h>
26df13bdb6SMatt Spinler 
27df13bdb6SMatt Spinler using namespace openpower::pels;
28df13bdb6SMatt Spinler namespace fs = std::filesystem;
29df13bdb6SMatt Spinler 
30df13bdb6SMatt Spinler TEST(LogIdTest, TimeBasedIDTest)
31df13bdb6SMatt Spinler {
32df13bdb6SMatt Spinler     uint32_t lastID = 0;
33df13bdb6SMatt Spinler     for (int i = 0; i < 10; i++)
34df13bdb6SMatt Spinler     {
35df13bdb6SMatt Spinler         auto id = detail::getTimeBasedLogID();
36df13bdb6SMatt Spinler 
37df13bdb6SMatt Spinler         EXPECT_EQ(id & 0xFF000000, 0x50000000);
38df13bdb6SMatt Spinler         EXPECT_NE(id, lastID);
39df13bdb6SMatt Spinler         lastID = id;
40*620ef38cSAndrew Geissler         std::this_thread::sleep_for(std::chrono::milliseconds(1));
41df13bdb6SMatt Spinler     }
42df13bdb6SMatt Spinler }
43df13bdb6SMatt Spinler 
44df13bdb6SMatt Spinler TEST(LogIdTest, IDTest)
45df13bdb6SMatt Spinler {
46df13bdb6SMatt Spinler     EXPECT_EQ(generatePELID(), 0x50000001);
47df13bdb6SMatt Spinler     EXPECT_EQ(generatePELID(), 0x50000002);
48df13bdb6SMatt Spinler     EXPECT_EQ(generatePELID(), 0x50000003);
49df13bdb6SMatt Spinler     EXPECT_EQ(generatePELID(), 0x50000004);
50df13bdb6SMatt Spinler     EXPECT_EQ(generatePELID(), 0x50000005);
51df13bdb6SMatt Spinler     EXPECT_EQ(generatePELID(), 0x50000006);
52df13bdb6SMatt Spinler 
53df13bdb6SMatt Spinler     auto backingFile = getPELIDFile();
54df13bdb6SMatt Spinler     fs::remove(backingFile);
55df13bdb6SMatt Spinler     EXPECT_EQ(generatePELID(), 0x50000001);
56df13bdb6SMatt Spinler     EXPECT_EQ(generatePELID(), 0x50000002);
57df13bdb6SMatt Spinler     EXPECT_EQ(generatePELID(), 0x50000003);
58df13bdb6SMatt Spinler 
59df13bdb6SMatt Spinler     fs::remove_all(fs::path{backingFile}.parent_path());
60df13bdb6SMatt Spinler }
61