| #include "version.hpp" |
| |
| #include <filesystem> |
| #include <fstream> |
| |
| #include <gtest/gtest.h> |
| |
| using phosphor::software::updater::Version; |
| |
| namespace fs = std::filesystem; |
| |
| namespace |
| { |
| constexpr auto validManifest = R"( |
| purpose=xyz.openbmc_project.Software.Version.VersionPurpose.PSU |
| version=psu-dummy-test.v0.1 |
| extended_version=model=dummy_model,manufacturer=dummy_manufacturer)"; |
| } |
| |
| constexpr auto validManifestWithCRLF = |
| "\r\n" |
| "purpose=xyz.openbmc_project.Software.Version.VersionPurpose.PSU\r\n" |
| "version=psu-dummy-test.v0.1\r\n" |
| "extended_version=model=dummy_model,manufacturer=dummy_manufacturer\r\n"; |
| |
| class TestVersion : public ::testing::Test |
| { |
| public: |
| TestVersion() |
| { |
| auto tmpPath = fs::temp_directory_path(); |
| tmpDir = (tmpPath / "test_XXXXXX"); |
| if (!mkdtemp(tmpDir.data())) |
| { |
| throw "Failed to create temp dir"; |
| } |
| } |
| ~TestVersion() |
| { |
| fs::remove_all(tmpDir); |
| } |
| |
| void writeFile(const fs::path& file, const char* data) |
| { |
| std::ofstream f{file}; |
| f << data; |
| f.close(); |
| } |
| std::string tmpDir; |
| }; |
| |
| TEST_F(TestVersion, getValuesFileNotExist) |
| { |
| auto ret = Version::getValues("NotExist.file", {""}); |
| EXPECT_TRUE(ret.empty()); |
| } |
| |
| TEST_F(TestVersion, getValuesOK) |
| { |
| auto manifestFilePath = fs::path(tmpDir) / "MANIFEST"; |
| writeFile(manifestFilePath, validManifest); |
| auto ret = Version::getValues(manifestFilePath.string(), |
| {"purpose", "version", "extended_version"}); |
| EXPECT_EQ(3u, ret.size()); |
| auto purpose = ret["purpose"]; |
| auto version = ret["version"]; |
| auto extVersion = ret["extended_version"]; |
| |
| EXPECT_EQ("xyz.openbmc_project.Software.Version.VersionPurpose.PSU", |
| purpose); |
| EXPECT_EQ("psu-dummy-test.v0.1", version); |
| EXPECT_EQ("model=dummy_model,manufacturer=dummy_manufacturer", extVersion); |
| } |
| |
| TEST_F(TestVersion, getExtVersionInfo) |
| { |
| std::string extVersion = ""; |
| auto ret = Version::getExtVersionInfo(extVersion); |
| EXPECT_TRUE(ret.empty()); |
| |
| extVersion = "manufacturer=TestManu,model=TestModel"; |
| ret = Version::getExtVersionInfo(extVersion); |
| EXPECT_EQ(2u, ret.size()); |
| EXPECT_EQ("TestManu", ret["manufacturer"]); |
| EXPECT_EQ("TestModel", ret["model"]); |
| } |
| |
| TEST_F(TestVersion, getValuesOKonCRLFFormat) |
| { |
| auto manifestFilePath = fs::path(tmpDir) / "MANIFEST"; |
| writeFile(manifestFilePath, validManifestWithCRLF); |
| auto ret = Version::getValues(manifestFilePath.string(), |
| {"purpose", "version", "extended_version"}); |
| EXPECT_EQ(3u, ret.size()); |
| auto purpose = ret["purpose"]; |
| auto version = ret["version"]; |
| auto extVersion = ret["extended_version"]; |
| |
| EXPECT_EQ("xyz.openbmc_project.Software.Version.VersionPurpose.PSU", |
| purpose); |
| EXPECT_EQ("psu-dummy-test.v0.1", version); |
| EXPECT_EQ("model=dummy_model,manufacturer=dummy_manufacturer", extVersion); |
| } |