summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com>2020-04-22 13:02:39 +0300
committerMikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com>2020-04-22 19:21:56 +0300
commitd8639e2f9c332a1c2fa7d75aab04bc715e233066 (patch)
tree14f2d0123be4f3cf629ff1ed513f2ab9b12da325
parentb120cdd207ef7d0f296ff6607cc481d882a2aa2d (diff)
downloadqtlocation-mapboxgl-d8639e2f9c332a1c2fa7d75aab04bc715e233066.tar.gz
[core] Database file source does not return stored tiles for volatile resources
The `DatabaseFileSource.VolatileResource` test is included.
-rw-r--r--platform/default/src/mbgl/storage/database_file_source.cpp3
-rw-r--r--test/storage/database_file_source.test.cpp31
2 files changed, 33 insertions, 1 deletions
diff --git a/platform/default/src/mbgl/storage/database_file_source.cpp b/platform/default/src/mbgl/storage/database_file_source.cpp
index 07a5291e05..61915277ca 100644
--- a/platform/default/src/mbgl/storage/database_file_source.cpp
+++ b/platform/default/src/mbgl/storage/database_file_source.cpp
@@ -21,7 +21,8 @@ public:
: db(std::make_unique<OfflineDatabase>(cachePath)), onlineFileSource(std::move(onlineFileSource_)) {}
void request(const Resource& resource, const ActorRef<FileSourceRequest>& req) {
- auto offlineResponse = db->get(resource);
+ optional<Response> offlineResponse =
+ (resource.storagePolicy != Resource::StoragePolicy::Volatile) ? db->get(resource) : nullopt;
if (!offlineResponse) {
offlineResponse.emplace();
offlineResponse->noContent = true;
diff --git a/test/storage/database_file_source.test.cpp b/test/storage/database_file_source.test.cpp
index 62e5954605..f9f538c2f5 100644
--- a/test/storage/database_file_source.test.cpp
+++ b/test/storage/database_file_source.test.cpp
@@ -23,4 +23,35 @@ TEST(DatabaseFileSource, PauseResume) {
resumeTimer.start(Milliseconds(5), Duration::zero(), [dbfs] { dbfs->resume(); });
loop.run();
+}
+
+TEST(DatabaseFileSource, VolatileResource) {
+ util::RunLoop loop;
+
+ std::shared_ptr<FileSource> dbfs =
+ FileSourceManager::get()->getFileSource(FileSourceType::Database, ResourceOptions{});
+
+ Resource resource{Resource::Unknown, "http://127.0.0.1:3000/test", {}, Resource::LoadingMethod::CacheOnly};
+ Response response{};
+ response.data = std::make_shared<std::string>("Cached value");
+ std::unique_ptr<mbgl::AsyncRequest> req;
+
+ dbfs->forward(resource, response, [&] {
+ req = dbfs->request(resource, [&](Response res1) {
+ EXPECT_EQ(nullptr, res1.error);
+ ASSERT_TRUE(res1.data.get());
+ EXPECT_FALSE(res1.noContent);
+ EXPECT_EQ("Cached value", *res1.data);
+ resource.storagePolicy = Resource::StoragePolicy::Volatile;
+ req = dbfs->request(resource, [&](Response res2) {
+ req.reset();
+ ASSERT_TRUE(res2.error.get());
+ EXPECT_TRUE(res2.noContent);
+ EXPECT_EQ(Response::Error::Reason::NotFound, res2.error->reason);
+ EXPECT_EQ("Not found in offline database", res2.error->message);
+ loop.stop();
+ });
+ });
+ });
+ loop.run();
} \ No newline at end of file