mirror of
https://github.com/cuberite/SQLiteCpp.git
synced 2025-08-04 09:46:02 -04:00
Fix and improve read-header unit tests, as well as backup tests
This commit is contained in:
parent
55de873f66
commit
ddb4929ddb
@ -24,6 +24,7 @@
|
||||
TEST(Backup, initException)
|
||||
{
|
||||
remove("backup_test.db3");
|
||||
{
|
||||
SQLite::Database srcDB("backup_test.db3", SQLite::OPEN_READWRITE|SQLite::OPEN_CREATE);
|
||||
srcDB.exec("CREATE TABLE backup_test (id INTEGER PRIMARY KEY, value TEXT)");
|
||||
ASSERT_EQ(1, srcDB.exec("INSERT INTO backup_test VALUES (1, \"first\")"));
|
||||
@ -32,6 +33,7 @@ TEST(Backup, initException)
|
||||
EXPECT_THROW(SQLite::Backup backup(srcDB, "main", srcDB, "main"), SQLite::Exception);
|
||||
const std::string name("main");
|
||||
EXPECT_THROW(SQLite::Backup backup(srcDB, name, srcDB, name), SQLite::Exception);
|
||||
}
|
||||
remove("backup_test.db3");
|
||||
}
|
||||
|
||||
@ -39,6 +41,7 @@ TEST(Backup, executeStepOne)
|
||||
{
|
||||
remove("backup_test.db3");
|
||||
remove("backup_test.db3.backup");
|
||||
{
|
||||
SQLite::Database srcDB("backup_test.db3", SQLite::OPEN_READWRITE|SQLite::OPEN_CREATE);
|
||||
srcDB.exec("CREATE TABLE backup_test (id INTEGER PRIMARY KEY, value TEXT)");
|
||||
ASSERT_EQ(1, srcDB.exec("INSERT INTO backup_test VALUES (1, \"first\")"));
|
||||
@ -64,6 +67,7 @@ TEST(Backup, executeStepOne)
|
||||
ASSERT_TRUE(query.executeStep());
|
||||
EXPECT_EQ(2, query.getColumn(0).getInt());
|
||||
EXPECT_STREQ("second", query.getColumn(1));
|
||||
}
|
||||
remove("backup_test.db3");
|
||||
remove("backup_test.db3.backup");
|
||||
}
|
||||
@ -72,6 +76,7 @@ TEST(Backup, executeStepAll)
|
||||
{
|
||||
remove("backup_test.db3");
|
||||
remove("backup_test.db3.backup");
|
||||
{
|
||||
SQLite::Database srcDB("backup_test.db3", SQLite::OPEN_READWRITE|SQLite::OPEN_CREATE);
|
||||
srcDB.exec("CREATE TABLE backup_test (id INTEGER PRIMARY KEY, value TEXT)");
|
||||
ASSERT_EQ(1, srcDB.exec("INSERT INTO backup_test VALUES (1, \"first\")"));
|
||||
@ -93,6 +98,7 @@ TEST(Backup, executeStepAll)
|
||||
ASSERT_TRUE(query.executeStep());
|
||||
EXPECT_EQ(2, query.getColumn(0).getInt());
|
||||
EXPECT_STREQ("second", query.getColumn(1));
|
||||
}
|
||||
remove("backup_test.db3");
|
||||
remove("backup_test.db3.backup");
|
||||
}
|
||||
@ -101,6 +107,7 @@ TEST(Backup, executeStepException)
|
||||
{
|
||||
remove("backup_test.db3");
|
||||
remove("backup_test.db3.backup");
|
||||
{
|
||||
SQLite::Database srcDB("backup_test.db3", SQLite::OPEN_READWRITE|SQLite::OPEN_CREATE);
|
||||
srcDB.exec("CREATE TABLE backup_test (id INTEGER PRIMARY KEY, value TEXT)");
|
||||
ASSERT_EQ(1, srcDB.exec("INSERT INTO backup_test VALUES (1, \"first\")"));
|
||||
@ -114,6 +121,7 @@ TEST(Backup, executeStepException)
|
||||
SQLite::Backup backup(destDB, srcDB);
|
||||
EXPECT_THROW(backup.executeStep(), SQLite::Exception);
|
||||
}
|
||||
}
|
||||
remove("backup_test.db3");
|
||||
remove("backup_test.db3.backup");
|
||||
}
|
||||
|
@ -140,15 +140,16 @@ TEST(Database, backup)
|
||||
EXPECT_TRUE(db.tableExists("test"));
|
||||
|
||||
// Export the data into a file
|
||||
remove("backup");
|
||||
EXPECT_NO_THROW(db.backup("backup", SQLite::Database::Save));
|
||||
remove("backup.db3");
|
||||
EXPECT_NO_THROW(db.backup("backup.db3", SQLite::Database::Save));
|
||||
|
||||
// Trash the table
|
||||
db.exec("DROP TABLE test;");
|
||||
EXPECT_FALSE(db.tableExists("test"));
|
||||
|
||||
// Import the data back from the file
|
||||
EXPECT_NO_THROW(db.backup("backup", SQLite::Database::Load));
|
||||
EXPECT_NO_THROW(db.backup("backup.db3", SQLite::Database::Load));
|
||||
remove("backup.db3");
|
||||
|
||||
EXPECT_TRUE(db.tableExists("test"));
|
||||
}
|
||||
@ -362,20 +363,38 @@ TEST(Database, getHeaderInfo)
|
||||
// Call without passing a database file name
|
||||
EXPECT_THROW(SQLite::Database::getHeaderInfo(""),SQLite::Exception);
|
||||
|
||||
//Call with a non existant database
|
||||
// Call with a non-existent database
|
||||
EXPECT_THROW(SQLite::Database::getHeaderInfo("test.db3"), SQLite::Exception);
|
||||
|
||||
//Simulate a corrupt header by writing garbage to a file
|
||||
unsigned char badData[100];
|
||||
char* pBadData = reinterpret_cast<char*>(&badData[0]);
|
||||
// Simulate an incomplete header by writing garbage to a file
|
||||
{
|
||||
const unsigned char badData[] = "garbage...";
|
||||
const char* pBadData = reinterpret_cast<const char*>(&badData[0]);
|
||||
|
||||
remove("short.db3");
|
||||
std::ofstream corruptDb;
|
||||
corruptDb.open("corrupt.db3", std::ios::app | std::ios::binary);
|
||||
corruptDb.write(pBadData, 100);
|
||||
corruptDb.open("short.db3", std::ios::app | std::ios::binary);
|
||||
corruptDb.write(pBadData, sizeof(badData));
|
||||
corruptDb.close();
|
||||
|
||||
EXPECT_THROW(SQLite::Database::getHeaderInfo("corrupt.db3"), SQLite::Exception);
|
||||
EXPECT_THROW(SQLite::Database::getHeaderInfo("short.db3"), SQLite::Exception);
|
||||
remove("short.db3");
|
||||
}
|
||||
|
||||
// Simulate a corrupt header by writing garbage to a file
|
||||
{
|
||||
const unsigned char badData[100] = "garbage...";
|
||||
const char* pBadData = reinterpret_cast<const char*>(&badData[0]);
|
||||
|
||||
remove("corrupt.db3");
|
||||
std::ofstream corruptDb;
|
||||
corruptDb.open("corrupt.db3", std::ios::app | std::ios::binary);
|
||||
corruptDb.write(pBadData, sizeof(badData));
|
||||
corruptDb.close();
|
||||
|
||||
EXPECT_THROW(SQLite::Database::getHeaderInfo("corrupt.db3"), SQLite::Exception);
|
||||
remove("corrupt.db3");
|
||||
}
|
||||
|
||||
// Create a new database
|
||||
SQLite::Database db("test.db3", SQLite::OPEN_READWRITE | SQLite::OPEN_CREATE);
|
||||
@ -388,7 +407,7 @@ TEST(Database, getHeaderInfo)
|
||||
// Parse header fields from test database
|
||||
SQLite::Header h = SQLite::Database::getHeaderInfo("test.db3");
|
||||
|
||||
//Test header values expliticly set via PRAGMA statements
|
||||
//Test header values explicitly set via PRAGMA statements
|
||||
EXPECT_EQ(h.userVersion, 12345);
|
||||
EXPECT_EQ(h.applicationId, 2468);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user