1 #include "handler_unittest.hpp" 2 3 #include <blobs-ipmid/blobs.hpp> 4 5 #include <cstdint> 6 #include <vector> 7 8 #include <gmock/gmock.h> 9 #include <gtest/gtest.h> 10 11 using ::testing::IsEmpty; 12 13 namespace blobs 14 { 15 16 class SmbiosBlobHandlerReadWriteTest : public SmbiosBlobHandlerTest 17 {}; 18 19 TEST_F(SmbiosBlobHandlerReadWriteTest, InvalidSessionWriteIsRejected) 20 { 21 // Verify the handler checks for a valid session. 22 23 std::vector<uint8_t> data = {0x1, 0x2}; 24 EXPECT_FALSE(handler.write(session, 0, data)); 25 } 26 27 TEST_F(SmbiosBlobHandlerReadWriteTest, NoWriteFlagRejected) 28 { 29 // Verify the handler checks the write flag; 30 31 EXPECT_TRUE(handler.open(session, 0, expectedBlobId)); 32 33 std::vector<uint8_t> data = {0x1, 0x2}; 34 EXPECT_FALSE(handler.write(session, 0, data)); 35 } 36 37 TEST_F(SmbiosBlobHandlerReadWriteTest, WritingTooMuchByOneByteFails) 38 { 39 int bytes = handlerMaxBufferSize + 1; 40 std::vector<uint8_t> data(bytes, 0x11); 41 42 EXPECT_TRUE(handler.open(session, blobs::OpenFlags::write, expectedBlobId)); 43 EXPECT_FALSE(handler.write(session, 0, data)); 44 } 45 46 TEST_F(SmbiosBlobHandlerReadWriteTest, WritingTooMuchByOffsetOfOne) 47 { 48 std::vector<uint8_t> data(handlerMaxBufferSize, 0x11); 49 50 EXPECT_TRUE(handler.open(session, blobs::OpenFlags::write, expectedBlobId)); 51 EXPECT_FALSE(handler.write(session, 1, data)); 52 } 53 54 TEST_F(SmbiosBlobHandlerReadWriteTest, WritingOneByteBeyondEndFromOffsetFails) 55 { 56 std::vector<uint8_t> data = {0x01, 0x02}; 57 58 EXPECT_TRUE(handler.open(session, blobs::OpenFlags::write, expectedBlobId)); 59 EXPECT_FALSE(handler.write(session, handlerMaxBufferSize - 1, data)); 60 } 61 62 TEST_F(SmbiosBlobHandlerReadWriteTest, WritingOneByteAtOffsetBeyondEndFails) 63 { 64 std::vector<uint8_t> data = {0x01}; 65 66 EXPECT_TRUE(handler.open(session, blobs::OpenFlags::write, expectedBlobId)); 67 EXPECT_FALSE(handler.write(session, handlerMaxBufferSize, data)); 68 } 69 70 TEST_F(SmbiosBlobHandlerReadWriteTest, WritingFullBufferAtOffsetZeroSucceeds) 71 { 72 std::vector<uint8_t> data(handlerMaxBufferSize, 0x01); 73 74 EXPECT_TRUE(handler.open(session, blobs::OpenFlags::write, expectedBlobId)); 75 EXPECT_TRUE(handler.write(session, 0, data)); 76 } 77 78 TEST_F(SmbiosBlobHandlerReadWriteTest, WritingOneByteToTheLastOffsetSucceeds) 79 { 80 std::vector<uint8_t> data = {0x01}; 81 82 EXPECT_TRUE(handler.open(session, blobs::OpenFlags::write, expectedBlobId)); 83 EXPECT_TRUE(handler.write(session, handlerMaxBufferSize - 1, data)); 84 } 85 86 TEST_F(SmbiosBlobHandlerReadWriteTest, ReadAlwaysReturnsEmpty) 87 { 88 const uint32_t testOffset = 0; 89 const std::vector<uint8_t> testData = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; 90 91 EXPECT_TRUE(handler.open(session, blobs::OpenFlags::write, expectedBlobId)); 92 EXPECT_TRUE(handler.write(session, testOffset, testData)); 93 94 EXPECT_THAT(handler.read(session, testOffset, testData.size()), IsEmpty()); 95 96 for (size_t i = 0; i < testData.size(); ++i) 97 { 98 EXPECT_THAT(handler.read(session, i, 1), IsEmpty()); 99 } 100 } 101 102 } // namespace blobs 103