binarystore: Implement open/close
Opening a blob will either have read flag for read only access, or
read|write flag for read/write access. When opening a supported path if
the blob doesn't exist yet, the handler will create an empty blob.
Signed-off-by: Kun Yi <kunyi@google.com>
Change-Id: I3d2c5b761227b77cda8bbc6fa66515e9921c066c
diff --git a/test/handler_open_unittest.cpp b/test/handler_open_unittest.cpp
index c3d10aa..5706041 100644
--- a/test/handler_open_unittest.cpp
+++ b/test/handler_open_unittest.cpp
@@ -3,6 +3,7 @@
using ::testing::_;
using ::testing::Return;
using ::testing::StartsWith;
+using ::testing::UnorderedElementsAreArray;
using namespace std::string_literals;
using namespace binstore;
@@ -21,13 +22,13 @@
static inline uint16_t openTestSessionId = 0;
};
-TEST_F(BinaryStoreBlobHandlerOpenTest, FailWhenCannotHandleId)
+TEST_F(BinaryStoreBlobHandlerOpenTest, OpenFailWhenNoBlob)
{
- EXPECT_FALSE(handler.open(openTestSessionId, openTestROFlags,
- openTestInvalidBlobId));
+ EXPECT_FALSE(
+ handler.open(openTestSessionId, openTestROFlags, openTestBlobId));
}
-TEST_F(BinaryStoreBlobHandlerOpenTest, FailWhenStoreOpenReturnsFailure)
+TEST_F(BinaryStoreBlobHandlerOpenTest, OpenFailWhenStoreOpenReturnsFailure)
{
auto store = defaultMockStore(openTestBaseId);
@@ -40,7 +41,7 @@
handler.open(openTestSessionId, openTestROFlags, openTestBlobId));
}
-TEST_F(BinaryStoreBlobHandlerOpenTest, SucceedWhenStoreOpenReturnsTrue)
+TEST_F(BinaryStoreBlobHandlerOpenTest, OpenSucceedWhenStoreOpenReturnsTrue)
{
auto store = defaultMockStore(openTestBaseId);
@@ -53,9 +54,41 @@
handler.open(openTestSessionId, openTestROFlags, openTestBlobId));
}
+TEST_F(BinaryStoreBlobHandlerOpenTest, OpenFailForNonMatchingBasePath)
+{
+ addDefaultStore(openTestBaseId);
+ EXPECT_FALSE(handler.open(openTestSessionId, openTestROFlags,
+ openTestInvalidBlobId));
+}
+
+TEST_F(BinaryStoreBlobHandlerOpenTest, OpenCloseSucceedForValidBlobId)
+{
+ addDefaultStore(openTestBaseId);
+
+ EXPECT_FALSE(handler.close(openTestSessionId)); // Haven't open
+ EXPECT_TRUE(
+ handler.open(openTestSessionId, openTestROFlags, openTestBlobId));
+ EXPECT_TRUE(handler.close(openTestSessionId));
+ EXPECT_FALSE(handler.close(openTestSessionId)); // Already closed
+}
+
+TEST_F(BinaryStoreBlobHandlerOpenTest, OpenSuccessShowsBlobId)
+{
+ addDefaultStore(openTestBaseId);
+
+ EXPECT_TRUE(
+ handler.open(openTestSessionId, openTestROFlags, openTestBlobId));
+ EXPECT_THAT(handler.getBlobIds(),
+ UnorderedElementsAreArray({openTestBaseId, openTestBlobId}));
+}
+
TEST_F(BinaryStoreBlobHandlerOpenTest, CloseFailForInvalidSession)
{
uint16_t invalidSessionId = 1;
+
+ addDefaultStore(openTestBaseId);
+ EXPECT_TRUE(
+ handler.open(openTestSessionId, openTestROFlags, openTestBlobId));
EXPECT_FALSE(handler.close(invalidSessionId));
}