blob: 6f5aeee2285d24783e8483cbd70f270c0bbe0619 [file] [log] [blame]
Patrick Venturecc7d1602018-11-15 13:58:33 -08001#include "data_mock.hpp"
2#include "firmware_handler.hpp"
Patrick Venture1361a122019-05-20 07:36:05 -07003#include "firmware_unittest.hpp"
Patrick Venturecc7d1602018-11-15 13:58:33 -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 Venturecc7d1602018-11-15 13:58:33 -08007
8#include <vector>
9
10#include <gtest/gtest.h>
11
Patrick Venture1d5a31c2019-05-20 11:38:22 -070012namespace ipmi_flash
Patrick Venturecc7d1602018-11-15 13:58:33 -080013{
Patrick Venture63902a42020-10-06 12:13:31 -070014
Patrick Venturecc7d1602018-11-15 13:58:33 -080015using ::testing::Return;
16
Patrick Venture1361a122019-05-20 07:36:05 -070017class FirmwareSessionStateTestIpmiOnly : public IpmiOnlyFirmwareTest
Patrick Venture9b37b092020-05-28 20:58:57 -070018{};
Patrick Venture3a036312019-05-17 18:56:41 -070019
Patrick Venture1361a122019-05-20 07:36:05 -070020class FirmwareSessionStateTestLpc : public FakeLpcFirmwareTest
Patrick Venture9b37b092020-05-28 20:58:57 -070021{};
Patrick Venture1361a122019-05-20 07:36:05 -070022
23TEST_F(FirmwareSessionStateTestIpmiOnly, DataTypeIpmiNoMetadata)
Patrick Venturecc7d1602018-11-15 13:58:33 -080024{
25 /* Verifying running stat if the type of data session is IPMI returns no
26 * metadata.
27 */
Jason Ling56a22732020-10-23 19:53:17 -070028 EXPECT_CALL(*imageMock, open("asdf", std::ios::out)).WillOnce(Return(true));
Patrick Venturecc7d1602018-11-15 13:58:33 -080029
Willy Tub487eb42021-09-16 21:44:43 -070030 EXPECT_TRUE(
31 handler->open(0,
32 static_cast<std::uint16_t>(blobs::OpenFlags::write) |
33 FirmwareFlags::UpdateFlags::ipmi,
34 "asdf"));
Patrick Venturecc7d1602018-11-15 13:58:33 -080035
36 int size = 512;
Patrick Ventured4e20de2019-07-18 12:48:05 -070037 EXPECT_CALL(*imageMock, getSize()).WillOnce(Return(size));
Patrick Venturecc7d1602018-11-15 13:58:33 -080038
Patrick Venturee312f392019-06-04 07:44:37 -070039 blobs::BlobMeta meta;
Patrick Venturecc7d1602018-11-15 13:58:33 -080040 EXPECT_TRUE(handler->stat(0, &meta));
41 EXPECT_EQ(meta.blobState,
Willy Tub487eb42021-09-16 21:44:43 -070042 static_cast<std::uint16_t>(blobs::OpenFlags::write) |
43 FirmwareFlags::UpdateFlags::ipmi);
Patrick Venturecc7d1602018-11-15 13:58:33 -080044 EXPECT_EQ(meta.size, size);
45 EXPECT_EQ(meta.metadata.size(), 0);
46}
47
Patrick Venture1361a122019-05-20 07:36:05 -070048TEST_F(FirmwareSessionStateTestLpc, DataTypeP2AReturnsMetadata)
Patrick Venturecc7d1602018-11-15 13:58:33 -080049{
50 /* Really any type that isn't IPMI can return metadata, but we only expect
51 * P2A to for now. Later, LPC may have reason to provide data, and can by
52 * simply implementing read().
53 */
Patrick Venture4934daa2020-09-22 16:37:44 -070054 EXPECT_CALL(*dataMock, open()).WillOnce(Return(true));
Jason Ling56a22732020-10-23 19:53:17 -070055 EXPECT_CALL(*imageMock, open("asdf", std::ios::out)).WillOnce(Return(true));
Patrick Venturecc7d1602018-11-15 13:58:33 -080056
Willy Tub487eb42021-09-16 21:44:43 -070057 EXPECT_TRUE(
58 handler->open(0,
59 static_cast<std::uint16_t>(blobs::OpenFlags::write) |
60 FirmwareFlags::UpdateFlags::lpc,
61 "asdf"));
Patrick Venturecc7d1602018-11-15 13:58:33 -080062
63 int size = 512;
Patrick Ventured4e20de2019-07-18 12:48:05 -070064 EXPECT_CALL(*imageMock, getSize()).WillOnce(Return(size));
Patrick Venturecc7d1602018-11-15 13:58:33 -080065 std::vector<std::uint8_t> mBytes = {0x01, 0x02};
Patrick Venture4934daa2020-09-22 16:37:44 -070066 EXPECT_CALL(*dataMock, readMeta()).WillOnce(Return(mBytes));
Patrick Venturecc7d1602018-11-15 13:58:33 -080067
Patrick Venturee312f392019-06-04 07:44:37 -070068 blobs::BlobMeta meta;
Patrick Venturecc7d1602018-11-15 13:58:33 -080069 EXPECT_TRUE(handler->stat(0, &meta));
70 EXPECT_EQ(meta.blobState,
Willy Tub487eb42021-09-16 21:44:43 -070071 static_cast<std::uint16_t>(blobs::OpenFlags::write) |
72 FirmwareFlags::UpdateFlags::lpc);
Patrick Venturecc7d1602018-11-15 13:58:33 -080073 EXPECT_EQ(meta.size, size);
74 EXPECT_EQ(meta.metadata.size(), mBytes.size());
75 EXPECT_EQ(meta.metadata[0], mBytes[0]);
76 EXPECT_EQ(meta.metadata[1], mBytes[1]);
77}
78
Patrick Venture1d5a31c2019-05-20 11:38:22 -070079} // namespace ipmi_flash