blob: 9a79c361e3521b68d36ea765498be13b106ceddb [file] [log] [blame]
Kun Yid297c9f2019-01-09 13:52:30 -08001#include "handler_unittest.hpp"
2
3using ::testing::_;
4using ::testing::ElementsAre;
5using ::testing::IsEmpty;
6using ::testing::Return;
7using ::testing::StartsWith;
8
9using namespace std::string_literals;
10
11namespace blobs
12{
13
14class BinaryStoreBlobHandlerCommitTest : public BinaryStoreBlobHandlerTest
15{
16 protected:
17 BinaryStoreBlobHandlerCommitTest()
18 {
19 addDefaultStore(commitTestBaseId);
20 }
21
22 static inline std::string commitTestBaseId = "/test/"s;
23 static inline std::string commitTestBlobId = "/test/blob0"s;
24 static inline std::vector<uint8_t> commitTestData = {0, 1, 2, 3, 4,
25 5, 6, 7, 8, 9};
26 static inline std::vector<uint8_t> commitTestDataToOverwrite = {10, 11, 12,
27 13, 14};
28 static inline std::vector<uint8_t> commitMetaUnused;
29
30 static inline uint16_t commitTestSessionId = 0;
31 static inline uint16_t commitTestNewSessionId = 1;
32 static inline uint32_t commitTestOffset = 0;
33
34 void openAndWriteTestData()
35 {
36 uint16_t flags = OpenFlags::read | OpenFlags::write;
37 EXPECT_TRUE(handler.open(commitTestSessionId, flags, commitTestBlobId));
38 EXPECT_TRUE(handler.write(commitTestSessionId, commitTestOffset,
39 commitTestData));
40 }
41
42 void openWriteThenCommitData()
43 {
44 openAndWriteTestData();
45 EXPECT_TRUE(handler.commit(commitTestSessionId, commitMetaUnused));
46 }
47};
48
49TEST_F(BinaryStoreBlobHandlerCommitTest, CommittedDataIsReadable)
50{
51 openWriteThenCommitData();
52
53 EXPECT_EQ(commitTestData,
54 handler.read(commitTestSessionId, commitTestOffset,
55 commitTestData.size()));
56}
57
58TEST_F(BinaryStoreBlobHandlerCommitTest, CommittedDataCanBeReopened)
59{
60 openWriteThenCommitData();
61
62 EXPECT_TRUE(handler.close(commitTestSessionId));
63 EXPECT_TRUE(handler.open(commitTestNewSessionId, OpenFlags::read,
64 commitTestBlobId));
65 EXPECT_EQ(commitTestData,
66 handler.read(commitTestNewSessionId, commitTestOffset,
67 commitTestData.size()));
68}
69
70TEST_F(BinaryStoreBlobHandlerCommitTest, OverwrittenDataCanBeCommitted)
71{
72 openWriteThenCommitData();
73
74 EXPECT_TRUE(handler.write(commitTestSessionId, commitTestOffset,
75 commitTestDataToOverwrite));
76 EXPECT_TRUE(handler.commit(commitTestSessionId, commitMetaUnused));
77 EXPECT_TRUE(handler.close(commitTestSessionId));
78
79 EXPECT_TRUE(handler.open(commitTestNewSessionId, OpenFlags::read,
80 commitTestBlobId));
81 EXPECT_EQ(commitTestDataToOverwrite,
82 handler.read(commitTestNewSessionId, commitTestOffset,
83 commitTestDataToOverwrite.size()));
84}
85
86TEST_F(BinaryStoreBlobHandlerCommitTest, UncommittedDataIsLostUponClose)
87{
88 openWriteThenCommitData();
89
90 EXPECT_TRUE(handler.write(commitTestSessionId, commitTestOffset,
91 commitTestDataToOverwrite));
92 EXPECT_TRUE(handler.close(commitTestSessionId));
93
94 EXPECT_TRUE(handler.open(commitTestNewSessionId, OpenFlags::read,
95 commitTestBlobId));
96 EXPECT_EQ(commitTestData,
97 handler.read(commitTestNewSessionId, commitTestOffset,
98 commitTestData.size()));
99}
100
101} // namespace blobs