diff options
author | Mikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com> | 2020-04-22 13:02:39 +0300 |
---|---|---|
committer | Mikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com> | 2020-04-22 19:21:56 +0300 |
commit | d8639e2f9c332a1c2fa7d75aab04bc715e233066 (patch) | |
tree | 14f2d0123be4f3cf629ff1ed513f2ab9b12da325 | |
parent | b120cdd207ef7d0f296ff6607cc481d882a2aa2d (diff) | |
download | qtlocation-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.cpp | 3 | ||||
-rw-r--r-- | test/storage/database_file_source.test.cpp | 31 |
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 |