blob: c3d10aa2cf972e7c9606af1930ca2171202b1ee4 [file] [log] [blame]
Kun Yi38146a02018-12-18 21:54:26 -08001#include "handler_unittest.hpp"
2
3using ::testing::_;
4using ::testing::Return;
5using ::testing::StartsWith;
6
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 Yi38146a02018-12-18 21:54:26 -080024TEST_F(BinaryStoreBlobHandlerOpenTest, FailWhenCannotHandleId)
25{
Kun Yi64dc05c2018-12-19 13:19:03 -080026 EXPECT_FALSE(handler.open(openTestSessionId, openTestROFlags,
27 openTestInvalidBlobId));
Kun Yi38146a02018-12-18 21:54:26 -080028}
29
30TEST_F(BinaryStoreBlobHandlerOpenTest, FailWhenStoreOpenReturnsFailure)
31{
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
43TEST_F(BinaryStoreBlobHandlerOpenTest, SucceedWhenStoreOpenReturnsTrue)
44{
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 Yic0adbc32018-12-18 22:35:29 -080056TEST_F(BinaryStoreBlobHandlerOpenTest, CloseFailForInvalidSession)
57{
58 uint16_t invalidSessionId = 1;
59 EXPECT_FALSE(handler.close(invalidSessionId));
60}
61
62TEST_F(BinaryStoreBlobHandlerOpenTest, CloseFailWhenStoreCloseFails)
63{
Kun Yi64dc05c2018-12-19 13:19:03 -080064 auto store = defaultMockStore(openTestBaseId);
Kun Yic0adbc32018-12-18 22:35:29 -080065
Kun Yi64dc05c2018-12-19 13:19:03 -080066 EXPECT_CALL(*store, openOrCreateBlob(_, openTestROFlags))
67 .WillOnce(Return(true));
68 EXPECT_CALL(*store, close()).WillOnce(Return(false));
Kun Yic0adbc32018-12-18 22:35:29 -080069
Kun Yi64dc05c2018-12-19 13:19:03 -080070 handler.addNewBinaryStore(std::move(store));
Kun Yic0adbc32018-12-18 22:35:29 -080071
Kun Yi64dc05c2018-12-19 13:19:03 -080072 EXPECT_TRUE(
73 handler.open(openTestSessionId, openTestROFlags, openTestBlobId));
74 EXPECT_FALSE(handler.close(openTestSessionId));
Kun Yic0adbc32018-12-18 22:35:29 -080075}
76
77TEST_F(BinaryStoreBlobHandlerOpenTest, CloseSucceedWhenStoreCloseSucceeds)
78{
Kun Yi64dc05c2018-12-19 13:19:03 -080079 auto store = defaultMockStore(openTestBaseId);
Kun Yic0adbc32018-12-18 22:35:29 -080080
Kun Yi64dc05c2018-12-19 13:19:03 -080081 EXPECT_CALL(*store, openOrCreateBlob(_, openTestROFlags))
82 .WillOnce(Return(true));
83 EXPECT_CALL(*store, close()).WillOnce(Return(true));
Kun Yic0adbc32018-12-18 22:35:29 -080084
Kun Yi64dc05c2018-12-19 13:19:03 -080085 handler.addNewBinaryStore(std::move(store));
Kun Yic0adbc32018-12-18 22:35:29 -080086
Kun Yi64dc05c2018-12-19 13:19:03 -080087 EXPECT_TRUE(
88 handler.open(openTestSessionId, openTestROFlags, openTestBlobId));
89 EXPECT_TRUE(handler.close(openTestSessionId));
Kun Yic0adbc32018-12-18 22:35:29 -080090}
91
92TEST_F(BinaryStoreBlobHandlerOpenTest, ClosedSessionCannotBeReclosed)
93{
Kun Yi64dc05c2018-12-19 13:19:03 -080094 auto store = defaultMockStore(openTestBaseId);
Kun Yic0adbc32018-12-18 22:35:29 -080095
Kun Yi64dc05c2018-12-19 13:19:03 -080096 EXPECT_CALL(*store, openOrCreateBlob(_, openTestROFlags))
97 .WillOnce(Return(true));
98 EXPECT_CALL(*store, close()).WillRepeatedly(Return(true));
Kun Yic0adbc32018-12-18 22:35:29 -080099
Kun Yi64dc05c2018-12-19 13:19:03 -0800100 handler.addNewBinaryStore(std::move(store));
Kun Yic0adbc32018-12-18 22:35:29 -0800101
Kun Yi64dc05c2018-12-19 13:19:03 -0800102 EXPECT_TRUE(
103 handler.open(openTestSessionId, openTestROFlags, openTestBlobId));
104 EXPECT_TRUE(handler.close(openTestSessionId));
105 EXPECT_FALSE(handler.close(openTestSessionId));
106 EXPECT_FALSE(handler.close(openTestSessionId));
Kun Yic0adbc32018-12-18 22:35:29 -0800107}
108
Kun Yi38146a02018-12-18 21:54:26 -0800109} // namespace blobs