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