/** * Copyright © 2019 IBM Corporation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "extensions/openpower-pels/log_id.hpp" #include "extensions/openpower-pels/paths.hpp" #include #include #include #include #include #include using namespace openpower::pels; namespace fs = std::filesystem; TEST(LogIdTest, TimeBasedIDTest) { uint32_t lastID = 0; for (int i = 0; i < 10; i++) { auto id = detail::getTimeBasedLogID(); EXPECT_EQ(id & 0xFF000000, 0x50000000); EXPECT_NE(id, lastID); lastID = id; std::this_thread::sleep_for(std::chrono::milliseconds(1)); } } TEST(LogIdTest, IDTest) { EXPECT_EQ(generatePELID(), 0x50000001); EXPECT_EQ(generatePELID(), 0x50000002); EXPECT_EQ(generatePELID(), 0x50000003); EXPECT_EQ(generatePELID(), 0x50000004); EXPECT_EQ(generatePELID(), 0x50000005); EXPECT_EQ(generatePELID(), 0x50000006); auto backingFile = getPELIDFile(); fs::remove(backingFile); EXPECT_EQ(generatePELID(), 0x50000001); EXPECT_EQ(generatePELID(), 0x50000002); EXPECT_EQ(generatePELID(), 0x50000003); fs::remove_all(fs::path{backingFile}.parent_path()); } TEST(LogIdTest, PELIDTest) { // Get PEL ID file updated with binary zeros auto backingFile = getPELIDFile(); std::ofstream wf{backingFile, std::ios::binary}; char id = '\0'; for (int i = 0; i < 4; i++) { wf.write(&id, sizeof(id)); } wf.close(); // Expect existing PEL ID file to be deleted and // new PEL ID regenerated EXPECT_EQ(generatePELID(), 0x50000001); EXPECT_EQ(generatePELID(), 0x50000002); EXPECT_EQ(generatePELID(), 0x50000003); EXPECT_EQ(generatePELID(), 0x50000004); EXPECT_EQ(generatePELID(), 0x50000005); // Get PEL ID file updated with binary zeros again std::ofstream fw{backingFile, std::ios::binary}; for (int i = 0; i < 4; i++) { fw.write(&id, sizeof(id)); } fw.close(); // This time PEL IDs are random generated EXPECT_NE(generatePELID(), 0x50000001); EXPECT_NE(generatePELID(), 0x50000002); EXPECT_NE(generatePELID(), 0x50000003); EXPECT_NE(generatePELID(), 0x50000004); EXPECT_NE(generatePELID(), 0x50000005); fs::remove_all(fs::path{backingFile}.parent_path()); }