1 #include "handler_unittest.hpp"
2
3 #include <blobs-ipmid/blobs.hpp>
4
5 #include <cstdint>
6 #include <vector>
7
8 #include <gtest/gtest.h>
9
10 namespace blobs
11 {
12
13 class SmbiosBlobHandlerStatCloseTest : public SmbiosBlobHandlerTest
14 {
15 protected:
16 blobs::BlobMeta meta;
17
18 // Initialize expected_meta_ with empty members
19 blobs::BlobMeta expected_meta_session = {};
20 blobs::BlobMeta expected_meta_path = {};
21 };
22
TEST_F(SmbiosBlobHandlerStatCloseTest,InvalidSessionStatIsRejected)23 TEST_F(SmbiosBlobHandlerStatCloseTest, InvalidSessionStatIsRejected)
24 {
25 EXPECT_FALSE(handler.stat(session, &meta));
26 }
27
TEST_F(SmbiosBlobHandlerStatCloseTest,SessionStatAlwaysInitialReadAndWrite)28 TEST_F(SmbiosBlobHandlerStatCloseTest, SessionStatAlwaysInitialReadAndWrite)
29 {
30 // Verify the session stat returns the information for a session.
31
32 EXPECT_TRUE(handler.open(session, blobs::OpenFlags::write, expectedBlobId));
33
34 EXPECT_TRUE(handler.stat(session, &meta));
35 expected_meta_session.blobState = blobs::StateFlags::open_write;
36 EXPECT_EQ(meta, expected_meta_session);
37
38 EXPECT_TRUE(handler.stat(expectedBlobId, &meta));
39 expected_meta_path.blobState = blobs::StateFlags::open_write;
40 EXPECT_EQ(meta, expected_meta_path);
41 }
42
TEST_F(SmbiosBlobHandlerStatCloseTest,AfterWriteMetadataLengthMatches)43 TEST_F(SmbiosBlobHandlerStatCloseTest, AfterWriteMetadataLengthMatches)
44 {
45 // Verify that after writes, the length returned matches.
46
47 std::vector<uint8_t> data = {0x01};
48 EXPECT_TRUE(handler.open(session, blobs::OpenFlags::write, expectedBlobId));
49 EXPECT_TRUE(handler.write(session, handlerMaxBufferSize - 1, data));
50
51 // We wrote one byte to the last index, making the length the buffer size.
52 EXPECT_TRUE(handler.stat(session, &meta));
53 expected_meta_session.size = handlerMaxBufferSize;
54 expected_meta_session.blobState = blobs::StateFlags::open_write;
55 EXPECT_EQ(meta, expected_meta_session);
56
57 EXPECT_TRUE(handler.stat(expectedBlobId, &meta));
58 expected_meta_path.size = handlerMaxBufferSize;
59 expected_meta_path.blobState = blobs::StateFlags::open_write;
60 EXPECT_EQ(meta, expected_meta_path);
61 }
62
TEST_F(SmbiosBlobHandlerStatCloseTest,CloseWithInvalidSessionFails)63 TEST_F(SmbiosBlobHandlerStatCloseTest, CloseWithInvalidSessionFails)
64 {
65 // Verify you cannot close an invalid session.
66
67 EXPECT_FALSE(handler.close(session));
68 }
69
TEST_F(SmbiosBlobHandlerStatCloseTest,CloseWithValidSessionSuccess)70 TEST_F(SmbiosBlobHandlerStatCloseTest, CloseWithValidSessionSuccess)
71 {
72 // Verify you can close a valid session.
73
74 EXPECT_TRUE(handler.open(session, 0, expectedBlobId));
75
76 EXPECT_TRUE(handler.close(session));
77 }
78 } // namespace blobs
79