#include "version.hpp" #include #include #include #include #include #include #include #include using namespace phosphor::software::manager; namespace fs = std::experimental::filesystem; class VersionTest : public testing::Test { protected: virtual void SetUp() { char versionDir[] = "./versionXXXXXX"; _directory = mkdtemp(versionDir); if (_directory.empty()) { throw std::bad_alloc(); } } virtual void TearDown() { fs::remove_all(_directory); } std::string _directory; }; /** @brief Make sure we correctly get the version and purpose from getValue()*/ TEST_F(VersionTest, TestGetValue) { auto manifestFilePath = _directory + "/" + "MANIFEST"; auto version = "test-version"; auto purpose = "BMC"; std::ofstream file; file.open(manifestFilePath, std::ofstream::out); ASSERT_TRUE(file.is_open()); file << "version=" << version << std::endl; file << "purpose=" << purpose << std::endl; file.close(); EXPECT_EQ(Version::getValue(manifestFilePath, "version"), version); EXPECT_EQ(Version::getValue(manifestFilePath, "purpose"), purpose); } /** @brief Make sure we correctly get the Id from getId()*/ TEST_F(VersionTest, TestGetId) { auto version = "test-id"; unsigned char digest[SHA512_DIGEST_LENGTH]; SHA512_CTX ctx; SHA512_Init(&ctx); SHA512_Update(&ctx, version, strlen(version)); SHA512_Final(digest, &ctx); char mdString[SHA512_DIGEST_LENGTH*2+1]; for (int i = 0; i < SHA512_DIGEST_LENGTH; i++) { snprintf(&mdString[i*2], 3, "%02x", (unsigned int)digest[i]); } std::string hexId = std::string(mdString); hexId = hexId.substr(0, 8); EXPECT_EQ(Version::getId(version), hexId); }