From 9815fc0d16044b0a99b7c2939ac18aa6979b9691 Mon Sep 17 00:00:00 2001 From: "Thiago Marcos P. Santos" Date: Tue, 11 Jun 2019 01:03:41 +0300 Subject: [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. --- test/storage/offline_database.test.cpp | 51 ++++++++++++++++++++++++++-------- 1 file 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(); + } } }); -- cgit v1.2.1