| Patrick Venture | cc7d160 | 2018-11-15 13:58:33 -0800 | [diff] [blame] | 1 | #include "data_mock.hpp" | 
|  | 2 | #include "firmware_handler.hpp" | 
|  | 3 | #include "image_mock.hpp" | 
| Patrick Venture | 7dad86f | 2019-05-17 08:52:20 -0700 | [diff] [blame] | 4 | #include "util.hpp" | 
| Patrick Venture | 3ecb350 | 2019-05-17 11:03:51 -0700 | [diff] [blame^] | 5 | #include "verification_mock.hpp" | 
| Patrick Venture | cc7d160 | 2018-11-15 13:58:33 -0800 | [diff] [blame] | 6 |  | 
|  | 7 | #include <vector> | 
|  | 8 |  | 
|  | 9 | #include <gtest/gtest.h> | 
|  | 10 |  | 
|  | 11 | namespace blobs | 
|  | 12 | { | 
|  | 13 | using ::testing::Eq; | 
|  | 14 | using ::testing::Return; | 
|  | 15 |  | 
|  | 16 | TEST(FirmwareSessionStateTest, DataTypeIpmiNoMetadata) | 
|  | 17 | { | 
|  | 18 | /* Verifying running stat if the type of data session is IPMI returns no | 
|  | 19 | * metadata. | 
|  | 20 | */ | 
|  | 21 | ImageHandlerMock imageMock1, imageMock2; | 
|  | 22 | std::vector<HandlerPack> blobs = { | 
| Patrick Venture | 7dad86f | 2019-05-17 08:52:20 -0700 | [diff] [blame] | 23 | {hashBlobId, &imageMock1}, | 
| Patrick Venture | cc7d160 | 2018-11-15 13:58:33 -0800 | [diff] [blame] | 24 | {"asdf", &imageMock2}, | 
|  | 25 | }; | 
|  | 26 |  | 
|  | 27 | std::vector<DataHandlerPack> data = { | 
|  | 28 | {FirmwareBlobHandler::UpdateFlags::ipmi, nullptr}, | 
|  | 29 | }; | 
|  | 30 |  | 
| Patrick Venture | 4eb5595 | 2018-11-16 15:36:24 -0800 | [diff] [blame] | 31 | auto handler = FirmwareBlobHandler::CreateFirmwareBlobHandler( | 
| Patrick Venture | 3ecb350 | 2019-05-17 11:03:51 -0700 | [diff] [blame^] | 32 | blobs, data, CreateVerifyMock()); | 
| Patrick Venture | cc7d160 | 2018-11-15 13:58:33 -0800 | [diff] [blame] | 33 |  | 
|  | 34 | EXPECT_CALL(imageMock2, open("asdf")).WillOnce(Return(true)); | 
|  | 35 |  | 
|  | 36 | EXPECT_TRUE(handler->open( | 
|  | 37 | 0, OpenFlags::write | FirmwareBlobHandler::UpdateFlags::ipmi, "asdf")); | 
|  | 38 |  | 
|  | 39 | int size = 512; | 
|  | 40 | EXPECT_CALL(imageMock2, getSize()).WillOnce(Return(size)); | 
|  | 41 |  | 
|  | 42 | struct BlobMeta meta; | 
|  | 43 | EXPECT_TRUE(handler->stat(0, &meta)); | 
|  | 44 | EXPECT_EQ(meta.blobState, | 
|  | 45 | OpenFlags::write | FirmwareBlobHandler::UpdateFlags::ipmi); | 
|  | 46 | EXPECT_EQ(meta.size, size); | 
|  | 47 | EXPECT_EQ(meta.metadata.size(), 0); | 
|  | 48 | } | 
|  | 49 |  | 
|  | 50 | TEST(FirmwareSessionStateTest, DataTypeP2AReturnsMetadata) | 
|  | 51 | { | 
|  | 52 | /* Really any type that isn't IPMI can return metadata, but we only expect | 
|  | 53 | * P2A to for now.  Later, LPC may have reason to provide data, and can by | 
|  | 54 | * simply implementing read(). | 
|  | 55 | */ | 
|  | 56 | ImageHandlerMock imageMock1, imageMock2; | 
|  | 57 | std::vector<HandlerPack> blobs = { | 
| Patrick Venture | 7dad86f | 2019-05-17 08:52:20 -0700 | [diff] [blame] | 58 | {hashBlobId, &imageMock1}, | 
| Patrick Venture | cc7d160 | 2018-11-15 13:58:33 -0800 | [diff] [blame] | 59 | {"asdf", &imageMock2}, | 
|  | 60 | }; | 
|  | 61 |  | 
|  | 62 | DataHandlerMock dataMock; | 
|  | 63 |  | 
|  | 64 | std::vector<DataHandlerPack> data = { | 
|  | 65 | {FirmwareBlobHandler::UpdateFlags::ipmi, nullptr}, | 
|  | 66 | {FirmwareBlobHandler::UpdateFlags::lpc, &dataMock}, | 
|  | 67 | }; | 
|  | 68 |  | 
| Patrick Venture | 4eb5595 | 2018-11-16 15:36:24 -0800 | [diff] [blame] | 69 | auto handler = FirmwareBlobHandler::CreateFirmwareBlobHandler( | 
| Patrick Venture | 3ecb350 | 2019-05-17 11:03:51 -0700 | [diff] [blame^] | 70 | blobs, data, CreateVerifyMock()); | 
| Patrick Venture | cc7d160 | 2018-11-15 13:58:33 -0800 | [diff] [blame] | 71 |  | 
|  | 72 | EXPECT_CALL(dataMock, open()).WillOnce(Return(true)); | 
|  | 73 | EXPECT_CALL(imageMock2, open("asdf")).WillOnce(Return(true)); | 
|  | 74 |  | 
|  | 75 | EXPECT_TRUE(handler->open( | 
|  | 76 | 0, OpenFlags::write | FirmwareBlobHandler::UpdateFlags::lpc, "asdf")); | 
|  | 77 |  | 
|  | 78 | int size = 512; | 
|  | 79 | EXPECT_CALL(imageMock2, getSize()).WillOnce(Return(size)); | 
|  | 80 | std::vector<std::uint8_t> mBytes = {0x01, 0x02}; | 
| Patrick Venture | 7430464 | 2019-01-17 09:31:04 -0800 | [diff] [blame] | 81 | EXPECT_CALL(dataMock, readMeta()).WillOnce(Return(mBytes)); | 
| Patrick Venture | cc7d160 | 2018-11-15 13:58:33 -0800 | [diff] [blame] | 82 |  | 
|  | 83 | struct BlobMeta meta; | 
|  | 84 | EXPECT_TRUE(handler->stat(0, &meta)); | 
|  | 85 | EXPECT_EQ(meta.blobState, | 
|  | 86 | OpenFlags::write | FirmwareBlobHandler::UpdateFlags::lpc); | 
|  | 87 | EXPECT_EQ(meta.size, size); | 
|  | 88 | EXPECT_EQ(meta.metadata.size(), mBytes.size()); | 
|  | 89 | EXPECT_EQ(meta.metadata[0], mBytes[0]); | 
|  | 90 | EXPECT_EQ(meta.metadata[1], mBytes[1]); | 
|  | 91 | } | 
|  | 92 |  | 
|  | 93 | } // namespace blobs |