blob: 2b1a3305ec2b6fef26dbe8c112c0f5c2175edf3b [file] [log] [blame]
#include "data_mock.hpp"
#include "firmware_handler.hpp"
#include "image_mock.hpp"
#include <memory>
#include <vector>
#include <gmock/gmock.h>
#include <gtest/gtest.h>
namespace blobs
{
using ::testing::Return;
TEST(FirmwareHandlerOpenTest, OpenWithEverythingValid)
{
/* The client passes write set, and a transport that's supported, and a
* firmware image blob_id that's supported. */
ImageHandlerMock imageMock;
std::vector<HandlerPack> blobs = {
{FirmwareBlobHandler::hashBlobID, &imageMock},
{"asdf", &imageMock},
};
std::vector<DataHandlerPack> data = {
{FirmwareBlobHandler::FirmwareUpdateFlags::ipmi, nullptr},
};
auto handler = FirmwareBlobHandler::CreateFirmwareBlobHandler(blobs, data);
EXPECT_CALL(imageMock, open("asdf")).WillOnce(Return(true));
EXPECT_TRUE(handler->open(
0, OpenFlags::write | FirmwareBlobHandler::FirmwareUpdateFlags::ipmi,
"asdf"));
}
TEST(FirmwareHandlerOpenTest, OpenWithEverythingValidImageHandlerFails)
{
/* The image handler for a specific type of image is allowed to return
* failure on open. let's simulate that. */
ImageHandlerMock imageMock;
std::vector<HandlerPack> blobs = {
{FirmwareBlobHandler::hashBlobID, &imageMock},
{"asdf", &imageMock},
};
std::vector<DataHandlerPack> data = {
{FirmwareBlobHandler::FirmwareUpdateFlags::ipmi, nullptr},
};
auto handler = FirmwareBlobHandler::CreateFirmwareBlobHandler(blobs, data);
EXPECT_CALL(imageMock, open("asdf")).WillOnce(Return(false));
EXPECT_FALSE(handler->open(
0, OpenFlags::write | FirmwareBlobHandler::FirmwareUpdateFlags::ipmi,
"asdf"));
}
TEST(FirmwareHandlerOpenTest, OpenWithoutWriteFails)
{
/* The client must set the file write bit. */
ImageHandlerMock imageMock;
std::vector<HandlerPack> blobs = {
{FirmwareBlobHandler::hashBlobID, &imageMock},
{"asdf", &imageMock},
};
std::vector<DataHandlerPack> data = {
{FirmwareBlobHandler::FirmwareUpdateFlags::ipmi, nullptr},
};
auto handler = FirmwareBlobHandler::CreateFirmwareBlobHandler(blobs, data);
EXPECT_FALSE(handler->open(
0, FirmwareBlobHandler::FirmwareUpdateFlags::ipmi, "asdf"));
}
TEST(FirmwareHandlerOpenTest, OpenWithInvalidTransportBit)
{
/* The client sends a request with a transport mechanism not supported. */
ImageHandlerMock imageMock;
std::vector<HandlerPack> blobs = {
{FirmwareBlobHandler::hashBlobID, &imageMock},
{"asdf", &imageMock},
};
std::vector<DataHandlerPack> data = {
{FirmwareBlobHandler::FirmwareUpdateFlags::ipmi, nullptr},
};
auto handler = FirmwareBlobHandler::CreateFirmwareBlobHandler(blobs, data);
EXPECT_FALSE(handler->open(0, FirmwareBlobHandler::FirmwareUpdateFlags::lpc,
"asdf"));
}
TEST(FirmwareHandlerOpenTest, OpenWithInvalidImageBlobId)
{
/* The client sends a request with an invalid image blob_id. */
ImageHandlerMock imageMock;
std::vector<HandlerPack> blobs = {
{FirmwareBlobHandler::hashBlobID, &imageMock},
{"asdf", &imageMock},
};
std::vector<DataHandlerPack> data = {
{FirmwareBlobHandler::FirmwareUpdateFlags::ipmi, nullptr},
};
auto handler = FirmwareBlobHandler::CreateFirmwareBlobHandler(blobs, data);
EXPECT_FALSE(handler->open(
0, OpenFlags::write | FirmwareBlobHandler::FirmwareUpdateFlags::ipmi,
"bcdf"));
}
/* TODO: The client sends a request during verification. */
/* TODO: The client sends a second request to open when there is already an open
* file.
*/
/* TODO: The client sends a request to open active image. */
/* TODO: The client sends a request to open active hash. */
} // namespace blobs