#include "ipmi.hpp"

#include <blobs-ipmid/test/manager_mock.hpp>
#include <vector>

#include <gtest/gtest.h>

namespace blobs
{

TEST(IpmiValidateTest, VerifyCommandMinimumLengths)
{

    struct TestCase
    {
        BlobOEMCommands cmd;
        size_t len;
        bool expect;
    };

    std::vector<TestCase> tests = {
        {BlobOEMCommands::bmcBlobClose, sizeof(struct BmcBlobCloseTx) - 1,
         false},
        {BlobOEMCommands::bmcBlobCommit, sizeof(struct BmcBlobCommitTx) - 1,
         false},
        {BlobOEMCommands::bmcBlobDelete, sizeof(struct BmcBlobDeleteTx) + 1,
         false},
        {BlobOEMCommands::bmcBlobEnumerate,
         sizeof(struct BmcBlobEnumerateTx) - 1, false},
        {BlobOEMCommands::bmcBlobOpen, sizeof(struct BmcBlobOpenTx) + 1, false},
        {BlobOEMCommands::bmcBlobRead, sizeof(struct BmcBlobReadTx) - 1, false},
        {BlobOEMCommands::bmcBlobSessionStat,
         sizeof(struct BmcBlobSessionStatTx) - 1, false},
        {BlobOEMCommands::bmcBlobStat, sizeof(struct BmcBlobStatTx) + 1, false},
        {BlobOEMCommands::bmcBlobWrite, sizeof(struct BmcBlobWriteTx), false},
    };

    for (const auto& test : tests)
    {
        bool result = validateRequestLength(test.cmd, test.len);
        EXPECT_EQ(result, test.expect);
    }
}
} // namespace blobs
