blob: 93a3acd905efc353f636d2a15040bc1c2fa38919 [file] [log] [blame]
Kun Yi38146a02018-12-18 21:54:26 -08001#include "handler_unittest.hpp"
2
3using ::testing::_;
4using ::testing::Return;
Kun Yi6baa7132019-01-08 21:21:02 -08005using ::testing::UnorderedElementsAreArray;
Kun Yi38146a02018-12-18 21:54:26 -08006
7using namespace std::string_literals;
8using namespace binstore;
9
10namespace blobs
11{
12
Kun Yi64dc05c2018-12-19 13:19:03 -080013class BinaryStoreBlobHandlerOpenTest : public BinaryStoreBlobHandlerTest
14{
15 protected:
16 static inline std::string openTestBaseId = "/test/"s;
17 static inline std::string openTestBlobId = "/test/blob0"s;
18 static inline std::string openTestInvalidBlobId = "/invalid/blob0"s;
19 static inline uint16_t openTestROFlags = OpenFlags::read;
20 static inline uint16_t openTestRWFlags = OpenFlags::read | OpenFlags::write;
21 static inline uint16_t openTestSessionId = 0;
22};
23
Kun Yi6baa7132019-01-08 21:21:02 -080024TEST_F(BinaryStoreBlobHandlerOpenTest, OpenFailWhenNoBlob)
Kun Yi38146a02018-12-18 21:54:26 -080025{
Kun Yi6baa7132019-01-08 21:21:02 -080026 EXPECT_FALSE(
27 handler.open(openTestSessionId, openTestROFlags, openTestBlobId));
Kun Yi38146a02018-12-18 21:54:26 -080028}
29
Kun Yi6baa7132019-01-08 21:21:02 -080030TEST_F(BinaryStoreBlobHandlerOpenTest, OpenFailWhenStoreOpenReturnsFailure)
Kun Yi38146a02018-12-18 21:54:26 -080031{
Kun Yi64dc05c2018-12-19 13:19:03 -080032 auto store = defaultMockStore(openTestBaseId);
Kun Yi38146a02018-12-18 21:54:26 -080033
Kun Yi64dc05c2018-12-19 13:19:03 -080034 EXPECT_CALL(*store, openOrCreateBlob(_, openTestROFlags))
35 .WillOnce(Return(false));
Kun Yi38146a02018-12-18 21:54:26 -080036
Kun Yi64dc05c2018-12-19 13:19:03 -080037 handler.addNewBinaryStore(std::move(store));
Kun Yi38146a02018-12-18 21:54:26 -080038
Kun Yi64dc05c2018-12-19 13:19:03 -080039 EXPECT_FALSE(
40 handler.open(openTestSessionId, openTestROFlags, openTestBlobId));
Kun Yi38146a02018-12-18 21:54:26 -080041}
42
Kun Yi6baa7132019-01-08 21:21:02 -080043TEST_F(BinaryStoreBlobHandlerOpenTest, OpenSucceedWhenStoreOpenReturnsTrue)
Kun Yi38146a02018-12-18 21:54:26 -080044{
Kun Yi64dc05c2018-12-19 13:19:03 -080045 auto store = defaultMockStore(openTestBaseId);
Kun Yi38146a02018-12-18 21:54:26 -080046
Kun Yi64dc05c2018-12-19 13:19:03 -080047 EXPECT_CALL(*store, openOrCreateBlob(_, openTestROFlags))
48 .WillOnce(Return(true));
Kun Yi38146a02018-12-18 21:54:26 -080049
Kun Yi64dc05c2018-12-19 13:19:03 -080050 handler.addNewBinaryStore(std::move(store));
Kun Yi38146a02018-12-18 21:54:26 -080051
Kun Yi64dc05c2018-12-19 13:19:03 -080052 EXPECT_TRUE(
53 handler.open(openTestSessionId, openTestROFlags, openTestBlobId));
Kun Yi38146a02018-12-18 21:54:26 -080054}
55
Kun Yi6baa7132019-01-08 21:21:02 -080056TEST_F(BinaryStoreBlobHandlerOpenTest, OpenFailForNonMatchingBasePath)
57{
58 addDefaultStore(openTestBaseId);
59 EXPECT_FALSE(handler.open(openTestSessionId, openTestROFlags,
60 openTestInvalidBlobId));
61}
62
63TEST_F(BinaryStoreBlobHandlerOpenTest, OpenCloseSucceedForValidBlobId)
64{
65 addDefaultStore(openTestBaseId);
66
67 EXPECT_FALSE(handler.close(openTestSessionId)); // Haven't open
68 EXPECT_TRUE(
69 handler.open(openTestSessionId, openTestROFlags, openTestBlobId));
70 EXPECT_TRUE(handler.close(openTestSessionId));
71 EXPECT_FALSE(handler.close(openTestSessionId)); // Already closed
72}
73
74TEST_F(BinaryStoreBlobHandlerOpenTest, OpenSuccessShowsBlobId)
75{
76 addDefaultStore(openTestBaseId);
77
78 EXPECT_TRUE(
79 handler.open(openTestSessionId, openTestROFlags, openTestBlobId));
80 EXPECT_THAT(handler.getBlobIds(),
81 UnorderedElementsAreArray({openTestBaseId, openTestBlobId}));
82}
83
Kun Yic0adbc32018-12-18 22:35:29 -080084TEST_F(BinaryStoreBlobHandlerOpenTest, CloseFailForInvalidSession)
85{
86 uint16_t invalidSessionId = 1;
Kun Yi6baa7132019-01-08 21:21:02 -080087
88 addDefaultStore(openTestBaseId);
89 EXPECT_TRUE(
90 handler.open(openTestSessionId, openTestROFlags, openTestBlobId));
Kun Yic0adbc32018-12-18 22:35:29 -080091 EXPECT_FALSE(handler.close(invalidSessionId));
92}
93
94TEST_F(BinaryStoreBlobHandlerOpenTest, CloseFailWhenStoreCloseFails)
95{
Kun Yi64dc05c2018-12-19 13:19:03 -080096 auto store = defaultMockStore(openTestBaseId);
Kun Yic0adbc32018-12-18 22:35:29 -080097
Kun Yi64dc05c2018-12-19 13:19:03 -080098 EXPECT_CALL(*store, openOrCreateBlob(_, openTestROFlags))
99 .WillOnce(Return(true));
100 EXPECT_CALL(*store, close()).WillOnce(Return(false));
Kun Yic0adbc32018-12-18 22:35:29 -0800101
Kun Yi64dc05c2018-12-19 13:19:03 -0800102 handler.addNewBinaryStore(std::move(store));
Kun Yic0adbc32018-12-18 22:35:29 -0800103
Kun Yi64dc05c2018-12-19 13:19:03 -0800104 EXPECT_TRUE(
105 handler.open(openTestSessionId, openTestROFlags, openTestBlobId));
106 EXPECT_FALSE(handler.close(openTestSessionId));
Kun Yic0adbc32018-12-18 22:35:29 -0800107}
108
109TEST_F(BinaryStoreBlobHandlerOpenTest, CloseSucceedWhenStoreCloseSucceeds)
110{
Kun Yi64dc05c2018-12-19 13:19:03 -0800111 auto store = defaultMockStore(openTestBaseId);
Kun Yic0adbc32018-12-18 22:35:29 -0800112
Kun Yi64dc05c2018-12-19 13:19:03 -0800113 EXPECT_CALL(*store, openOrCreateBlob(_, openTestROFlags))
114 .WillOnce(Return(true));
115 EXPECT_CALL(*store, close()).WillOnce(Return(true));
Kun Yic0adbc32018-12-18 22:35:29 -0800116
Kun Yi64dc05c2018-12-19 13:19:03 -0800117 handler.addNewBinaryStore(std::move(store));
Kun Yic0adbc32018-12-18 22:35:29 -0800118
Kun Yi64dc05c2018-12-19 13:19:03 -0800119 EXPECT_TRUE(
120 handler.open(openTestSessionId, openTestROFlags, openTestBlobId));
121 EXPECT_TRUE(handler.close(openTestSessionId));
Kun Yic0adbc32018-12-18 22:35:29 -0800122}
123
124TEST_F(BinaryStoreBlobHandlerOpenTest, ClosedSessionCannotBeReclosed)
125{
Kun Yi64dc05c2018-12-19 13:19:03 -0800126 auto store = defaultMockStore(openTestBaseId);
Kun Yic0adbc32018-12-18 22:35:29 -0800127
Kun Yi64dc05c2018-12-19 13:19:03 -0800128 EXPECT_CALL(*store, openOrCreateBlob(_, openTestROFlags))
129 .WillOnce(Return(true));
130 EXPECT_CALL(*store, close()).WillRepeatedly(Return(true));
Kun Yic0adbc32018-12-18 22:35:29 -0800131
Kun Yi64dc05c2018-12-19 13:19:03 -0800132 handler.addNewBinaryStore(std::move(store));
Kun Yic0adbc32018-12-18 22:35:29 -0800133
Kun Yi64dc05c2018-12-19 13:19:03 -0800134 EXPECT_TRUE(
135 handler.open(openTestSessionId, openTestROFlags, openTestBlobId));
136 EXPECT_TRUE(handler.close(openTestSessionId));
137 EXPECT_FALSE(handler.close(openTestSessionId));
138 EXPECT_FALSE(handler.close(openTestSessionId));
Kun Yic0adbc32018-12-18 22:35:29 -0800139}
140
Kun Yi38146a02018-12-18 21:54:26 -0800141} // namespace blobs