summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThiago Marcos P. Santos <tmpsantos@gmail.com>2019-06-11 01:03:41 +0300
committerThiago Marcos P. Santos <tmpsantos@gmail.com>2019-06-13 22:28:16 +0300
commit9815fc0d16044b0a99b7c2939ac18aa6979b9691 (patch)
treec7cec19034997d2dd3397aff6a554078b322b65f
parent4b1f9a3b3fbbb862b8d6a3bd31ae27c95da241f0 (diff)
downloadqtlocation-mapboxgl-9815fc0d16044b0a99b7c2939ac18aa6979b9691.tar.gz
[tests] Improve unit test for deleting offline region and concurrent use
Test if the physical size of the database will also reduce. Clear the cache while adding resource on another connection.
-rw-r--r--test/storage/offline_database.test.cpp51
1 files changed, 39 insertions, 12 deletions
diff --git a/test/storage/offline_database.test.cpp b/test/storage/offline_database.test.cpp
index a0adbb4207..fc1efc1a31 100644
--- a/test/storage/offline_database.test.cpp
+++ b/test/storage/offline_database.test.cpp
@@ -517,23 +517,46 @@ TEST(OfflineDatabase, GetRegionDefinition) {
TEST(OfflineDatabase, DeleteRegion) {
FixtureLog log;
- OfflineDatabase db(":memory:");
- OfflineTilePyramidRegionDefinition definition { "http://example.com/style", LatLngBounds::hull({1, 2}, {3, 4}), 5, 6, 2.0, true };
- OfflineRegionMetadata metadata {{ 1, 2, 3 }};
- auto region = db.createRegion(definition, metadata);
- ASSERT_TRUE(region);
+ deleteDatabaseFiles();
- Response response;
- response.noContent = true;
+ {
+ OfflineDatabase dbCreate(filename);
+ }
- db.putRegionResource(region->getID(), Resource::style("http://example.com/"), response);
- db.putRegionResource(region->getID(), Resource::tile("http://example.com/", 1.0, 0, 0, 0, Tileset::Scheme::XYZ), response);
+ size_t initialSize = util::read_file(filename).size();
- db.deleteRegion(std::move(*region));
+ {
+ Response response;
+ response.data = randomString(.5 * 1024 * 1024);
- auto regions = db.listRegions().value();
- ASSERT_EQ(0u, regions.size());
+ OfflineDatabase db(filename);
+ OfflineTilePyramidRegionDefinition definition{ "mapbox://style", LatLngBounds::hull({1, 2}, {3, 4}), 5, 6, 2.0, true };
+ OfflineRegionMetadata metadata{{ 1, 2, 3 }};
+
+ auto region = db.createRegion(definition, metadata);
+
+ for (unsigned i = 0; i < 100; ++i) {
+ const Resource tile = Resource::tile("mapbox://tile_" + std::to_string(i), 1, 0, 0, 0, Tileset::Scheme::XYZ);
+ db.putRegionResource(region->getID(), tile, response);
+ }
+
+ db.deleteRegion(std::move(*region));
+
+ auto regions = db.listRegions().value();
+ ASSERT_EQ(0u, regions.size());
+
+ // The tiles from the offline region will migrate to the
+ // ambient cache and shrink the database to the maximum
+ // size defined by default.
+ EXPECT_LE(util::read_file(filename).size(), util::DEFAULT_MAX_CACHE_SIZE);
+
+ // After clearing the cache, the size of the database
+ // should get back to the original size.
+ db.clearTileCache();
+ }
+
+ EXPECT_EQ(initialSize, util::read_file(filename).size());
EXPECT_EQ(0u, log.uncheckedCount());
}
@@ -668,6 +691,10 @@ TEST(OfflineDatabase, TEST_REQUIRES_WRITE(ConcurrentUse)) {
for (auto i = 0; i < 100; i++) {
db2.put(fixture::resource, fixture::response);
EXPECT_TRUE(bool(db2.get(fixture::resource)));
+
+ if (i == 50) {
+ db2.clearTileCache();
+ }
}
});