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,manufacture=dummy_manufacture)";
18 }
19 
20 class TestVersion : public ::testing::Test
21 {
22   public:
23     TestVersion()
24     {
25         auto tmpPath = fs::temp_directory_path();
26         tmpDir = (tmpPath / "test_XXXXXX");
27         if (!mkdtemp(tmpDir.data()))
28         {
29             throw "Failed to create temp dir";
30         }
31     }
32     ~TestVersion()
33     {
34         fs::remove_all(tmpDir);
35     }
36 
37     void writeFile(const fs::path& file, const char* data)
38     {
39         std::ofstream f{file};
40         f << data;
41         f.close();
42     }
43     std::string tmpDir;
44 };
45 
46 TEST_F(TestVersion, getValuesFileNotExist)
47 {
48     auto ret = Version::getValues("NotExist.file", {""});
49     EXPECT_TRUE(ret.empty());
50 }
51 
52 TEST_F(TestVersion, getValuesOK)
53 {
54     auto manifestFilePath = fs::path(tmpDir) / "MANIFEST";
55     writeFile(manifestFilePath, validManifest);
56     auto ret = Version::getValues(manifestFilePath.string(),
57                                   {"purpose", "version", "extended_version"});
58     EXPECT_EQ(3u, ret.size());
59     auto purpose = ret["purpose"];
60     auto version = ret["version"];
61     auto extVersion = ret["extended_version"];
62 
63     EXPECT_EQ("xyz.openbmc_project.Software.Version.VersionPurpose.PSU",
64               purpose);
65     EXPECT_EQ("psu-dummy-test.v0.1", version);
66     EXPECT_EQ("model=dummy_model,manufacture=dummy_manufacture", extVersion);
67 }
68 
69 TEST_F(TestVersion, getExtVersionInfo)
70 {
71     std::string extVersion = "";
72     auto ret = Version::getExtVersionInfo(extVersion);
73     EXPECT_TRUE(ret.empty());
74 
75     extVersion = "manufacturer=TestManu,model=TestModel";
76     ret = Version::getExtVersionInfo(extVersion);
77     EXPECT_EQ(2u, ret.size());
78     EXPECT_EQ("TestManu", ret["manufacturer"]);
79     EXPECT_EQ("TestModel", ret["model"]);
80 }
81