blob: 202c054166c580768f1f7513760839f7ff27a39e [file] [log] [blame]
Patrick Venture72388d72018-11-07 15:06:36 -08001#include "data_mock.hpp"
2#include "firmware_handler.hpp"
3#include "image_mock.hpp"
4
Patrick Venture72388d72018-11-07 15:06:36 -08005#include <vector>
6
7#include <gmock/gmock.h>
8#include <gtest/gtest.h>
9
10namespace blobs
11{
12using ::testing::Return;
13
14TEST(FirmwareHandlerOpenTest, OpenWithEverythingValid)
15{
16 /* The client passes write set, and a transport that's supported, and a
17 * firmware image blob_id that's supported. */
18
19 ImageHandlerMock imageMock;
20
21 std::vector<HandlerPack> blobs = {
Patrick Venture18235e62018-11-08 10:21:09 -080022 {FirmwareBlobHandler::hashBlobID, &imageMock},
Patrick Venture72388d72018-11-07 15:06:36 -080023 {"asdf", &imageMock},
24 };
25 std::vector<DataHandlerPack> data = {
Patrick Venture05abf7e2018-11-09 11:02:56 -080026 {FirmwareBlobHandler::UpdateFlags::ipmi, nullptr},
Patrick Venture72388d72018-11-07 15:06:36 -080027 };
28
29 auto handler = FirmwareBlobHandler::CreateFirmwareBlobHandler(blobs, data);
30
31 EXPECT_CALL(imageMock, open("asdf")).WillOnce(Return(true));
32
33 EXPECT_TRUE(handler->open(
Patrick Venture05abf7e2018-11-09 11:02:56 -080034 0, OpenFlags::write | FirmwareBlobHandler::UpdateFlags::ipmi, "asdf"));
Patrick Venture72388d72018-11-07 15:06:36 -080035}
36
37TEST(FirmwareHandlerOpenTest, OpenWithEverythingValidImageHandlerFails)
38{
39 /* The image handler for a specific type of image is allowed to return
40 * failure on open. let's simulate that. */
41
42 ImageHandlerMock imageMock;
43
44 std::vector<HandlerPack> blobs = {
Patrick Venture18235e62018-11-08 10:21:09 -080045 {FirmwareBlobHandler::hashBlobID, &imageMock},
Patrick Venture72388d72018-11-07 15:06:36 -080046 {"asdf", &imageMock},
47 };
48 std::vector<DataHandlerPack> data = {
Patrick Venture05abf7e2018-11-09 11:02:56 -080049 {FirmwareBlobHandler::UpdateFlags::ipmi, nullptr},
Patrick Venture72388d72018-11-07 15:06:36 -080050 };
51
52 auto handler = FirmwareBlobHandler::CreateFirmwareBlobHandler(blobs, data);
53
54 EXPECT_CALL(imageMock, open("asdf")).WillOnce(Return(false));
55
56 EXPECT_FALSE(handler->open(
Patrick Venture05abf7e2018-11-09 11:02:56 -080057 0, OpenFlags::write | FirmwareBlobHandler::UpdateFlags::ipmi, "asdf"));
Patrick Venture72388d72018-11-07 15:06:36 -080058}
59
60TEST(FirmwareHandlerOpenTest, OpenWithoutWriteFails)
61{
62 /* The client must set the file write bit. */
63
64 ImageHandlerMock imageMock;
65
66 std::vector<HandlerPack> blobs = {
Patrick Venture18235e62018-11-08 10:21:09 -080067 {FirmwareBlobHandler::hashBlobID, &imageMock},
Patrick Venture72388d72018-11-07 15:06:36 -080068 {"asdf", &imageMock},
69 };
70 std::vector<DataHandlerPack> data = {
Patrick Venture05abf7e2018-11-09 11:02:56 -080071 {FirmwareBlobHandler::UpdateFlags::ipmi, nullptr},
Patrick Venture72388d72018-11-07 15:06:36 -080072 };
73
74 auto handler = FirmwareBlobHandler::CreateFirmwareBlobHandler(blobs, data);
75
Patrick Venture05abf7e2018-11-09 11:02:56 -080076 EXPECT_FALSE(
77 handler->open(0, FirmwareBlobHandler::UpdateFlags::ipmi, "asdf"));
Patrick Venture72388d72018-11-07 15:06:36 -080078}
79
80TEST(FirmwareHandlerOpenTest, OpenWithInvalidTransportBit)
81{
82 /* The client sends a request with a transport mechanism not supported. */
83
84 ImageHandlerMock imageMock;
85
86 std::vector<HandlerPack> blobs = {
Patrick Venture18235e62018-11-08 10:21:09 -080087 {FirmwareBlobHandler::hashBlobID, &imageMock},
Patrick Venture72388d72018-11-07 15:06:36 -080088 {"asdf", &imageMock},
89 };
90 std::vector<DataHandlerPack> data = {
Patrick Venture05abf7e2018-11-09 11:02:56 -080091 {FirmwareBlobHandler::UpdateFlags::ipmi, nullptr},
Patrick Venture72388d72018-11-07 15:06:36 -080092 };
93
94 auto handler = FirmwareBlobHandler::CreateFirmwareBlobHandler(blobs, data);
95
Patrick Venture05abf7e2018-11-09 11:02:56 -080096 EXPECT_FALSE(
97 handler->open(0, FirmwareBlobHandler::UpdateFlags::lpc, "asdf"));
Patrick Venture72388d72018-11-07 15:06:36 -080098}
99
100TEST(FirmwareHandlerOpenTest, OpenWithInvalidImageBlobId)
101{
102 /* The client sends a request with an invalid image blob_id. */
103
104 ImageHandlerMock imageMock;
105
106 std::vector<HandlerPack> blobs = {
Patrick Venture18235e62018-11-08 10:21:09 -0800107 {FirmwareBlobHandler::hashBlobID, &imageMock},
Patrick Venture72388d72018-11-07 15:06:36 -0800108 {"asdf", &imageMock},
109 };
110 std::vector<DataHandlerPack> data = {
Patrick Venture05abf7e2018-11-09 11:02:56 -0800111 {FirmwareBlobHandler::UpdateFlags::ipmi, nullptr},
Patrick Venture72388d72018-11-07 15:06:36 -0800112 };
113
114 auto handler = FirmwareBlobHandler::CreateFirmwareBlobHandler(blobs, data);
115
116 EXPECT_FALSE(handler->open(
Patrick Venture05abf7e2018-11-09 11:02:56 -0800117 0, OpenFlags::write | FirmwareBlobHandler::UpdateFlags::ipmi, "bcdf"));
Patrick Venture72388d72018-11-07 15:06:36 -0800118}
119
120/* TODO: The client sends a request during verification. */
121/* TODO: The client sends a second request to open when there is already an open
122 * file.
123 */
124/* TODO: The client sends a request to open active image. */
125/* TODO: The client sends a request to open active hash. */
126
127} // namespace blobs