[test] standardize on database file name and move I/O functions to util

This commit is contained in:
Konstantin Käfer
2018-06-07 13:01:38 +02:00
parent 31953c4c83
commit 1fbf3f2d48
4 changed files with 68 additions and 86 deletions

View File

@@ -15,60 +15,31 @@
using namespace std::literals::string_literals;
using namespace mbgl;
namespace {
void createDir(const char* name) {
const int ret = mkdir(name, 0755);
if (ret == -1) {
ASSERT_EQ(EEXIST, errno);
} else {
ASSERT_EQ(0, ret);
}
}
void deleteFile(const char* name) {
const int ret = unlink(name);
if (ret == -1) {
ASSERT_EQ(ENOENT, errno);
} else {
ASSERT_EQ(0, ret);
}
}
void writeFile(const char* name, const std::string& data) {
util::write_file(name, data);
}
void copyFile(const char* orig, const char* dest) {
util::write_file(dest, util::read_file(orig));
}
} // namespace
static constexpr const char* filename = "test/fixtures/offline_database/offline.db";
TEST(OfflineDatabase, TEST_REQUIRES_WRITE(Create)) {
createDir("test/fixtures/offline_database");
deleteFile("test/fixtures/offline_database/offline.db");
FixtureLog log;
util::deleteFile(filename);
Log::setObserver(std::make_unique<FixtureLogObserver>());
OfflineDatabase db("test/fixtures/offline_database/offline.db");
OfflineDatabase db(filename);
EXPECT_FALSE(bool(db.get({ Resource::Unknown, "mapbox://test" })));
Log::removeObserver();
}
TEST(OfflineDatabase, TEST_REQUIRES_WRITE(SchemaVersion)) {
createDir("test/fixtures/offline_database");
deleteFile("test/fixtures/offline_database/offline.db");
std::string path("test/fixtures/offline_database/offline.db");
FixtureLog log;
util::deleteFile(filename);
{
mapbox::sqlite::Database db = mapbox::sqlite::Database::open(path, mapbox::sqlite::Create | mapbox::sqlite::ReadWrite);
mapbox::sqlite::Database db = mapbox::sqlite::Database::open(filename, mapbox::sqlite::Create | mapbox::sqlite::ReadWrite);
db.exec("PRAGMA user_version = 1");
}
Log::setObserver(std::make_unique<FixtureLogObserver>());
OfflineDatabase db(path);
OfflineDatabase db(filename);
auto observer = Log::removeObserver();
auto flo = dynamic_cast<FixtureLogObserver*>(observer.get());
@@ -76,13 +47,13 @@ TEST(OfflineDatabase, TEST_REQUIRES_WRITE(SchemaVersion)) {
}
TEST(OfflineDatabase, TEST_REQUIRES_WRITE(Invalid)) {
createDir("test/fixtures/offline_database");
deleteFile("test/fixtures/offline_database/invalid.db");
writeFile("test/fixtures/offline_database/invalid.db", "this is an invalid file");
FixtureLog log;
util::deleteFile(filename);
util::write_file(filename, "this is an invalid file");
Log::setObserver(std::make_unique<FixtureLogObserver>());
OfflineDatabase db("test/fixtures/offline_database/invalid.db");
OfflineDatabase db(filename);
auto observer = Log::removeObserver();
auto flo = dynamic_cast<FixtureLogObserver*>(observer.get());
@@ -137,11 +108,11 @@ TEST(OfflineDatabase, PutResource) {
}
TEST(OfflineDatabase, TEST_REQUIRES_WRITE(GetResourceFromOfflineRegion)) {
createDir("test/fixtures/offline_database");
deleteFile("test/fixtures/offline_database/satellite.db");
copyFile("test/fixtures/offline_database/satellite_test.db", "test/fixtures/offline_database/satellite.db");
FixtureLog log;
util::deleteFile(filename);
util::copyFile(filename, "test/fixtures/offline_database/satellite_test.db");
OfflineDatabase db("test/fixtures/offline_database/satellite.db", mapbox::sqlite::ReadOnly);
OfflineDatabase db(filename, mapbox::sqlite::ReadOnly);
Resource resource = Resource::style("mapbox://styles/mapbox/satellite-v9");
ASSERT_TRUE(db.get(resource));
@@ -315,11 +286,11 @@ TEST(OfflineDatabase, CreateRegionInfiniteMaxZoom) {
}
TEST(OfflineDatabase, TEST_REQUIRES_WRITE(ConcurrentUse)) {
createDir("test/fixtures/offline_database");
deleteFile("test/fixtures/offline_database/offline.db");
FixtureLog log;
util::deleteFile(filename);
OfflineDatabase db1("test/fixtures/offline_database/offline.db");
OfflineDatabase db2("test/fixtures/offline_database/offline.db");
OfflineDatabase db1(filename);
OfflineDatabase db2(filename);
Resource resource { Resource::Style, "http://example.com/" };
Response response;
@@ -646,106 +617,106 @@ static std::vector<std::string> databaseTableColumns(const std::string& path, co
TEST(OfflineDatabase, MigrateFromV2Schema) {
// v2.db is a v2 database containing a single offline region with a small number of resources.
deleteFile("test/fixtures/offline_database/migrated.db");
writeFile("test/fixtures/offline_database/migrated.db", util::read_file("test/fixtures/offline_database/v2.db"));
util::deleteFile(filename);
util::copyFile(filename, "test/fixtures/offline_database/v2.db");
{
OfflineDatabase db("test/fixtures/offline_database/migrated.db", 0);
OfflineDatabase db(filename, 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_LT(databasePageCount("test/fixtures/offline_database/migrated.db"),
EXPECT_EQ(6, databaseUserVersion(filename));
EXPECT_LT(databasePageCount(filename),
databasePageCount("test/fixtures/offline_database/v2.db"));
}
TEST(OfflineDatabase, MigrateFromV3Schema) {
// v3.db is a v3 database, migrated from v2.
deleteFile("test/fixtures/offline_database/migrated.db");
writeFile("test/fixtures/offline_database/migrated.db", util::read_file("test/fixtures/offline_database/v3.db"));
util::deleteFile(filename);
util::copyFile(filename, "test/fixtures/offline_database/v3.db");
{
OfflineDatabase db("test/fixtures/offline_database/migrated.db", 0);
OfflineDatabase db(filename, 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(6, databaseUserVersion(filename));
}
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/migrated.db");
writeFile("test/fixtures/offline_database/migrated.db", util::read_file("test/fixtures/offline_database/v4.db"));
util::deleteFile(filename);
util::copyFile(filename, "test/fixtures/offline_database/v4.db");
{
OfflineDatabase db("test/fixtures/offline_database/migrated.db", 0);
OfflineDatabase db(filename, 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(6, databaseUserVersion(filename));
// Journal mode should be DELETE after migration to v5.
EXPECT_EQ("delete", databaseJournalMode("test/fixtures/offline_database/migrated.db"));
EXPECT_EQ("delete", databaseJournalMode(filename));
// Synchronous setting should be FULL (2) after migration to v5.
EXPECT_EQ(2, databaseSyncMode("test/fixtures/offline_database/migrated.db"));
EXPECT_EQ(2, databaseSyncMode(filename));
}
TEST(OfflineDatabase, MigrateFromV5Schema) {
// 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"));
util::deleteFile(filename);
util::copyFile(filename, "test/fixtures/offline_database/v5.db");
{
OfflineDatabase db("test/fixtures/offline_database/migrated.db", 0);
OfflineDatabase db(filename, 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(6, databaseUserVersion(filename));
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"));
databaseTableColumns(filename, "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"));
databaseTableColumns(filename, "resources"));
}
TEST(OfflineDatabase, DowngradeSchema) {
// v999.db is a v999 database, it should be deleted
// and recreated with the current schema.
deleteFile("test/fixtures/offline_database/migrated.db");
writeFile("test/fixtures/offline_database/migrated.db", util::read_file("test/fixtures/offline_database/v999.db"));
util::deleteFile(filename);
util::copyFile(filename, "test/fixtures/offline_database/v999.db");
{
OfflineDatabase db("test/fixtures/offline_database/migrated.db", 0);
OfflineDatabase db(filename, 0);
}
EXPECT_EQ(6, databaseUserVersion("test/fixtures/offline_database/migrated.db"));
EXPECT_EQ(6, databaseUserVersion(filename));
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"));
databaseTableColumns(filename, "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"));
databaseTableColumns(filename, "resources"));
}