1 #include "data_mock.hpp"
2 #include "firmware_handler.hpp"
3 #include "firmware_unittest.hpp"
4 #include "image_mock.hpp"
5 #include "triggerable_mock.hpp"
6 #include "util.hpp"
7
8 #include <memory>
9 #include <vector>
10
11 #include <gmock/gmock.h>
12 #include <gtest/gtest.h>
13
14 namespace ipmi_flash
15 {
16 namespace
17 {
18
19 using ::testing::Return;
20 using ::testing::StrEq;
21
22 class FirmwareHandlerCloseTest : public FakeLpcFirmwareTest
23 {};
24
TEST_F(FirmwareHandlerCloseTest,CloseSucceedsWithDataHandler)25 TEST_F(FirmwareHandlerCloseTest, CloseSucceedsWithDataHandler)
26 {
27 /* Boring test where you open a blob_id, then verify that when it's closed
28 * everything looks right.
29 */
30 EXPECT_CALL(*dataMock, open()).WillOnce(Return(true));
31 EXPECT_CALL(*hashImageMock, open(StrEq(hashBlobId), std::ios::out))
32 .WillOnce(Return(true));
33
34 EXPECT_TRUE(
35 handler->open(0,
36 static_cast<std::uint16_t>(blobs::OpenFlags::write) |
37 FirmwareFlags::UpdateFlags::lpc,
38 hashBlobId));
39
40 /* The active hash blob_id was added. */
41 auto currentBlobs = handler->getBlobIds();
42 EXPECT_EQ(3, currentBlobs.size());
43 EXPECT_EQ(1, std::count(currentBlobs.begin(), currentBlobs.end(),
44 activeHashBlobId));
45
46 /* Set up close() expectations. */
47 EXPECT_CALL(*dataMock, close());
48 EXPECT_CALL(*hashImageMock, close());
49 EXPECT_TRUE(handler->close(0));
50
51 /* Close does not delete the active blob id. This indicates that there is
52 * data queued.
53 */
54 }
55
TEST_F(FirmwareHandlerCloseTest,CloseSucceedsWithoutDataHandler)56 TEST_F(FirmwareHandlerCloseTest, CloseSucceedsWithoutDataHandler)
57 {
58 /* Boring test where you open a blob_id using ipmi, so there's no data
59 * handler, and it's closed and everything looks right.
60 */
61 EXPECT_CALL(*hashImageMock, open(StrEq(hashBlobId), std::ios::out))
62 .WillOnce(Return(true));
63
64 EXPECT_TRUE(
65 handler->open(0,
66 static_cast<std::uint16_t>(blobs::OpenFlags::write) |
67 FirmwareFlags::UpdateFlags::ipmi,
68 hashBlobId));
69
70 /* The active hash blob_id was added. */
71 auto currentBlobs = handler->getBlobIds();
72 EXPECT_EQ(3, currentBlobs.size());
73 EXPECT_EQ(1, std::count(currentBlobs.begin(), currentBlobs.end(),
74 activeHashBlobId));
75
76 /* Set up close() expectations. */
77 EXPECT_CALL(*hashImageMock, close());
78 EXPECT_TRUE(handler->close(0));
79 }
80
81 } // namespace
82 } // namespace ipmi_flash
83