diff options
Diffstat (limited to 'test/storage/offline_database.test.cpp')
-rw-r--r-- | test/storage/offline_database.test.cpp | 69 |
1 files changed, 54 insertions, 15 deletions
diff --git a/test/storage/offline_database.test.cpp b/test/storage/offline_database.test.cpp index 872310e46f..c196107639 100644 --- a/test/storage/offline_database.test.cpp +++ b/test/storage/offline_database.test.cpp @@ -634,24 +634,35 @@ static int databaseSyncMode(const std::string& path) { return stmt.get<int>(0); } +static std::vector<std::string> databaseTableColumns(const std::string& path, const std::string& name) { + mapbox::sqlite::Database db(path, mapbox::sqlite::ReadOnly); + const auto sql = std::string("pragma table_info(") + name + ")"; + mapbox::sqlite::Statement stmt = db.prepare(sql.c_str()); + std::vector<std::string> columns; + while (stmt.run()) { + columns.push_back(stmt.get<std::string>(1)); + } + return columns; +} + TEST(OfflineDatabase, MigrateFromV2Schema) { using namespace mbgl; // v2.db is a v2 database containing a single offline region with a small number of resources. - deleteFile("test/fixtures/offline_database/v5.db"); - writeFile("test/fixtures/offline_database/v5.db", util::read_file("test/fixtures/offline_database/v2.db")); + deleteFile("test/fixtures/offline_database/migrated.db"); + writeFile("test/fixtures/offline_database/migrated.db", util::read_file("test/fixtures/offline_database/v2.db")); { - OfflineDatabase db("test/fixtures/offline_database/v5.db", 0); + OfflineDatabase db("test/fixtures/offline_database/migrated.db", 0); auto regions = db.listRegions(); for (auto& region : regions) { db.deleteRegion(std::move(region)); } } - EXPECT_EQ(5, databaseUserVersion("test/fixtures/offline_database/v5.db")); - EXPECT_LT(databasePageCount("test/fixtures/offline_database/v5.db"), + EXPECT_EQ(6, databaseUserVersion("test/fixtures/offline_database/migrated.db")); + EXPECT_LT(databasePageCount("test/fixtures/offline_database/migrated.db"), databasePageCount("test/fixtures/offline_database/v2.db")); } @@ -660,18 +671,18 @@ TEST(OfflineDatabase, MigrateFromV3Schema) { // v3.db is a v3 database, migrated from v2. - deleteFile("test/fixtures/offline_database/v5.db"); - writeFile("test/fixtures/offline_database/v5.db", util::read_file("test/fixtures/offline_database/v3.db")); + deleteFile("test/fixtures/offline_database/migrated.db"); + writeFile("test/fixtures/offline_database/migrated.db", util::read_file("test/fixtures/offline_database/v3.db")); { - OfflineDatabase db("test/fixtures/offline_database/v5.db", 0); + OfflineDatabase db("test/fixtures/offline_database/migrated.db", 0); auto regions = db.listRegions(); for (auto& region : regions) { db.deleteRegion(std::move(region)); } } - EXPECT_EQ(5, databaseUserVersion("test/fixtures/offline_database/v5.db")); + EXPECT_EQ(6, databaseUserVersion("test/fixtures/offline_database/migrated.db")); } TEST(OfflineDatabase, MigrateFromV4Schema) { @@ -679,22 +690,50 @@ TEST(OfflineDatabase, MigrateFromV4Schema) { // v4.db is a v4 database, migrated from v2 & v3. This database used `journal_mode = WAL` and `synchronous = NORMAL`. - deleteFile("test/fixtures/offline_database/v5.db"); - writeFile("test/fixtures/offline_database/v5.db", util::read_file("test/fixtures/offline_database/v4.db")); + deleteFile("test/fixtures/offline_database/migrated.db"); + writeFile("test/fixtures/offline_database/migrated.db", util::read_file("test/fixtures/offline_database/v4.db")); { - OfflineDatabase db("test/fixtures/offline_database/v5.db", 0); + OfflineDatabase db("test/fixtures/offline_database/migrated.db", 0); auto regions = db.listRegions(); for (auto& region : regions) { db.deleteRegion(std::move(region)); } } - EXPECT_EQ(5, databaseUserVersion("test/fixtures/offline_database/v5.db")); + EXPECT_EQ(6, databaseUserVersion("test/fixtures/offline_database/migrated.db")); // Journal mode should be DELETE after migration to v5. - EXPECT_EQ("delete", databaseJournalMode("test/fixtures/offline_database/v5.db")); + EXPECT_EQ("delete", databaseJournalMode("test/fixtures/offline_database/migrated.db")); // Synchronous setting should be FULL (2) after migration to v5. - EXPECT_EQ(2, databaseSyncMode("test/fixtures/offline_database/v5.db")); + EXPECT_EQ(2, databaseSyncMode("test/fixtures/offline_database/migrated.db")); +} + + +TEST(OfflineDatabase, MigrateFromV5Schema) { + using namespace mbgl; + + // v5.db is a v5 database, migrated from v2, v3 & v4. + + deleteFile("test/fixtures/offline_database/migrated.db"); + writeFile("test/fixtures/offline_database/migrated.db", util::read_file("test/fixtures/offline_database/v5.db")); + + { + OfflineDatabase db("test/fixtures/offline_database/migrated.db", 0); + auto regions = db.listRegions(); + for (auto& region : regions) { + db.deleteRegion(std::move(region)); + } + } + + EXPECT_EQ(6, databaseUserVersion("test/fixtures/offline_database/migrated.db")); + + EXPECT_EQ((std::vector<std::string>{ "id", "url_template", "pixel_ratio", "z", "x", "y", + "expires", "modified", "etag", "data", "compressed", + "accessed", "must_revalidate" }), + databaseTableColumns("test/fixtures/offline_database/migrated.db", "tiles")); + EXPECT_EQ((std::vector<std::string>{ "id", "url", "kind", "expires", "modified", "etag", "data", + "compressed", "accessed", "must_revalidate" }), + databaseTableColumns("test/fixtures/offline_database/migrated.db", "resources")); } |