blob: f7f729a6be86ea83fd60209567f5d270e2949e30 [file] [log] [blame]
Patrick Venture68bb1432018-11-09 20:08:48 -08001#include "data_mock.hpp"
2#include "firmware_handler.hpp"
3#include "image_mock.hpp"
Patrick Venture7dad86f2019-05-17 08:52:20 -07004#include "util.hpp"
Patrick Venture3ecb3502019-05-17 11:03:51 -07005#include "verification_mock.hpp"
Patrick Venture68bb1432018-11-09 20:08:48 -08006
Patrick Venture79412582019-05-17 17:34:45 -07007#include <memory>
Patrick Venture68bb1432018-11-09 20:08:48 -08008#include <vector>
9
10#include <gmock/gmock.h>
11#include <gtest/gtest.h>
12
13namespace blobs
14{
15using ::testing::Eq;
16using ::testing::Return;
17using ::testing::StrEq;
18
Patrick Venture79412582019-05-17 17:34:45 -070019class FirmwareHandlerCloseTest : public ::testing::Test
Patrick Venture68bb1432018-11-09 20:08:48 -080020{
Patrick Venture79412582019-05-17 17:34:45 -070021 protected:
Patrick Venture68bb1432018-11-09 20:08:48 -080022 DataHandlerMock dataMock;
23 ImageHandlerMock imageMock;
24
25 std::vector<HandlerPack> blobs = {
Patrick Venture7dad86f2019-05-17 08:52:20 -070026 {hashBlobId, &imageMock},
Patrick Venture68bb1432018-11-09 20:08:48 -080027 {"asdf", &imageMock},
28 };
29 std::vector<DataHandlerPack> data = {
30 {FirmwareBlobHandler::UpdateFlags::ipmi, nullptr},
31 {FirmwareBlobHandler::UpdateFlags::lpc, &dataMock},
32 };
33
Patrick Venture79412582019-05-17 17:34:45 -070034 std::unique_ptr<GenericBlobInterface> handler;
Patrick Venture68bb1432018-11-09 20:08:48 -080035
Patrick Venture79412582019-05-17 17:34:45 -070036 void SetUp() override
37 {
38 handler = FirmwareBlobHandler::CreateFirmwareBlobHandler(
39 blobs, data, CreateVerifyMock());
40 }
41};
42
43TEST_F(FirmwareHandlerCloseTest, CloseSucceedsWithDataHandler)
44{
45 /* Boring test where you open a blob_id, then verify that when it's closed
46 * everything looks right.
47 */
Patrick Venture68bb1432018-11-09 20:08:48 -080048 EXPECT_CALL(dataMock, open()).WillOnce(Return(true));
Patrick Venture7dad86f2019-05-17 08:52:20 -070049 EXPECT_CALL(imageMock, open(StrEq(hashBlobId))).WillOnce(Return(true));
Patrick Venture68bb1432018-11-09 20:08:48 -080050
51 EXPECT_TRUE(handler->open(
52 0, OpenFlags::write | FirmwareBlobHandler::UpdateFlags::lpc,
Patrick Venture7dad86f2019-05-17 08:52:20 -070053 hashBlobId));
Patrick Venture68bb1432018-11-09 20:08:48 -080054
55 /* The active hash blob_id was added. */
56 auto currentBlobs = handler->getBlobIds();
Patrick Ventureffcc5502018-11-16 12:32:38 -080057 EXPECT_EQ(4, currentBlobs.size());
Patrick Venture68bb1432018-11-09 20:08:48 -080058 EXPECT_EQ(1, std::count(currentBlobs.begin(), currentBlobs.end(),
Patrick Venture7dad86f2019-05-17 08:52:20 -070059 activeHashBlobId));
Patrick Venture68bb1432018-11-09 20:08:48 -080060
61 /* Set up close() expectations. */
62 EXPECT_CALL(dataMock, close());
63 EXPECT_CALL(imageMock, close());
64 EXPECT_TRUE(handler->close(0));
65
66 /* Close does not delete the active blob id. This indicates that there is
67 * data queued.
68 */
69}
70
Patrick Venture79412582019-05-17 17:34:45 -070071TEST_F(FirmwareHandlerCloseTest, CloseSucceedsWithoutDataHandler)
Patrick Venture68bb1432018-11-09 20:08:48 -080072{
73 /* Boring test where you open a blob_id using ipmi, so there's no data
74 * handler, and it's closed and everything looks right.
75 */
Patrick Venture7dad86f2019-05-17 08:52:20 -070076 EXPECT_CALL(imageMock, open(StrEq(hashBlobId))).WillOnce(Return(true));
Patrick Venture68bb1432018-11-09 20:08:48 -080077
78 EXPECT_TRUE(handler->open(
79 0, OpenFlags::write | FirmwareBlobHandler::UpdateFlags::ipmi,
Patrick Venture7dad86f2019-05-17 08:52:20 -070080 hashBlobId));
Patrick Venture68bb1432018-11-09 20:08:48 -080081
82 /* The active hash blob_id was added. */
83 auto currentBlobs = handler->getBlobIds();
Patrick Ventureffcc5502018-11-16 12:32:38 -080084 EXPECT_EQ(4, currentBlobs.size());
Patrick Venture68bb1432018-11-09 20:08:48 -080085 EXPECT_EQ(1, std::count(currentBlobs.begin(), currentBlobs.end(),
Patrick Venture7dad86f2019-05-17 08:52:20 -070086 activeHashBlobId));
Patrick Venture68bb1432018-11-09 20:08:48 -080087
88 /* Set up close() expectations. */
89 EXPECT_CALL(imageMock, close());
90 EXPECT_TRUE(handler->close(0));
91}
92
93} // namespace blobs