blob: 04aec227f6af48c4068fd74d7f1b6273f63acec6 [file] [log] [blame]
Patrick Venture68bb1432018-11-09 20:08:48 -08001#include "data_mock.hpp"
2#include "firmware_handler.hpp"
Patrick Venture1361a122019-05-20 07:36:05 -07003#include "firmware_unittest.hpp"
Patrick Venture68bb1432018-11-09 20:08:48 -08004#include "image_mock.hpp"
Patrick Venture1d66fe62019-06-03 14:57:27 -07005#include "triggerable_mock.hpp"
Patrick Venture7dad86f2019-05-17 08:52:20 -07006#include "util.hpp"
Patrick Venture68bb1432018-11-09 20:08:48 -08007
Patrick Venture79412582019-05-17 17:34:45 -07008#include <memory>
Patrick Venture68bb1432018-11-09 20:08:48 -08009#include <vector>
10
11#include <gmock/gmock.h>
12#include <gtest/gtest.h>
13
Patrick Venture1d5a31c2019-05-20 11:38:22 -070014namespace ipmi_flash
Patrick Venture68bb1432018-11-09 20:08:48 -080015{
Patrick Venture930c7b72019-05-24 11:11:08 -070016namespace
17{
18
Patrick Venture68bb1432018-11-09 20:08:48 -080019using ::testing::Return;
20using ::testing::StrEq;
21
Patrick Venture1361a122019-05-20 07:36:05 -070022class FirmwareHandlerCloseTest : public FakeLpcFirmwareTest
Patrick Venture9b37b092020-05-28 20:58:57 -070023{};
Patrick Venture79412582019-05-17 17:34:45 -070024
25TEST_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 */
Patrick Venture4934daa2020-09-22 16:37:44 -070030 EXPECT_CALL(*dataMock, open()).WillOnce(Return(true));
Jason Ling56a22732020-10-23 19:53:17 -070031 EXPECT_CALL(*hashImageMock, open(StrEq(hashBlobId), std::ios::out))
32 .WillOnce(Return(true));
Patrick Venture68bb1432018-11-09 20:08:48 -080033
Willy Tub487eb42021-09-16 21:44:43 -070034 EXPECT_TRUE(
35 handler->open(0,
36 static_cast<std::uint16_t>(blobs::OpenFlags::write) |
37 FirmwareFlags::UpdateFlags::lpc,
38 hashBlobId));
Patrick Venture68bb1432018-11-09 20:08:48 -080039
40 /* The active hash blob_id was added. */
41 auto currentBlobs = handler->getBlobIds();
Patrick Venture930c7b72019-05-24 11:11:08 -070042 EXPECT_EQ(3, currentBlobs.size());
Patrick Venture68bb1432018-11-09 20:08:48 -080043 EXPECT_EQ(1, std::count(currentBlobs.begin(), currentBlobs.end(),
Patrick Venture7dad86f2019-05-17 08:52:20 -070044 activeHashBlobId));
Patrick Venture68bb1432018-11-09 20:08:48 -080045
46 /* Set up close() expectations. */
Patrick Venture4934daa2020-09-22 16:37:44 -070047 EXPECT_CALL(*dataMock, close());
Patrick Ventured4e20de2019-07-18 12:48:05 -070048 EXPECT_CALL(*hashImageMock, close());
Patrick Venture68bb1432018-11-09 20:08:48 -080049 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
Patrick Venture79412582019-05-17 17:34:45 -070056TEST_F(FirmwareHandlerCloseTest, CloseSucceedsWithoutDataHandler)
Patrick Venture68bb1432018-11-09 20:08:48 -080057{
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 */
Jason Ling56a22732020-10-23 19:53:17 -070061 EXPECT_CALL(*hashImageMock, open(StrEq(hashBlobId), std::ios::out))
62 .WillOnce(Return(true));
Patrick Venture68bb1432018-11-09 20:08:48 -080063
Willy Tub487eb42021-09-16 21:44:43 -070064 EXPECT_TRUE(
65 handler->open(0,
66 static_cast<std::uint16_t>(blobs::OpenFlags::write) |
67 FirmwareFlags::UpdateFlags::ipmi,
68 hashBlobId));
Patrick Venture68bb1432018-11-09 20:08:48 -080069
70 /* The active hash blob_id was added. */
71 auto currentBlobs = handler->getBlobIds();
Patrick Venture930c7b72019-05-24 11:11:08 -070072 EXPECT_EQ(3, currentBlobs.size());
Patrick Venture68bb1432018-11-09 20:08:48 -080073 EXPECT_EQ(1, std::count(currentBlobs.begin(), currentBlobs.end(),
Patrick Venture7dad86f2019-05-17 08:52:20 -070074 activeHashBlobId));
Patrick Venture68bb1432018-11-09 20:08:48 -080075
76 /* Set up close() expectations. */
Patrick Ventured4e20de2019-07-18 12:48:05 -070077 EXPECT_CALL(*hashImageMock, close());
Patrick Venture68bb1432018-11-09 20:08:48 -080078 EXPECT_TRUE(handler->close(0));
79}
80
Patrick Venture930c7b72019-05-24 11:11:08 -070081} // namespace
Patrick Venture1d5a31c2019-05-20 11:38:22 -070082} // namespace ipmi_flash