blob: 5706041a848d65809e0b74e06de1084affce26b1 [file] [log] [blame]
Kun Yi38146a02018-12-18 21:54:26 -08001#include "handler_unittest.hpp"
2
3using ::testing::_;
4using ::testing::Return;
5using ::testing::StartsWith;
Kun Yi6baa7132019-01-08 21:21:02 -08006using ::testing::UnorderedElementsAreArray;
Kun Yi38146a02018-12-18 21:54:26 -08007
8using namespace std::string_literals;
9using namespace binstore;
10
11namespace blobs
12{
13
Kun Yi64dc05c2018-12-19 13:19:03 -080014class BinaryStoreBlobHandlerOpenTest : public BinaryStoreBlobHandlerTest
15{
16 protected:
17 static inline std::string openTestBaseId = "/test/"s;
18 static inline std::string openTestBlobId = "/test/blob0"s;
19 static inline std::string openTestInvalidBlobId = "/invalid/blob0"s;
20 static inline uint16_t openTestROFlags = OpenFlags::read;
21 static inline uint16_t openTestRWFlags = OpenFlags::read | OpenFlags::write;
22 static inline uint16_t openTestSessionId = 0;
23};
24
Kun Yi6baa7132019-01-08 21:21:02 -080025TEST_F(BinaryStoreBlobHandlerOpenTest, OpenFailWhenNoBlob)
Kun Yi38146a02018-12-18 21:54:26 -080026{
Kun Yi6baa7132019-01-08 21:21:02 -080027 EXPECT_FALSE(
28 handler.open(openTestSessionId, openTestROFlags, openTestBlobId));
Kun Yi38146a02018-12-18 21:54:26 -080029}
30
Kun Yi6baa7132019-01-08 21:21:02 -080031TEST_F(BinaryStoreBlobHandlerOpenTest, OpenFailWhenStoreOpenReturnsFailure)
Kun Yi38146a02018-12-18 21:54:26 -080032{
Kun Yi64dc05c2018-12-19 13:19:03 -080033 auto store = defaultMockStore(openTestBaseId);
Kun Yi38146a02018-12-18 21:54:26 -080034
Kun Yi64dc05c2018-12-19 13:19:03 -080035 EXPECT_CALL(*store, openOrCreateBlob(_, openTestROFlags))
36 .WillOnce(Return(false));
Kun Yi38146a02018-12-18 21:54:26 -080037
Kun Yi64dc05c2018-12-19 13:19:03 -080038 handler.addNewBinaryStore(std::move(store));
Kun Yi38146a02018-12-18 21:54:26 -080039
Kun Yi64dc05c2018-12-19 13:19:03 -080040 EXPECT_FALSE(
41 handler.open(openTestSessionId, openTestROFlags, openTestBlobId));
Kun Yi38146a02018-12-18 21:54:26 -080042}
43
Kun Yi6baa7132019-01-08 21:21:02 -080044TEST_F(BinaryStoreBlobHandlerOpenTest, OpenSucceedWhenStoreOpenReturnsTrue)
Kun Yi38146a02018-12-18 21:54:26 -080045{
Kun Yi64dc05c2018-12-19 13:19:03 -080046 auto store = defaultMockStore(openTestBaseId);
Kun Yi38146a02018-12-18 21:54:26 -080047
Kun Yi64dc05c2018-12-19 13:19:03 -080048 EXPECT_CALL(*store, openOrCreateBlob(_, openTestROFlags))
49 .WillOnce(Return(true));
Kun Yi38146a02018-12-18 21:54:26 -080050
Kun Yi64dc05c2018-12-19 13:19:03 -080051 handler.addNewBinaryStore(std::move(store));
Kun Yi38146a02018-12-18 21:54:26 -080052
Kun Yi64dc05c2018-12-19 13:19:03 -080053 EXPECT_TRUE(
54 handler.open(openTestSessionId, openTestROFlags, openTestBlobId));
Kun Yi38146a02018-12-18 21:54:26 -080055}
56
Kun Yi6baa7132019-01-08 21:21:02 -080057TEST_F(BinaryStoreBlobHandlerOpenTest, OpenFailForNonMatchingBasePath)
58{
59 addDefaultStore(openTestBaseId);
60 EXPECT_FALSE(handler.open(openTestSessionId, openTestROFlags,
61 openTestInvalidBlobId));
62}
63
64TEST_F(BinaryStoreBlobHandlerOpenTest, OpenCloseSucceedForValidBlobId)
65{
66 addDefaultStore(openTestBaseId);
67
68 EXPECT_FALSE(handler.close(openTestSessionId)); // Haven't open
69 EXPECT_TRUE(
70 handler.open(openTestSessionId, openTestROFlags, openTestBlobId));
71 EXPECT_TRUE(handler.close(openTestSessionId));
72 EXPECT_FALSE(handler.close(openTestSessionId)); // Already closed
73}
74
75TEST_F(BinaryStoreBlobHandlerOpenTest, OpenSuccessShowsBlobId)
76{
77 addDefaultStore(openTestBaseId);
78
79 EXPECT_TRUE(
80 handler.open(openTestSessionId, openTestROFlags, openTestBlobId));
81 EXPECT_THAT(handler.getBlobIds(),
82 UnorderedElementsAreArray({openTestBaseId, openTestBlobId}));
83}
84
Kun Yic0adbc32018-12-18 22:35:29 -080085TEST_F(BinaryStoreBlobHandlerOpenTest, CloseFailForInvalidSession)
86{
87 uint16_t invalidSessionId = 1;
Kun Yi6baa7132019-01-08 21:21:02 -080088
89 addDefaultStore(openTestBaseId);
90 EXPECT_TRUE(
91 handler.open(openTestSessionId, openTestROFlags, openTestBlobId));
Kun Yic0adbc32018-12-18 22:35:29 -080092 EXPECT_FALSE(handler.close(invalidSessionId));
93}
94
95TEST_F(BinaryStoreBlobHandlerOpenTest, CloseFailWhenStoreCloseFails)
96{
Kun Yi64dc05c2018-12-19 13:19:03 -080097 auto store = defaultMockStore(openTestBaseId);
Kun Yic0adbc32018-12-18 22:35:29 -080098
Kun Yi64dc05c2018-12-19 13:19:03 -080099 EXPECT_CALL(*store, openOrCreateBlob(_, openTestROFlags))
100 .WillOnce(Return(true));
101 EXPECT_CALL(*store, close()).WillOnce(Return(false));
Kun Yic0adbc32018-12-18 22:35:29 -0800102
Kun Yi64dc05c2018-12-19 13:19:03 -0800103 handler.addNewBinaryStore(std::move(store));
Kun Yic0adbc32018-12-18 22:35:29 -0800104
Kun Yi64dc05c2018-12-19 13:19:03 -0800105 EXPECT_TRUE(
106 handler.open(openTestSessionId, openTestROFlags, openTestBlobId));
107 EXPECT_FALSE(handler.close(openTestSessionId));
Kun Yic0adbc32018-12-18 22:35:29 -0800108}
109
110TEST_F(BinaryStoreBlobHandlerOpenTest, CloseSucceedWhenStoreCloseSucceeds)
111{
Kun Yi64dc05c2018-12-19 13:19:03 -0800112 auto store = defaultMockStore(openTestBaseId);
Kun Yic0adbc32018-12-18 22:35:29 -0800113
Kun Yi64dc05c2018-12-19 13:19:03 -0800114 EXPECT_CALL(*store, openOrCreateBlob(_, openTestROFlags))
115 .WillOnce(Return(true));
116 EXPECT_CALL(*store, close()).WillOnce(Return(true));
Kun Yic0adbc32018-12-18 22:35:29 -0800117
Kun Yi64dc05c2018-12-19 13:19:03 -0800118 handler.addNewBinaryStore(std::move(store));
Kun Yic0adbc32018-12-18 22:35:29 -0800119
Kun Yi64dc05c2018-12-19 13:19:03 -0800120 EXPECT_TRUE(
121 handler.open(openTestSessionId, openTestROFlags, openTestBlobId));
122 EXPECT_TRUE(handler.close(openTestSessionId));
Kun Yic0adbc32018-12-18 22:35:29 -0800123}
124
125TEST_F(BinaryStoreBlobHandlerOpenTest, ClosedSessionCannotBeReclosed)
126{
Kun Yi64dc05c2018-12-19 13:19:03 -0800127 auto store = defaultMockStore(openTestBaseId);
Kun Yic0adbc32018-12-18 22:35:29 -0800128
Kun Yi64dc05c2018-12-19 13:19:03 -0800129 EXPECT_CALL(*store, openOrCreateBlob(_, openTestROFlags))
130 .WillOnce(Return(true));
131 EXPECT_CALL(*store, close()).WillRepeatedly(Return(true));
Kun Yic0adbc32018-12-18 22:35:29 -0800132
Kun Yi64dc05c2018-12-19 13:19:03 -0800133 handler.addNewBinaryStore(std::move(store));
Kun Yic0adbc32018-12-18 22:35:29 -0800134
Kun Yi64dc05c2018-12-19 13:19:03 -0800135 EXPECT_TRUE(
136 handler.open(openTestSessionId, openTestROFlags, openTestBlobId));
137 EXPECT_TRUE(handler.close(openTestSessionId));
138 EXPECT_FALSE(handler.close(openTestSessionId));
139 EXPECT_FALSE(handler.close(openTestSessionId));
Kun Yic0adbc32018-12-18 22:35:29 -0800140}
141
Kun Yi38146a02018-12-18 21:54:26 -0800142} // namespace blobs