[core] Moving caching logic to DefaultFileSource

This results in OnlineFileSource containing precisely the logic we want for reuse by OfflineFileSource, and no more.
This commit is contained in:
John Firebaugh
2016-01-13 17:10:13 -08:00
parent f3d4107d19
commit dbb8e58aea
22 changed files with 128 additions and 136 deletions

View File

@@ -31,7 +31,7 @@ void checkRendering(Map& map, const char * name) {
TEST(Annotations, PointAnnotation) {
auto display = std::make_shared<mbgl::HeadlessDisplay>();
HeadlessView view(display, 1);
OnlineFileSource fileSource(nullptr);
OnlineFileSource fileSource;
Map map(view, fileSource, MapMode::Still);
map.setStyleJSON(util::read_file("test/fixtures/api/empty.json"), "");
@@ -44,7 +44,7 @@ TEST(Annotations, PointAnnotation) {
TEST(Annotations, LineAnnotation) {
auto display = std::make_shared<mbgl::HeadlessDisplay>();
HeadlessView view(display, 1);
OnlineFileSource fileSource(nullptr);
OnlineFileSource fileSource;
Map map(view, fileSource, MapMode::Still);
map.setStyleJSON(util::read_file("test/fixtures/api/empty.json"), "");
@@ -63,7 +63,7 @@ TEST(Annotations, LineAnnotation) {
TEST(Annotations, FillAnnotation) {
auto display = std::make_shared<mbgl::HeadlessDisplay>();
HeadlessView view(display, 1);
OnlineFileSource fileSource(nullptr);
OnlineFileSource fileSource;
Map map(view, fileSource, MapMode::Still);
map.setStyleJSON(util::read_file("test/fixtures/api/empty.json"), "");
@@ -81,7 +81,7 @@ TEST(Annotations, FillAnnotation) {
TEST(Annotations, StyleSourcedShapeAnnotation) {
auto display = std::make_shared<mbgl::HeadlessDisplay>();
HeadlessView view(display, 1);
OnlineFileSource fileSource(nullptr);
OnlineFileSource fileSource;
Map map(view, fileSource, MapMode::Still);
map.setStyleJSON(util::read_file("test/fixtures/api/annotation.json"), "");
@@ -96,7 +96,7 @@ TEST(Annotations, StyleSourcedShapeAnnotation) {
TEST(Annotations, AddMultiple) {
auto display = std::make_shared<mbgl::HeadlessDisplay>();
HeadlessView view(display, 1);
OnlineFileSource fileSource(nullptr);
OnlineFileSource fileSource;
Map map(view, fileSource, MapMode::Still);
map.setStyleJSON(util::read_file("test/fixtures/api/empty.json"), "");
@@ -113,7 +113,7 @@ TEST(Annotations, AddMultiple) {
TEST(Annotations, NonImmediateAdd) {
auto display = std::make_shared<mbgl::HeadlessDisplay>();
HeadlessView view(display, 1);
OnlineFileSource fileSource(nullptr);
OnlineFileSource fileSource;
Map map(view, fileSource, MapMode::Still);
map.setStyleJSON(util::read_file("test/fixtures/api/empty.json"), "");
@@ -133,7 +133,7 @@ TEST(Annotations, NonImmediateAdd) {
TEST(Annotations, UpdatePoint) {
auto display = std::make_shared<mbgl::HeadlessDisplay>();
HeadlessView view(display, 1);
OnlineFileSource fileSource(nullptr);
OnlineFileSource fileSource;
Map map(view, fileSource, MapMode::Still);
map.setStyleJSON(util::read_file("test/fixtures/api/empty.json"), "");
@@ -152,7 +152,7 @@ TEST(Annotations, UpdatePoint) {
TEST(Annotations, RemovePoint) {
auto display = std::make_shared<mbgl::HeadlessDisplay>();
HeadlessView view(display, 1);
OnlineFileSource fileSource(nullptr);
OnlineFileSource fileSource;
Map map(view, fileSource, MapMode::Still);
map.setStyleJSON(util::read_file("test/fixtures/api/empty.json"), "");
@@ -169,7 +169,7 @@ TEST(Annotations, RemovePoint) {
TEST(Annotations, RemoveShape) {
auto display = std::make_shared<mbgl::HeadlessDisplay>();
HeadlessView view(display, 1);
OnlineFileSource fileSource(nullptr);
OnlineFileSource fileSource;
AnnotationSegments segments = {{ {{ { 0, 0 }, { 45, 45 } }} }};
@@ -191,7 +191,7 @@ TEST(Annotations, RemoveShape) {
TEST(Annotations, ImmediateRemoveShape) {
auto display = std::make_shared<mbgl::HeadlessDisplay>();
HeadlessView view(display, 1);
OnlineFileSource fileSource(nullptr);
OnlineFileSource fileSource;
Map map(view, fileSource, MapMode::Still);
map.removeAnnotation(map.addShapeAnnotation(ShapeAnnotation({}, {})));
@@ -203,7 +203,7 @@ TEST(Annotations, ImmediateRemoveShape) {
TEST(Annotations, SwitchStyle) {
auto display = std::make_shared<mbgl::HeadlessDisplay>();
HeadlessView view(display, 1);
OnlineFileSource fileSource(nullptr);
OnlineFileSource fileSource;
Map map(view, fileSource, MapMode::Still);
map.setStyleJSON(util::read_file("test/fixtures/api/empty.json"), "");

View File

@@ -18,7 +18,7 @@ TEST(API, RenderWithoutCallback) {
auto display = std::make_shared<mbgl::HeadlessDisplay>();
HeadlessView view(display, 1);
view.resize(128, 512);
OnlineFileSource fileSource(nullptr);
OnlineFileSource fileSource;
std::unique_ptr<Map> map = std::make_unique<Map>(view, fileSource, MapMode::Still);
map->renderStill(nullptr);
@@ -40,7 +40,7 @@ TEST(API, RenderWithoutStyle) {
auto display = std::make_shared<mbgl::HeadlessDisplay>();
HeadlessView view(display, 1);
view.resize(128, 512);
OnlineFileSource fileSource(nullptr);
OnlineFileSource fileSource;
Map map(view, fileSource, MapMode::Still);

View File

@@ -66,7 +66,7 @@ public:
TEST(CustomLayer, Basic) {
auto display = std::make_shared<mbgl::HeadlessDisplay>();
HeadlessView view(display, 1);
OnlineFileSource fileSource(nullptr);
OnlineFileSource fileSource;
Map map(view, fileSource, MapMode::Still);
map.setStyleJSON(util::read_file("test/fixtures/api/empty.json"), "");

View File

@@ -12,7 +12,7 @@ TEST(API, SetStyle) {
auto display = std::make_shared<mbgl::HeadlessDisplay>();
HeadlessView view(display, 1);
OnlineFileSource fileSource(nullptr);
OnlineFileSource fileSource;
Log::setObserver(std::make_unique<FixtureLogObserver>());

View File

@@ -12,7 +12,7 @@ TEST(Map, PauseResume) {
auto display = std::make_shared<mbgl::HeadlessDisplay>();
HeadlessView view(display, 1);
OnlineFileSource fileSource(nullptr);
OnlineFileSource fileSource;
Map map(view, fileSource, MapMode::Continuous);
@@ -25,7 +25,7 @@ TEST(Map, DoublePause) {
auto display = std::make_shared<mbgl::HeadlessDisplay>();
HeadlessView view(display, 1);
OnlineFileSource fileSource(nullptr);
OnlineFileSource fileSource;
Map map(view, fileSource, MapMode::Continuous);
@@ -39,7 +39,7 @@ TEST(Map, ResumeWithoutPause) {
auto display = std::make_shared<mbgl::HeadlessDisplay>();
HeadlessView view(display, 1);
OnlineFileSource fileSource(nullptr);
OnlineFileSource fileSource;
Map map(view, fileSource, MapMode::Continuous);
@@ -51,7 +51,7 @@ TEST(Map, DestroyPaused) {
auto display = std::make_shared<mbgl::HeadlessDisplay>();
HeadlessView view(display, 1);
OnlineFileSource fileSource(nullptr);
OnlineFileSource fileSource;
Map map(view, fileSource, MapMode::Continuous);

View File

@@ -12,7 +12,7 @@ using namespace mbgl;
TEST(MapContext, DoubleStyleLoad) {
std::shared_ptr<HeadlessDisplay> display = std::make_shared<HeadlessDisplay>();
HeadlessView view(display, 1, 512, 512);
OnlineFileSource fileSource(nullptr);
OnlineFileSource fileSource;
util::Thread<MapContext> context({"Map", util::ThreadType::Map, util::ThreadPriority::Regular},
view, fileSource, MapMode::Continuous, GLContextMode::Unique, view.getPixelRatio());

View File

@@ -1,6 +1,6 @@
#include "storage.hpp"
#include <mbgl/storage/online_file_source.hpp>
#include <mbgl/storage/default_file_source.hpp>
#include <mbgl/storage/sqlite_cache.hpp>
#include <mbgl/util/chrono.hpp>
#include <mbgl/util/run_loop.hpp>
@@ -11,8 +11,7 @@ TEST_F(Storage, CacheResponse) {
using namespace mbgl;
util::RunLoop loop;
SQLiteCache cache(":memory:");
OnlineFileSource fs(&cache);
DefaultFileSource fs(":memory:", ".");
const Resource resource { Resource::Unknown, "http://127.0.0.1:3000/cache" };
Response response;
@@ -56,15 +55,14 @@ TEST_F(Storage, CacheNotFound) {
using namespace mbgl;
util::RunLoop loop;
SQLiteCache cache(":memory:");
OnlineFileSource fs(&cache);
DefaultFileSource fs(":memory:", ".");
const Resource resource{ Resource::Unknown, "http://127.0.0.1:3000/not-found" };
// Insert existing data into the cache that will be marked as stale.
Response response;
response.data = std::make_shared<const std::string>("existing data");
cache.put(resource, response);
fs.getCache().put(resource, response);
std::unique_ptr<FileRequest> req1;
std::unique_ptr<WorkRequest> req2;
@@ -89,7 +87,7 @@ TEST_F(Storage, CacheNotFound) {
req1.reset();
// Finally, check the cache to make sure we cached the 404 response.
req2 = cache.get(resource, [&](std::unique_ptr<Response> res2) {
req2 = fs.getCache().get(resource, [&](std::unique_ptr<Response> res2) {
EXPECT_NE(nullptr, res2->error);
EXPECT_EQ(Response::Error::Reason::NotFound, res2->error->reason);
ASSERT_TRUE(res2->data.get());
@@ -113,15 +111,14 @@ TEST_F(Storage, DontCacheConnectionErrors) {
using namespace mbgl;
util::RunLoop loop;
SQLiteCache cache(":memory:");
OnlineFileSource fs(&cache);
DefaultFileSource fs(":memory:", ".");
const Resource resource{ Resource::Unknown, "http://127.0.0.1:3001" };
// Insert existing data into the cache that will be marked as stale.
Response response;
response.data = std::make_shared<const std::string>("existing data");
cache.put(resource, response);
fs.getCache().put(resource, response);
std::unique_ptr<FileRequest> req1;
std::unique_ptr<WorkRequest> req2;
@@ -145,7 +142,7 @@ TEST_F(Storage, DontCacheConnectionErrors) {
// Finally, check the cache to make sure we still have our original data in there rather
// than the failed connection attempt.
req2 = cache.get(resource, [&](std::unique_ptr<Response> res2) {
req2 = fs.getCache().get(resource, [&](std::unique_ptr<Response> res2) {
EXPECT_EQ(nullptr, res2->error);
ASSERT_TRUE(res2->data.get());
EXPECT_EQ("existing data", *res2->data);
@@ -168,15 +165,14 @@ TEST_F(Storage, DontCacheServerErrors) {
using namespace mbgl;
util::RunLoop loop;
SQLiteCache cache(":memory:");
OnlineFileSource fs(&cache);
DefaultFileSource fs(":memory:", ".");
const Resource resource{ Resource::Unknown, "http://127.0.0.1:3000/permanent-error" };
// Insert existing data into the cache that will be marked as stale.
Response response;
response.data = std::make_shared<const std::string>("existing data");
cache.put(resource, response);
fs.getCache().put(resource, response);
std::unique_ptr<FileRequest> req1;
std::unique_ptr<WorkRequest> req2;
@@ -202,7 +198,7 @@ TEST_F(Storage, DontCacheServerErrors) {
// Finally, check the cache to make sure we still have our original data in there rather
// than the failed connection attempt.
req2 = cache.get(resource, [&](std::unique_ptr<Response> res2) {
req2 = fs.getCache().get(resource, [&](std::unique_ptr<Response> res2) {
EXPECT_EQ(nullptr, res2->error);
ASSERT_TRUE(res2->data.get());
EXPECT_EQ("existing data", *res2->data);

View File

@@ -1,7 +1,6 @@
#include "storage.hpp"
#include <mbgl/storage/online_file_source.hpp>
#include <mbgl/storage/sqlite_cache.hpp>
#include <mbgl/storage/default_file_source.hpp>
#include <mbgl/util/chrono.hpp>
#include <mbgl/util/run_loop.hpp>
@@ -11,8 +10,7 @@ TEST_F(Storage, CacheRevalidateSame) {
using namespace mbgl;
util::RunLoop loop;
SQLiteCache cache(":memory:");
OnlineFileSource fs(&cache);
DefaultFileSource fs(":memory:", ".");
const Resource revalidateSame { Resource::Unknown, "http://127.0.0.1:3000/revalidate-same" };
std::unique_ptr<FileRequest> req1;
@@ -61,8 +59,7 @@ TEST_F(Storage, CacheRevalidateModified) {
using namespace mbgl;
util::RunLoop loop;
SQLiteCache cache(":memory:");
OnlineFileSource fs(&cache);
DefaultFileSource fs(":memory:", ".");
const Resource revalidateModified{ Resource::Unknown,
"http://127.0.0.1:3000/revalidate-modified" };
@@ -111,8 +108,7 @@ TEST_F(Storage, CacheRevalidateEtag) {
using namespace mbgl;
util::RunLoop loop;
SQLiteCache cache(":memory:");
OnlineFileSource fs(&cache);
DefaultFileSource fs(":memory:", ".");
const Resource revalidateEtag { Resource::Unknown, "http://127.0.0.1:3000/revalidate-etag" };
std::unique_ptr<FileRequest> req1;

View File

@@ -13,7 +13,7 @@ TEST_F(Storage, HTTPCancel) {
using namespace mbgl;
util::RunLoop loop;
OnlineFileSource fs(nullptr);
OnlineFileSource fs;
auto req =
fs.request({ Resource::Unknown, "http://127.0.0.1:3000/test" },
@@ -31,7 +31,7 @@ TEST_F(Storage, HTTPCancelMultiple) {
using namespace mbgl;
util::RunLoop loop;
OnlineFileSource fs(nullptr);
OnlineFileSource fs;
const Resource resource { Resource::Unknown, "http://127.0.0.1:3000/test" };

View File

@@ -13,7 +13,7 @@ TEST_F(Storage, HTTPTemporaryError) {
using namespace mbgl;
util::RunLoop loop;
OnlineFileSource fs(nullptr);
OnlineFileSource fs;
const auto start = Clock::now();
@@ -58,7 +58,7 @@ TEST_F(Storage, HTTPConnectionError) {
using namespace mbgl;
util::RunLoop loop;
OnlineFileSource fs(nullptr);
OnlineFileSource fs;
const auto start = Clock::now();

View File

@@ -12,7 +12,7 @@ TEST_F(Storage, HTTPExpiresParsing) {
using namespace mbgl;
util::RunLoop loop;
OnlineFileSource fs(nullptr);
OnlineFileSource fs;
std::unique_ptr<FileRequest> req1 = fs.request({ Resource::Unknown,
"http://127.0.0.1:3000/test?modified=1420794326&expires=1420797926&etag=foo" },
@@ -37,7 +37,7 @@ TEST_F(Storage, HTTPCacheControlParsing) {
using namespace mbgl;
util::RunLoop loop;
OnlineFileSource fs(nullptr);
OnlineFileSource fs;
std::unique_ptr<FileRequest> req2 = fs.request({ Resource::Unknown, "http://127.0.0.1:3000/test?cachecontrol=max-age=120" },
[&](Response res) {

View File

@@ -1,8 +1,6 @@
#include "storage.hpp"
#include <mbgl/storage/online_file_source.hpp>
#include <mbgl/storage/sqlite_cache.hpp>
#include <mbgl/util/chrono.hpp>
#include <mbgl/storage/default_file_source.hpp>
#include <mbgl/util/run_loop.hpp>
// Test for https://github.com/mapbox/mapbox-gl-native/issue/1369
@@ -22,8 +20,7 @@ TEST_F(Storage, HTTPIssue1369) {
using namespace mbgl;
util::RunLoop loop;
SQLiteCache cache;
OnlineFileSource fs(&cache);
DefaultFileSource fs(":memory:", ".");
const Resource resource { Resource::Unknown, "http://127.0.0.1:3000/test" };

View File

@@ -10,7 +10,7 @@ TEST_F(Storage, HTTPLoad) {
using namespace mbgl;
util::RunLoop loop;
OnlineFileSource fs(nullptr);
OnlineFileSource fs;
const int concurrency = 50;
const int max = 10000;

View File

@@ -11,7 +11,7 @@ TEST_F(Storage, HTTPOtherLoop) {
// This file source launches a separate thread to do the processing.
util::RunLoop loop;
OnlineFileSource fs(nullptr);
OnlineFileSource fs;
std::unique_ptr<FileRequest> req = fs.request({ Resource::Unknown, "http://127.0.0.1:3000/test" },
[&](Response res) {

View File

@@ -14,7 +14,7 @@ TEST_F(Storage, HTTPTest) {
using namespace mbgl;
util::RunLoop loop;
OnlineFileSource fs(nullptr);
OnlineFileSource fs;
std::unique_ptr<FileRequest> req1 = fs.request({ Resource::Unknown, "http://127.0.0.1:3000/test" },
[&](Response res) {
@@ -39,7 +39,7 @@ TEST_F(Storage, HTTP404) {
using namespace mbgl;
util::RunLoop loop;
OnlineFileSource fs(nullptr);
OnlineFileSource fs;
std::unique_ptr<FileRequest> req2 = fs.request({ Resource::Unknown, "http://127.0.0.1:3000/doesnotexist" },
[&](Response res) {
@@ -66,7 +66,7 @@ TEST_F(Storage, HTTP500) {
using namespace mbgl;
util::RunLoop loop;
OnlineFileSource fs(nullptr);
OnlineFileSource fs;
std::unique_ptr<FileRequest> req3 = fs.request({ Resource::Unknown, "http://127.0.0.1:3000/permanent-error" },
[&](Response res) {
@@ -93,7 +93,7 @@ TEST_F(Storage, HTTPNoCallback) {
using namespace mbgl;
util::RunLoop loop;
OnlineFileSource fs(nullptr);
OnlineFileSource fs;
try {
fs.request({ Resource::Unknown, "http://127.0.0.1:3000/test" },

View File

@@ -18,7 +18,7 @@ TEST_F(Storage, HTTPNetworkStatusChange) {
using namespace mbgl;
util::RunLoop loop;
OnlineFileSource fs(nullptr);
OnlineFileSource fs;
const Resource resource { Resource::Unknown, "http://127.0.0.1:3000/delayed" };
@@ -57,7 +57,7 @@ TEST_F(Storage, HTTPNetworkStatusChangePreempt) {
using namespace mbgl;
util::RunLoop loop;
OnlineFileSource fs(nullptr);
OnlineFileSource fs;
const auto start = Clock::now();

View File

@@ -11,7 +11,7 @@ TEST_F(Storage, HTTPTimeout) {
using namespace mbgl;
util::RunLoop loop;
OnlineFileSource fs(nullptr);
OnlineFileSource fs;
int counter = 0;