#include "version.hpp"

#include <openssl/evp.h>

#include <gtest/gtest.h>

using namespace openpower::software::updater;

using EVP_MD_CTX_Ptr =
    std::unique_ptr<EVP_MD_CTX, decltype(&::EVP_MD_CTX_free)>;

/** @brief Make sure we correctly get the Id from getId()*/
TEST(VersionTest, TestGetId)
{
    auto version = "test-id";
    unsigned char digest[EVP_MAX_MD_SIZE];
    unsigned int digest_count = 0;

    EVP_MD_CTX_Ptr ctx(EVP_MD_CTX_new(), &::EVP_MD_CTX_free);

    EVP_DigestInit(ctx.get(), EVP_sha512());
    EVP_DigestUpdate(ctx.get(), version, strlen(version));
    EVP_DigestFinal(ctx.get(), digest, &digest_count);

    char mdString[EVP_MAX_MD_SIZE * 2 + 1];
    for (decltype(digest_count) i = 0; i < digest_count; 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);
}

TEST(VersionTest, GetVersions)
{
    constexpr auto versionString =
        "open-power-romulus-v2.2-rc1-48-g268344f-dirty\n"
        "\tbuildroot-2018.11.1-7-g5d7cc8c\n"
        "\tskiboot-v6.2\n"
        "\thostboot-3f1f218-pea87ca7\n"
        "\tocc-12c8088\n"
        "\tlinux-4.19.13-openpower1-p8031295\n"
        "\tpetitboot-1.9.2\n"
        "\tmachine-xml-7410460\n"
        "\thostboot-binaries-hw121518a.930\n"
        "\tcapp-ucode-p9-dd2-v4\n"
        "\tsbe-cf61dc3\n"
        "\thcode-hw123119a.930";

    const auto& [version,
                 extendedVersion] = Version::getVersions(versionString);
    EXPECT_EQ(version, "open-power-romulus-v2.2-rc1-48-g268344f-dirty");
    EXPECT_EQ(extendedVersion, "buildroot-2018.11.1-7-g5d7cc8c,"
                               "skiboot-v6.2,"
                               "hostboot-3f1f218-pea87ca7,"
                               "occ-12c8088,"
                               "linux-4.19.13-openpower1-p8031295,"
                               "petitboot-1.9.2,"
                               "machine-xml-7410460,"
                               "hostboot-binaries-hw121518a.930,"
                               "capp-ucode-p9-dd2-v4,"
                               "sbe-cf61dc3,"
                               "hcode-hw123119a.930");
}
