// Copyright 2021 Google LLC // // 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 "util.hpp" #include #include #include "gtest/gtest.h" TEST(IsNumericPath, invalidNumericPath) { std::string badPath{"badNumericPath"}; int id = -1; EXPECT_FALSE(metric_blob::isNumericPath(badPath, id)); EXPECT_EQ(id, -1); } TEST(IsNumericPath, validNumericPath) { std::string goodPath{"proc/10000"}; int id = -1; EXPECT_TRUE(metric_blob::isNumericPath(goodPath, id)); EXPECT_EQ(id, 10000); } TEST(ReadFileThenGrepIntoString, goodFile) { const std::string& fileName = "./test_file"; std::ofstream ofs(fileName, std::ios::trunc); std::string_view content = "This is\ntest\tcontentt\n\n\n\n.\n\n##$#$"; ofs << content; ofs.close(); std::string readContent = metric_blob::readFileThenGrepIntoString(fileName); std::filesystem::remove(fileName); EXPECT_EQ(readContent, content); } TEST(ReadFileThenGrepIntoString, inexistentFile) { const std::string& fileName = "./inexistent_file"; std::string readContent = metric_blob::readFileThenGrepIntoString(fileName); EXPECT_EQ(readContent, ""); } TEST(GetTcommUtimeStime, validInput) { // ticks_per_sec is usually 100 on the BMC const long ticksPerSec = 100; const std::string_view content = "2596 (dbus-broker) R 2577 2577 2577 0 -1 " "4194560 299 0 1 0 333037 246110 0 0 20 0 " "1 0 1545 3411968 530 4294967295 65536 " "246512 2930531712 0 0 0 81923 4"; metric_blob::TcommUtimeStime t = metric_blob::parseTcommUtimeStimeString(content, ticksPerSec); const float EPS = 0.01; // The difference was 0.000117188 EXPECT_LT(std::abs(t.utime - 3330.37), EPS); EXPECT_LT(std::abs(t.stime - 2461.10), EPS); EXPECT_EQ(t.tcomm, "(dbus-broker)"); } TEST(GetTcommUtimeStime, invalidInput) { // ticks_per_sec is usually 100 on the BMC const long ticksPerSec = 100; const std::string_view content = "x invalid x x x x x x x x x x x x x x x x x x x x x x x x x x x"; metric_blob::TcommUtimeStime t = metric_blob::parseTcommUtimeStimeString(content, ticksPerSec); EXPECT_EQ(t.utime, 0); EXPECT_EQ(t.stime, 0); EXPECT_EQ(t.tcomm, "invalid"); } TEST(ParseMeminfoValue, validInput) { const std::string_view content = "MemTotal: 1027040 kB\n" "MemFree: 868144 kB\n" "MemAvailable: 919308 kB\n" "Buffers: 13008 kB\n" "Cached: 82840 kB\n" "SwapCached: 0 kB\n" "Active: 62076 kB\n"; int value; EXPECT_TRUE(metric_blob::parseMeminfoValue(content, "MemTotal:", value)); EXPECT_EQ(value, 1027040); EXPECT_TRUE(metric_blob::parseMeminfoValue(content, "MemFree:", value)); EXPECT_EQ(value, 868144); EXPECT_TRUE( metric_blob::parseMeminfoValue(content, "MemAvailable:", value)); EXPECT_EQ(value, 919308); EXPECT_TRUE(metric_blob::parseMeminfoValue(content, "Buffers:", value)); EXPECT_EQ(value, 13008); EXPECT_TRUE(metric_blob::parseMeminfoValue(content, "Cached:", value)); EXPECT_EQ(value, 82840); EXPECT_TRUE(metric_blob::parseMeminfoValue(content, "SwapCached:", value)); EXPECT_EQ(value, 0); EXPECT_TRUE(metric_blob::parseMeminfoValue(content, "Active:", value)); EXPECT_EQ(value, 62076); } TEST(ParseMeminfoValue, invalidInput) { const std::string_view invalid = "MemTotal: 1"; int value = -999; EXPECT_FALSE(metric_blob::parseMeminfoValue(invalid, "MemTotal:", value)); EXPECT_EQ(value, -999); EXPECT_FALSE(metric_blob::parseMeminfoValue(invalid, "x", value)); EXPECT_EQ(value, -999); } TEST(ParseProcUptime, validInput) { const std::string_view content = "266923.67 512184.95"; const double eps = 1e-4; // Empirical threshold for floating point number compare double uptime, idleProcessTime; EXPECT_EQ(metric_blob::parseProcUptime(content, uptime, idleProcessTime), true); EXPECT_LT(abs(uptime - 266923.67), eps); EXPECT_LT(abs(idleProcessTime - 512184.95), eps); } TEST(TrimStringRight, nonEmptyResult) { EXPECT_EQ( metric_blob::trimStringRight("\n\nabc\n\t\r\x00\x01\x02\x03").size(), 5); // "\n\nabc" is left } TEST(TrimStringRight, trimToEmpty) { EXPECT_TRUE(metric_blob::trimStringRight(" ").empty()); EXPECT_TRUE(metric_blob::trimStringRight("").empty()); } int main(int argc, char** argv) { ::testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); }