summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--test/storage/offline_database.test.cpp27
1 files changed, 27 insertions, 0 deletions
diff --git a/test/storage/offline_database.test.cpp b/test/storage/offline_database.test.cpp
index ef7ad257d7..a0b780a4ea 100644
--- a/test/storage/offline_database.test.cpp
+++ b/test/storage/offline_database.test.cpp
@@ -1875,3 +1875,30 @@ TEST(OfflineDatabase, ResetDatabase) {
EXPECT_EQ(1u, log.count({ EventSeverity::Warning, Event::Database, -1, "Removing existing incompatible offline database" }));
EXPECT_EQ(0u, log.uncheckedCount());
}
+
+TEST(OfflineDatabase, PutResourceReadOnlyMode) {
+ FixtureLog log;
+ OfflineDatabase db(":memory:");
+
+ Resource resource{Resource::Style, "http://example.com/"};
+ Response response;
+ response.data = std::make_shared<std::string>("success");
+
+ // In read-only mode put() is a no-op
+ db.reopenDatabaseReadOnly(true /*readOnly*/);
+ auto failedPutResult = db.put(resource, response);
+ EXPECT_FALSE(failedPutResult.first);
+ EXPECT_EQ(0u, failedPutResult.second);
+
+ // put() works, if read-only mode is disabled
+ db.reopenDatabaseReadOnly(false /*readOnly*/);
+ auto succeededPutResult = db.put(resource, response);
+ EXPECT_TRUE(succeededPutResult.first);
+ EXPECT_EQ(7u, succeededPutResult.second);
+
+ auto getResult = db.get(resource);
+ EXPECT_EQ(nullptr, getResult->error);
+ EXPECT_EQ("success", *getResult->data);
+
+ EXPECT_EQ(0u, log.uncheckedCount());
+}