blob: 8d2a1ffa5f848e7ccc090ddc714932a2d65c695d [file]
#include "include/common_utility.hpp"
#include "mock_dbus_utility.hpp"
#include <gmock/gmock.h>
#include <gtest/gtest.h>
class CommonUtilityTest : public ::testing::Test
{
protected:
fs::path tempDir;
void SetUp() override
{
tempDir = fs::temp_directory_path() / "common_utility_test";
fs::create_directory(tempDir);
}
void TearDown() override
{
fs::remove_all(tempDir);
}
static bool isStringInFile(const fs::path& filePath,
const std::string& searchString)
{
std::ifstream file(filePath);
std::string line;
while (std::getline(file, line))
{
if (line.find(searchString) != std::string::npos)
{
return true;
}
}
return false;
}
};
// Tests for findFiles
TEST_F(CommonUtilityTest, FindFiles_MatchesFiles)
{
fs::path file1 = tempDir / "testFile1.txt";
fs::path file2 = tempDir / "testFile2.txt";
fs::path file3 = tempDir / "otherFile.log";
std::ofstream(file1.string()).put('a');
std::ofstream(file2.string()).put('b');
std::ofstream(file3.string()).put('c');
auto foundFiles = util::findFiles(tempDir, "testFile");
ASSERT_EQ(foundFiles.size(), 2);
EXPECT_THAT(foundFiles, ::testing::UnorderedElementsAre(file1, file2));
}
TEST_F(CommonUtilityTest, FindFiles_NoMatch)
{
fs::path file1 = tempDir / "testFile1.txt";
fs::path file2 = tempDir / "testFile2.txt";
std::ofstream(file1.string()).put('a');
std::ofstream(file2.string()).put('b');
auto foundFiles = util::findFiles(tempDir, "nonexistentFile");
EXPECT_TRUE(foundFiles.empty());
}
// Tests for summarizeLog
TEST_F(CommonUtilityTest, SummarizeLog_FileWriting)
{
EXPECT_CALL(*getDbusUtil(), dbusAddStoredLog(::testing::_)).Times(1);
fs::path logFileDir = tempDir / "currentBoot";
const std::string logFilePrefix = "testLog.log";
size_t fileCount = 0;
if (fs::exists(logFileDir))
{
for (const auto& entry : fs::directory_iterator(logFileDir))
{
if (entry.is_regular_file() &&
entry.path().filename().string().starts_with(logFilePrefix))
{
fileCount++;
}
}
}
const std::string logFilename = logFilePrefix + "_" +
std::to_string(fileCount);
std::string logMessage = "Test log message";
util::summarizeLog(getDbusUtil(), logMessage, tempDir, logFilePrefix);
std::cerr << logFileDir / logFilename << "<<LogFile\n";
ASSERT_TRUE(isStringInFile(logFileDir / logFilename, "Test log message"));
}
TEST_F(CommonUtilityTest, GetProperty_Success)
{
auto [success, value] = util::getProperty(
"some.service", "/some/object", "some.interface", "some.property");
EXPECT_FALSE(success);
}
TEST_F(CommonUtilityTest, I2cOpenDevice_Failure)
{
int fd = util::i2cOpenDevice(1, 0x50);
EXPECT_EQ(fd, -1);
}
TEST_F(CommonUtilityTest, I2cWriteRead_Failure)
{
std::vector<uint8_t> writeBuf = {0x00, 0x01};
auto result = util::i2cWriteRead(1, 0x50, writeBuf, writeBuf.size(), 2);
EXPECT_TRUE(result.empty());
}
TEST_F(CommonUtilityTest, I2cReadByte_Failure)
{
uint8_t result = util::i2cReadByte(1, 0x50, 0x00);
EXPECT_EQ(result, 0);
}
TEST_F(CommonUtilityTest, I2cReadBytes_Failure)
{
auto result = util::i2cReadBytes(1, 0x50, 0x00, 2);
EXPECT_TRUE(result.empty());
}
TEST_F(CommonUtilityTest, ConvertFromVoutLinear)
{
uint16_t value = 0x0200;
int8_t exponent = 6;
double result = util::convertFromVoutLinear(value, exponent);
EXPECT_NEAR(result, 32768.0, 1e-5);
}
TEST_F(CommonUtilityTest, ConvertFromLinear)
{
uint16_t value = 0x0400;
double result = util::convertFromLinear(value);
EXPECT_NEAR(result, 1024.0, 1e-5);
}
TEST_F(CommonUtilityTest, ConvertFromDirect)
{
uint16_t value = 0x0800;
int16_t m = 1;
int16_t b = 0;
int8_t r = 0;
double result = util::convertFromDirect(value, m, b, r);
EXPECT_NEAR(result, 2048.0, 1e-5);
}
TEST_F(CommonUtilityTest, ParseDec_Valid)
{
json element = "1234";
uint16_t result = util::parseDec(element);
EXPECT_EQ(result, 1234);
}
TEST_F(CommonUtilityTest, ParseDec_Invalid)
{
json element = "invalid";
uint16_t result = util::parseDec(element);
EXPECT_EQ(result, 0);
}
TEST_F(CommonUtilityTest, ParseHexByteArray_Valid)
{
json element = {"0x01", "0x02", "0x03"};
auto result = util::parseHexByteArray(element);
EXPECT_EQ(result.size(), 3);
EXPECT_EQ(result[0], 0x01);
EXPECT_EQ(result[1], 0x02);
EXPECT_EQ(result[2], 0x03);
}
TEST_F(CommonUtilityTest, ParseHexByte_Valid)
{
json element = "0x1A";
uint8_t result = util::parseHexByte(element);
EXPECT_EQ(result, 0x1A);
}
TEST_F(CommonUtilityTest, ParseHexByte_Invalid)
{
json element = "invalid";
uint8_t result = util::parseHexByte(element);
EXPECT_EQ(result, 0);
}
TEST_F(CommonUtilityTest, BytesIntoWord)
{
std::string_view upperByte = "0x12";
std::string_view lowerByte = "0x34";
uint16_t result = util::bytesIntoWord(upperByte, lowerByte);
EXPECT_EQ(result, 0x1234);
}
TEST_F(CommonUtilityTest, ByteArrayToHexString)
{
// NOLINTNEXTLINE(cppcoreguidelines-avoid-c-arrays)
uint8_t buf[] = {0x12, 0x34, 0x56};
std::string result = util::byteArrayToHexString(static_cast<uint8_t*>(buf),
3);
EXPECT_EQ(result, "0x12 0x34 0x56 ");
}
TEST_F(CommonUtilityTest, GetCurrentTimestamp)
{
std::string result = util::getCurrentTimestamp();
EXPECT_FALSE(result.empty());
EXPECT_EQ(result.size(),
19); // Expected timestamp format "YYYY-MM-DD HH:MM:SS"
}