summaryrefslogtreecommitdiff
path: root/platform
diff options
context:
space:
mode:
authorKonstantin Käfer <mail@kkaefer.com>2017-07-25 11:29:03 +0200
committerKonstantin Käfer <mail@kkaefer.com>2017-09-22 10:57:15 +0200
commitbd553de7bc5899a8e4a3a9c5e1d27a9f4d10e90e (patch)
tree6ac9fa0f63051b257d00fede260e91877aa1fe07 /platform
parentfc2ca19bc553d90b3aafdbddc17d4e8170c02259 (diff)
downloadqtlocation-mapboxgl-bd553de7bc5899a8e4a3a9c5e1d27a9f4d10e90e.tar.gz
[test] add ability to take the OnlineFileSource offline
This functionality is used for testing to ensure correct offline behavior when connectivity is missing.
Diffstat (limited to 'platform')
-rw-r--r--platform/default/default_file_source.cpp8
-rw-r--r--platform/default/online_file_source.cpp31
2 files changed, 35 insertions, 4 deletions
diff --git a/platform/default/default_file_source.cpp b/platform/default/default_file_source.cpp
index b9d35ae4ed..1e855dd9f7 100644
--- a/platform/default/default_file_source.cpp
+++ b/platform/default/default_file_source.cpp
@@ -177,6 +177,10 @@ public:
offlineDatabase->setOfflineMapboxTileCountLimit(limit);
}
+ void setOnlineStatus(const bool status) {
+ onlineFileSource.setOnlineStatus(status);
+ }
+
void put(const Resource& resource, const Response& response) {
offlineDatabase->put(resource, response);
}
@@ -303,6 +307,10 @@ void DefaultFileSource::resume() {
// For testing only:
+void DefaultFileSource::setOnlineStatus(const bool status) {
+ impl->actor().invoke(&Impl::setOnlineStatus, status);
+}
+
void DefaultFileSource::put(const Resource& resource, const Response& response) {
impl->actor().invoke(&Impl::put, resource, response);
}
diff --git a/platform/default/online_file_source.cpp b/platform/default/online_file_source.cpp
index 1c594f87a0..d685109b95 100644
--- a/platform/default/online_file_source.cpp
+++ b/platform/default/online_file_source.cpp
@@ -117,13 +117,24 @@ public:
}
void activateRequest(OnlineFileRequest* request) {
- activeRequests.insert(request);
- request->request = httpFileSource.request(request->resource, [=] (Response response) {
+ auto callback = [=](Response response) {
activeRequests.erase(request);
- activatePendingRequest();
request->request.reset();
request->completed(response);
- });
+ activatePendingRequest();
+ };
+
+ activeRequests.insert(request);
+
+ if (online) {
+ request->request = httpFileSource.request(request->resource, callback);
+ } else {
+ Response response;
+ response.error = std::make_unique<Response::Error>(Response::Error::Reason::Connection,
+ "Online connectivity is disabled.");
+ callback(response);
+ }
+
assert(pendingRequestsMap.size() == pendingRequestsList.size());
}
@@ -153,6 +164,11 @@ public:
resourceTransform = std::move(transform);
}
+ void setOnlineStatus(const bool status) {
+ online = status;
+ networkIsReachableAgain();
+ }
+
private:
void networkIsReachableAgain() {
for (auto& request : allRequests) {
@@ -178,6 +194,7 @@ private:
std::unordered_map<OnlineFileRequest*, std::list<OnlineFileRequest*>::iterator> pendingRequestsMap;
std::unordered_set<OnlineFileRequest*> activeRequests;
+ bool online = true;
HTTPFileSource httpFileSource;
util::AsyncTask reachability { std::bind(&Impl::networkIsReachableAgain, this) };
};
@@ -389,4 +406,10 @@ ActorRef<OnlineFileRequest> OnlineFileRequest::actor() {
return ActorRef<OnlineFileRequest>(*this, mailbox);
}
+// For testing only:
+
+void OnlineFileSource::setOnlineStatus(const bool status) {
+ impl->setOnlineStatus(status);
+}
+
} // namespace mbgl