1 #include "version.hpp" 2 3 #include <filesystem> 4 #include <fstream> 5 6 #include <gtest/gtest.h> 7 8 using phosphor::software::updater::Version; 9 10 namespace fs = std::filesystem; 11 12 namespace 13 { 14 constexpr auto validManifest = R"( 15 purpose=xyz.openbmc_project.Software.Version.VersionPurpose.PSU 16 version=psu-dummy-test.v0.1 17 extended_version=model=dummy_model,manufacturer=dummy_manufacturer)"; 18 } 19 20 constexpr auto validManifestWithCRLF = 21 "\r\n" 22 "purpose=xyz.openbmc_project.Software.Version.VersionPurpose.PSU\r\n" 23 "version=psu-dummy-test.v0.1\r\n" 24 "extended_version=model=dummy_model,manufacturer=dummy_manufacturer\r\n"; 25 26 class TestVersion : public ::testing::Test 27 { 28 public: 29 TestVersion() 30 { 31 auto tmpPath = fs::temp_directory_path(); 32 tmpDir = (tmpPath / "test_XXXXXX"); 33 if (!mkdtemp(tmpDir.data())) 34 { 35 throw "Failed to create temp dir"; 36 } 37 } 38 ~TestVersion() 39 { 40 fs::remove_all(tmpDir); 41 } 42 43 void writeFile(const fs::path& file, const char* data) 44 { 45 std::ofstream f{file}; 46 f << data; 47 f.close(); 48 } 49 std::string tmpDir; 50 }; 51 52 TEST_F(TestVersion, getValuesFileNotExist) 53 { 54 auto ret = Version::getValues("NotExist.file", {""}); 55 EXPECT_TRUE(ret.empty()); 56 } 57 58 TEST_F(TestVersion, getValuesOK) 59 { 60 auto manifestFilePath = fs::path(tmpDir) / "MANIFEST"; 61 writeFile(manifestFilePath, validManifest); 62 auto ret = Version::getValues(manifestFilePath.string(), 63 {"purpose", "version", "extended_version"}); 64 EXPECT_EQ(3u, ret.size()); 65 auto purpose = ret["purpose"]; 66 auto version = ret["version"]; 67 auto extVersion = ret["extended_version"]; 68 69 EXPECT_EQ("xyz.openbmc_project.Software.Version.VersionPurpose.PSU", 70 purpose); 71 EXPECT_EQ("psu-dummy-test.v0.1", version); 72 EXPECT_EQ("model=dummy_model,manufacturer=dummy_manufacturer", extVersion); 73 } 74 75 TEST_F(TestVersion, getExtVersionInfo) 76 { 77 std::string extVersion = ""; 78 auto ret = Version::getExtVersionInfo(extVersion); 79 EXPECT_TRUE(ret.empty()); 80 81 extVersion = "manufacturer=TestManu,model=TestModel"; 82 ret = Version::getExtVersionInfo(extVersion); 83 EXPECT_EQ(2u, ret.size()); 84 EXPECT_EQ("TestManu", ret["manufacturer"]); 85 EXPECT_EQ("TestModel", ret["model"]); 86 } 87 88 TEST_F(TestVersion, getValuesOKonCRLFFormat) 89 { 90 auto manifestFilePath = fs::path(tmpDir) / "MANIFEST"; 91 writeFile(manifestFilePath, validManifestWithCRLF); 92 auto ret = Version::getValues(manifestFilePath.string(), 93 {"purpose", "version", "extended_version"}); 94 EXPECT_EQ(3u, ret.size()); 95 auto purpose = ret["purpose"]; 96 auto version = ret["version"]; 97 auto extVersion = ret["extended_version"]; 98 99 EXPECT_EQ("xyz.openbmc_project.Software.Version.VersionPurpose.PSU", 100 purpose); 101 EXPECT_EQ("psu-dummy-test.v0.1", version); 102 EXPECT_EQ("model=dummy_model,manufacturer=dummy_manufacturer", extVersion); 103 } 104