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