blob: 7eaf718e0b0329eb787127580d7ea4316358909b [file] [log] [blame]
Jason Ling84bff8b2020-11-06 13:45:09 -08001#include "create_action_map.hpp"
Patrick Ventureffcc5502018-11-16 12:32:38 -08002#include "data_mock.hpp"
3#include "firmware_handler.hpp"
Patrick Venture84778b82019-06-26 20:11:09 -07004#include "flags.hpp"
Patrick Ventureffcc5502018-11-16 12:32:38 -08005#include "image_mock.hpp"
Patrick Venture7dad86f2019-05-17 08:52:20 -07006#include "util.hpp"
Patrick Ventureffcc5502018-11-16 12:32:38 -08007
Patrick Venture481cd4a2019-05-17 17:53:11 -07008#include <memory>
Patrick Ventureffcc5502018-11-16 12:32:38 -08009#include <vector>
10
11#include <gtest/gtest.h>
12
Patrick Venture1d5a31c2019-05-20 11:38:22 -070013namespace ipmi_flash
Patrick Ventureffcc5502018-11-16 12:32:38 -080014{
Patrick Venturefa06a5f2019-07-01 09:22:38 -070015namespace
16{
Patrick Venture63902a42020-10-06 12:13:31 -070017
Patrick Ventureffcc5502018-11-16 12:32:38 -080018using ::testing::Return;
Patrick Venturecabc1172018-11-16 16:14:26 -080019using ::testing::StrEq;
Patrick Ventureffcc5502018-11-16 12:32:38 -080020
Patrick Venture481cd4a2019-05-17 17:53:11 -070021class FirmwareHandlerCommitTest : public ::testing::Test
22{
23 protected:
Patrick Ventured4e20de2019-07-18 12:48:05 -070024 ImageHandlerMock *imageMock1, *imageMock2;
Patrick Venture481cd4a2019-05-17 17:53:11 -070025 std::vector<HandlerPack> blobs;
26 std::vector<DataHandlerPack> data;
27
28 void SetUp() override
29 {
Patrick Ventured4e20de2019-07-18 12:48:05 -070030 std::unique_ptr<ImageHandlerInterface> image =
31 std::make_unique<ImageHandlerMock>();
32 imageMock1 = reinterpret_cast<ImageHandlerMock*>(image.get());
Patrick Venturec6ba8ff2020-09-23 12:42:57 -070033 blobs.emplace_back(hashBlobId, std::move(image));
Patrick Ventured4e20de2019-07-18 12:48:05 -070034
35 image = std::make_unique<ImageHandlerMock>();
36 imageMock2 = reinterpret_cast<ImageHandlerMock*>(image.get());
Patrick Venturec6ba8ff2020-09-23 12:42:57 -070037 blobs.emplace_back("asdf", std::move(image));
Patrick Venture481cd4a2019-05-17 17:53:11 -070038
Patrick Venture4934daa2020-09-22 16:37:44 -070039 data.emplace_back(FirmwareFlags::UpdateFlags::ipmi, nullptr);
Patrick Venture481cd4a2019-05-17 17:53:11 -070040 }
41};
42
43TEST_F(FirmwareHandlerCommitTest, VerifyCannotCommitOnFlashImage)
Patrick Ventureffcc5502018-11-16 12:32:38 -080044{
45 /* Verify the flash image returns failure on this command. It's a fairly
46 * artificial test.
47 */
Patrick Venture4eb55952018-11-16 15:36:24 -080048 auto handler = FirmwareBlobHandler::CreateFirmwareBlobHandler(
Patrick Ventureda4d4a42020-09-28 11:41:05 -070049 std::move(blobs), std::move(data), CreateActionMap("asdf"));
Patrick Ventureffcc5502018-11-16 12:32:38 -080050
Jason Ling56a22732020-10-23 19:53:17 -070051 EXPECT_CALL(*imageMock2, open("asdf", std::ios::out))
52 .WillOnce(Return(true));
Patrick Ventureffcc5502018-11-16 12:32:38 -080053
Willy Tub487eb42021-09-16 21:44:43 -070054 EXPECT_TRUE(
55 handler->open(0,
56 static_cast<std::uint16_t>(blobs::OpenFlags::write) |
57 FirmwareFlags::UpdateFlags::ipmi,
58 "asdf"));
Patrick Ventureffcc5502018-11-16 12:32:38 -080059
60 EXPECT_FALSE(handler->commit(0, {}));
61}
62
Patrick Venture481cd4a2019-05-17 17:53:11 -070063TEST_F(FirmwareHandlerCommitTest, VerifyCannotCommitOnHashFile)
Patrick Ventureffcc5502018-11-16 12:32:38 -080064{
65 /* Verify the hash file returns failure on this command. It's a fairly
66 * artificial test.
67 */
Patrick Venture4eb55952018-11-16 15:36:24 -080068 auto handler = FirmwareBlobHandler::CreateFirmwareBlobHandler(
Patrick Ventureda4d4a42020-09-28 11:41:05 -070069 std::move(blobs), std::move(data), CreateActionMap("asdf"));
Patrick Ventureffcc5502018-11-16 12:32:38 -080070
Jason Ling56a22732020-10-23 19:53:17 -070071 EXPECT_CALL(*imageMock1, open(StrEq(hashBlobId), std::ios::out))
72 .WillOnce(Return(true));
Patrick Ventureffcc5502018-11-16 12:32:38 -080073
Willy Tub487eb42021-09-16 21:44:43 -070074 EXPECT_TRUE(
75 handler->open(0,
76 static_cast<std::uint16_t>(blobs::OpenFlags::write) |
77 FirmwareFlags::UpdateFlags::ipmi,
78 hashBlobId));
Patrick Ventureffcc5502018-11-16 12:32:38 -080079
80 EXPECT_FALSE(handler->commit(0, {}));
81}
82
Patrick Venturefa06a5f2019-07-01 09:22:38 -070083} // namespace
Patrick Venture1d5a31c2019-05-20 11:38:22 -070084} // namespace ipmi_flash