1*ded66d0fSJason Ling #include "data_mock.hpp" 2*ded66d0fSJason Ling #include "firmware_handler.hpp" 3*ded66d0fSJason Ling #include "firmware_unittest.hpp" 4*ded66d0fSJason Ling #include "image_mock.hpp" 5*ded66d0fSJason Ling #include "triggerable_mock.hpp" 6*ded66d0fSJason Ling #include "util.hpp" 7*ded66d0fSJason Ling 8*ded66d0fSJason Ling #include <memory> 9*ded66d0fSJason Ling #include <vector> 10*ded66d0fSJason Ling 11*ded66d0fSJason Ling #include <gmock/gmock.h> 12*ded66d0fSJason Ling #include <gtest/gtest.h> 13*ded66d0fSJason Ling 14*ded66d0fSJason Ling namespace ipmi_flash 15*ded66d0fSJason Ling { 16*ded66d0fSJason Ling namespace 17*ded66d0fSJason Ling { 18*ded66d0fSJason Ling 19*ded66d0fSJason Ling using ::testing::Return; 20*ded66d0fSJason Ling using ::testing::StrEq; 21*ded66d0fSJason Ling 22*ded66d0fSJason Ling class FirmwareHandlerCloseTest : public FakeLpcFirmwareTest 23*ded66d0fSJason Ling {}; 24*ded66d0fSJason Ling 25*ded66d0fSJason Ling TEST_F(FirmwareHandlerCloseTest, CloseSucceedsWithDataHandler) 26*ded66d0fSJason Ling { 27*ded66d0fSJason Ling /* Boring test where you open a blob_id, then verify that when it's closed 28*ded66d0fSJason Ling * everything looks right. 29*ded66d0fSJason Ling */ 30*ded66d0fSJason Ling EXPECT_CALL(*dataMock, open()).WillOnce(Return(true)); 31*ded66d0fSJason Ling EXPECT_CALL(*hashImageMock, open(StrEq(hashBlobId))).WillOnce(Return(true)); 32*ded66d0fSJason Ling 33*ded66d0fSJason Ling EXPECT_TRUE(handler->open( 34*ded66d0fSJason Ling 0, blobs::OpenFlags::write | FirmwareFlags::UpdateFlags::lpc, 35*ded66d0fSJason Ling hashBlobId)); 36*ded66d0fSJason Ling 37*ded66d0fSJason Ling /* The active hash blob_id was added. */ 38*ded66d0fSJason Ling auto currentBlobs = handler->getBlobIds(); 39*ded66d0fSJason Ling EXPECT_EQ(3, currentBlobs.size()); 40*ded66d0fSJason Ling EXPECT_EQ(1, std::count(currentBlobs.begin(), currentBlobs.end(), 41*ded66d0fSJason Ling activeHashBlobId)); 42*ded66d0fSJason Ling 43*ded66d0fSJason Ling /* Set up close() expectations. */ 44*ded66d0fSJason Ling EXPECT_CALL(*dataMock, close()); 45*ded66d0fSJason Ling EXPECT_CALL(*hashImageMock, close()); 46*ded66d0fSJason Ling EXPECT_TRUE(handler->close(0)); 47*ded66d0fSJason Ling 48*ded66d0fSJason Ling /* Close does not delete the active blob id. This indicates that there is 49*ded66d0fSJason Ling * data queued. 50*ded66d0fSJason Ling */ 51*ded66d0fSJason Ling } 52*ded66d0fSJason Ling 53*ded66d0fSJason Ling TEST_F(FirmwareHandlerCloseTest, CloseSucceedsWithoutDataHandler) 54*ded66d0fSJason Ling { 55*ded66d0fSJason Ling /* Boring test where you open a blob_id using ipmi, so there's no data 56*ded66d0fSJason Ling * handler, and it's closed and everything looks right. 57*ded66d0fSJason Ling */ 58*ded66d0fSJason Ling EXPECT_CALL(*hashImageMock, open(StrEq(hashBlobId))).WillOnce(Return(true)); 59*ded66d0fSJason Ling 60*ded66d0fSJason Ling EXPECT_TRUE(handler->open( 61*ded66d0fSJason Ling 0, blobs::OpenFlags::write | FirmwareFlags::UpdateFlags::ipmi, 62*ded66d0fSJason Ling hashBlobId)); 63*ded66d0fSJason Ling 64*ded66d0fSJason Ling /* The active hash blob_id was added. */ 65*ded66d0fSJason Ling auto currentBlobs = handler->getBlobIds(); 66*ded66d0fSJason Ling EXPECT_EQ(3, currentBlobs.size()); 67*ded66d0fSJason Ling EXPECT_EQ(1, std::count(currentBlobs.begin(), currentBlobs.end(), 68*ded66d0fSJason Ling activeHashBlobId)); 69*ded66d0fSJason Ling 70*ded66d0fSJason Ling /* Set up close() expectations. */ 71*ded66d0fSJason Ling EXPECT_CALL(*hashImageMock, close()); 72*ded66d0fSJason Ling EXPECT_TRUE(handler->close(0)); 73*ded66d0fSJason Ling } 74*ded66d0fSJason Ling 75*ded66d0fSJason Ling } // namespace 76*ded66d0fSJason Ling } // namespace ipmi_flash 77