blob: 274ea14954ce30854132720c53818ccdd8014f54 [file] [log] [blame]
Benjamin Faira67e9e92019-11-15 14:47:42 -08001#include "firmware_handler.hpp"
2#include "flags.hpp"
3#include "image_mock.hpp"
4#include "triggerable_mock.hpp"
5#include "util.hpp"
6
7#include <memory>
8#include <utility>
9#include <vector>
10
11#include <gtest/gtest.h>
12
13namespace ipmi_flash
14{
15namespace
16{
17
18class FirmwareOpenFailTest : public ::testing::TestWithParam<std::uint16_t>
Patrick Venture9b37b092020-05-28 20:58:57 -070019{};
Benjamin Faira67e9e92019-11-15 14:47:42 -080020
21TEST_P(FirmwareOpenFailTest, WithFlags)
22{
Patrick Venture4934daa2020-09-22 16:37:44 -070023 std::vector<DataHandlerPack> data;
24 data.emplace_back(FirmwareFlags::UpdateFlags::ipmi, nullptr);
25 data.emplace_back(FirmwareFlags::UpdateFlags::p2a, nullptr);
26 data.emplace_back(FirmwareFlags::UpdateFlags::lpc, nullptr);
Benjamin Faira67e9e92019-11-15 14:47:42 -080027
28 std::vector<HandlerPack> blobs;
Patrick Venturec6ba8ff2020-09-23 12:42:57 -070029 blobs.emplace_back(hashBlobId, std::make_unique<ImageHandlerMock>());
30 blobs.emplace_back("asdf", std::make_unique<ImageHandlerMock>());
Benjamin Faira67e9e92019-11-15 14:47:42 -080031
32 auto handler = FirmwareBlobHandler::CreateFirmwareBlobHandler(
Patrick Ventureda4d4a42020-09-28 11:41:05 -070033 std::move(blobs), std::move(data), CreateActionMap("asdf"));
Benjamin Faira67e9e92019-11-15 14:47:42 -080034
35 EXPECT_FALSE(handler->open(0, GetParam(), "asdf"));
36}
37
38const std::vector<std::uint16_t> OpenFailParams{
39 /* These first 4 fail because they don't have the "write" flag */
40 0b000 << 8,
41 0b110 << 8,
42 0b101 << 8,
43 0b011 << 8,
44 /* Next 1 doesn't specify any transport */
45 blobs::OpenFlags::write | 0b000 << 8,
46 /* Next 3 specify 2 reserved transport bits at the same time. This isn't
47 * allowed because older code expects these first 3 bits to be mutually
48 * exclusive.
49 */
50 blobs::OpenFlags::write | 0b110 << 8,
51 blobs::OpenFlags::write | 0b101 << 8,
52 blobs::OpenFlags::write | 0b011 << 8,
53};
54
55INSTANTIATE_TEST_CASE_P(WithFlags, FirmwareOpenFailTest,
56 ::testing::ValuesIn(OpenFailParams));
57
58} // namespace
59} // namespace ipmi_flash