summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorJohn Firebaugh <john.firebaugh@gmail.com>2016-02-10 12:18:36 -0800
committerJohn Firebaugh <john.firebaugh@gmail.com>2016-02-10 15:40:20 -0800
commita9e0c1b99a0489c6bc192c0681fa1dfc6e565bbe (patch)
tree47364446cdaad61fb1a9fd90ad5662646524801e /test
parentdb3620c58f0c3351e26b0e3bcfd23ff414f829a1 (diff)
downloadqtlocation-mapboxgl-a9e0c1b99a0489c6bc192c0681fa1dfc6e565bbe.tar.gz
[core] Eliminate maximumCacheEntrySize
Instead, the eviction policy accounts for the actual size needed for an incoming put.
Diffstat (limited to 'test')
-rw-r--r--test/storage/offline_database.cpp70
1 files changed, 44 insertions, 26 deletions
diff --git a/test/storage/offline_database.cpp b/test/storage/offline_database.cpp
index 680a14bb4f..e4a5381d21 100644
--- a/test/storage/offline_database.cpp
+++ b/test/storage/offline_database.cpp
@@ -9,6 +9,7 @@
#include <gtest/gtest.h>
#include <sqlite3.h>
#include <thread>
+#include <random>
using namespace std::literals::string_literals;
@@ -484,38 +485,33 @@ TEST(OfflineDatabase, ConcurrentUse) {
thread2.join();
}
-TEST(OfflineDatabase, PutIgnoresOversizedResources) {
- using namespace mbgl;
-
- Log::setObserver(std::make_unique<FixtureLogObserver>());
- OfflineDatabase db(":memory:", 1000, 1);
-
- Resource resource = Resource::style("http://example.com/");
- Response response;
- response.data = std::make_shared<std::string>("data");
+static std::shared_ptr<std::string> randomString(size_t size) {
+ auto result = std::make_shared<std::string>(size, 0);
+ std::mt19937 random;
- db.put(resource, response);
- EXPECT_FALSE(bool(db.get(resource)));
+ for (size_t i = 0; i < size; i++) {
+ (*result)[i] = random();
+ }
- auto observer = Log::removeObserver();
- auto flo = dynamic_cast<FixtureLogObserver*>(observer.get());
- EXPECT_EQ(1ul, flo->count({ EventSeverity::Warning, Event::Database, -1, "Entry too big for caching" }));
+ return result;
}
-TEST(OfflineDatabase, PutRegionResourceDoesNotIgnoreOversizedResources) {
+TEST(OfflineDatabase, PutReturnsSize) {
using namespace mbgl;
- OfflineDatabase db(":memory:", 1000, 1);
+ OfflineDatabase db(":memory:");
- OfflineRegionDefinition definition { "", LatLngBounds::world(), 0, INFINITY, 1.0 };
- OfflineRegion region = db.createRegion(definition, OfflineRegionMetadata());
+ Response compressible;
+ compressible.data = std::make_shared<std::string>(1024, 0);
+ EXPECT_EQ(17, db.put(Resource::style("http://example.com/compressible"), compressible));
- Resource resource = Resource::style("http://example.com/");
- Response response;
- response.data = std::make_shared<std::string>("data");
+ Response incompressible;
+ incompressible.data = randomString(1024);
+ EXPECT_EQ(1024, db.put(Resource::style("http://example.com/incompressible"), incompressible));
- db.putRegionResource(region.getID(), resource, response);
- EXPECT_TRUE(bool(db.get(resource)));
+ Response noContent;
+ noContent.noContent = true;
+ EXPECT_EQ(0, db.put(Resource::style("http://example.com/noContent"), noContent));
}
TEST(OfflineDatabase, PutEvictsLeastRecentlyUsedResources) {
@@ -524,7 +520,7 @@ TEST(OfflineDatabase, PutEvictsLeastRecentlyUsedResources) {
OfflineDatabase db(":memory:", 1024 * 20);
Response response;
- response.data = std::make_shared<std::string>(1024, '0');
+ response.data = randomString(1024);
for (uint32_t i = 1; i <= 20; i++) {
db.put(Resource::style("http://example.com/"s + util::toString(i)), response);
@@ -538,12 +534,11 @@ TEST(OfflineDatabase, PutRegionResourceDoesNotEvict) {
using namespace mbgl;
OfflineDatabase db(":memory:", 1024 * 20);
-
OfflineRegionDefinition definition { "", LatLngBounds::world(), 0, INFINITY, 1.0 };
OfflineRegion region = db.createRegion(definition, OfflineRegionMetadata());
Response response;
- response.data = std::make_shared<std::string>(1024, '0');
+ response.data = randomString(1024);
for (uint32_t i = 1; i <= 20; i++) {
db.putRegionResource(region.getID(), Resource::style("http://example.com/"s + util::toString(i)), response);
@@ -552,3 +547,26 @@ TEST(OfflineDatabase, PutRegionResourceDoesNotEvict) {
EXPECT_TRUE(bool(db.get(Resource::style("http://example.com/1"))));
EXPECT_TRUE(bool(db.get(Resource::style("http://example.com/20"))));
}
+
+TEST(OfflineDatabase, PutFailsWhenEvictionInsuffices) {
+ using namespace mbgl;
+
+ Log::setObserver(std::make_unique<FixtureLogObserver>());
+ OfflineDatabase db(":memory:", 1024 * 20);
+
+ Response small;
+ small.data = randomString(1024);
+
+ for (uint32_t i = 1; i <= 10; i++) {
+ db.put(Resource::style("http://example.com/"s + util::toString(i)), small);
+ }
+
+ Response big;
+ big.data = randomString(1024 * 15);
+ db.put(Resource::style("http://example.com/big"), big);
+ EXPECT_FALSE(bool(db.get(Resource::style("http://example.com/big"))));
+
+ auto observer = Log::removeObserver();
+ auto flo = dynamic_cast<FixtureLogObserver*>(observer.get());
+ EXPECT_EQ(1ul, flo->count({ EventSeverity::Warning, Event::Database, -1, "Unable to make space for entry" }));
+}