xref: /openbmc/phosphor-ipmi-flash/bmc/firmware-handler/test/firmware_sessionstat_unittest.cpp (revision b487eb47e566df7679e740559582f6d25597feba)
1ded66d0fSJason Ling #include "data_mock.hpp"
2ded66d0fSJason Ling #include "firmware_handler.hpp"
3ded66d0fSJason Ling #include "firmware_unittest.hpp"
4ded66d0fSJason Ling #include "image_mock.hpp"
5ded66d0fSJason Ling #include "triggerable_mock.hpp"
6ded66d0fSJason Ling #include "util.hpp"
7ded66d0fSJason Ling 
8ded66d0fSJason Ling #include <vector>
9ded66d0fSJason Ling 
10ded66d0fSJason Ling #include <gtest/gtest.h>
11ded66d0fSJason Ling 
12ded66d0fSJason Ling namespace ipmi_flash
13ded66d0fSJason Ling {
14ded66d0fSJason Ling 
15ded66d0fSJason Ling using ::testing::Return;
16ded66d0fSJason Ling 
17ded66d0fSJason Ling class FirmwareSessionStateTestIpmiOnly : public IpmiOnlyFirmwareTest
18ded66d0fSJason Ling {};
19ded66d0fSJason Ling 
20ded66d0fSJason Ling class FirmwareSessionStateTestLpc : public FakeLpcFirmwareTest
21ded66d0fSJason Ling {};
22ded66d0fSJason Ling 
TEST_F(FirmwareSessionStateTestIpmiOnly,DataTypeIpmiNoMetadata)23ded66d0fSJason Ling TEST_F(FirmwareSessionStateTestIpmiOnly, DataTypeIpmiNoMetadata)
24ded66d0fSJason Ling {
25ded66d0fSJason Ling     /* Verifying running stat if the type of data session is IPMI returns no
26ded66d0fSJason Ling      * metadata.
27ded66d0fSJason Ling      */
2856a2273fSJason Ling     EXPECT_CALL(*imageMock, open("asdf", std::ios::out)).WillOnce(Return(true));
29ded66d0fSJason Ling 
30*b487eb47SWilly Tu     EXPECT_TRUE(
31*b487eb47SWilly Tu         handler->open(0,
32*b487eb47SWilly Tu                       static_cast<std::uint16_t>(blobs::OpenFlags::write) |
33*b487eb47SWilly Tu                           FirmwareFlags::UpdateFlags::ipmi,
34*b487eb47SWilly Tu                       "asdf"));
35ded66d0fSJason Ling 
36ded66d0fSJason Ling     int size = 512;
37ded66d0fSJason Ling     EXPECT_CALL(*imageMock, getSize()).WillOnce(Return(size));
38ded66d0fSJason Ling 
39ded66d0fSJason Ling     blobs::BlobMeta meta;
40ded66d0fSJason Ling     EXPECT_TRUE(handler->stat(0, &meta));
41ded66d0fSJason Ling     EXPECT_EQ(meta.blobState,
42*b487eb47SWilly Tu               static_cast<std::uint16_t>(blobs::OpenFlags::write) |
43*b487eb47SWilly Tu                   FirmwareFlags::UpdateFlags::ipmi);
44ded66d0fSJason Ling     EXPECT_EQ(meta.size, size);
45ded66d0fSJason Ling     EXPECT_EQ(meta.metadata.size(), 0);
46ded66d0fSJason Ling }
47ded66d0fSJason Ling 
TEST_F(FirmwareSessionStateTestLpc,DataTypeP2AReturnsMetadata)48ded66d0fSJason Ling TEST_F(FirmwareSessionStateTestLpc, DataTypeP2AReturnsMetadata)
49ded66d0fSJason Ling {
50ded66d0fSJason Ling     /* Really any type that isn't IPMI can return metadata, but we only expect
51ded66d0fSJason Ling      * P2A to for now.  Later, LPC may have reason to provide data, and can by
52ded66d0fSJason Ling      * simply implementing read().
53ded66d0fSJason Ling      */
54ded66d0fSJason Ling     EXPECT_CALL(*dataMock, open()).WillOnce(Return(true));
5556a2273fSJason Ling     EXPECT_CALL(*imageMock, open("asdf", std::ios::out)).WillOnce(Return(true));
56ded66d0fSJason Ling 
57*b487eb47SWilly Tu     EXPECT_TRUE(
58*b487eb47SWilly Tu         handler->open(0,
59*b487eb47SWilly Tu                       static_cast<std::uint16_t>(blobs::OpenFlags::write) |
60*b487eb47SWilly Tu                           FirmwareFlags::UpdateFlags::lpc,
61*b487eb47SWilly Tu                       "asdf"));
62ded66d0fSJason Ling 
63ded66d0fSJason Ling     int size = 512;
64ded66d0fSJason Ling     EXPECT_CALL(*imageMock, getSize()).WillOnce(Return(size));
65ded66d0fSJason Ling     std::vector<std::uint8_t> mBytes = {0x01, 0x02};
66ded66d0fSJason Ling     EXPECT_CALL(*dataMock, readMeta()).WillOnce(Return(mBytes));
67ded66d0fSJason Ling 
68ded66d0fSJason Ling     blobs::BlobMeta meta;
69ded66d0fSJason Ling     EXPECT_TRUE(handler->stat(0, &meta));
70ded66d0fSJason Ling     EXPECT_EQ(meta.blobState,
71*b487eb47SWilly Tu               static_cast<std::uint16_t>(blobs::OpenFlags::write) |
72*b487eb47SWilly Tu                   FirmwareFlags::UpdateFlags::lpc);
73ded66d0fSJason Ling     EXPECT_EQ(meta.size, size);
74ded66d0fSJason Ling     EXPECT_EQ(meta.metadata.size(), mBytes.size());
75ded66d0fSJason Ling     EXPECT_EQ(meta.metadata[0], mBytes[0]);
76ded66d0fSJason Ling     EXPECT_EQ(meta.metadata[1], mBytes[1]);
77ded66d0fSJason Ling }
78ded66d0fSJason Ling 
79ded66d0fSJason Ling } // namespace ipmi_flash
80