65 lines
2.8 KiB
Swift
65 lines
2.8 KiB
Swift
import GRDB
|
|
|
|
class DatabasePoolBackupTests: BackupTestCase {
|
|
|
|
func testDatabaseWriterBackup() throws {
|
|
// SQLCipher can't backup encrypted databases: use a pristine Configuration
|
|
let source = try makeDatabasePool(filename: "source.sqlite", configuration: Configuration())
|
|
let destination = try makeDatabasePool(filename: "destination.sqlite", configuration: Configuration())
|
|
try testDatabaseWriterBackup(from: source, to: destination)
|
|
}
|
|
|
|
func testDatabaseBackup() throws {
|
|
let source = try makeDatabasePool(filename: "source.sqlite", configuration: Configuration())
|
|
let destination = try makeDatabasePool(filename: "destination.sqlite", configuration: Configuration())
|
|
try testDatabaseBackup(from: source, to: destination)
|
|
}
|
|
|
|
// TODO: fix flaky test
|
|
// func testConcurrentWriteDuringBackup() throws {
|
|
// let source = try makeDatabasePool(filename: "source.sqlite")
|
|
// let destination = try makeDatabasePool(filename: "destination.sqlite")
|
|
//
|
|
// try source.write { db in
|
|
// try db.execute(sql: "CREATE TABLE item (id INTEGER PRIMARY KEY)")
|
|
// try db.execute(sql: "INSERT INTO item (id) VALUES (NULL)")
|
|
// XCTAssertEqual(try Int.fetchOne(db, sql: "SELECT COUNT(*) FROM item")!, 1)
|
|
// }
|
|
//
|
|
// let s1 = DispatchSemaphore(value: 0)
|
|
// let s2 = DispatchSemaphore(value: 0)
|
|
// DispatchQueue.global().async {
|
|
// _ = s1.wait(timeout: .distantFuture)
|
|
// try! source.writeInTransaction(.immediate) { db in
|
|
// try db.execute(sql: "INSERT INTO item (id) VALUES (NULL)")
|
|
// s2.signal()
|
|
// return .commit
|
|
// }
|
|
// }
|
|
//
|
|
// try destination.writeWithoutTransaction { dbDestination in
|
|
// try source.backup(
|
|
// to: dbDestination,
|
|
// afterBackupInit: {
|
|
// s1.signal()
|
|
// _ = s2.wait(timeout: .distantFuture)
|
|
// },
|
|
// afterBackupStep: {
|
|
// try! source.write { db in
|
|
// try db.execute(sql: "INSERT INTO item (id) VALUES (NULL)")
|
|
// }
|
|
// })
|
|
// }
|
|
//
|
|
// try source.read { db in
|
|
// XCTAssertEqual(try Int.fetchOne(db, sql: "SELECT COUNT(*) FROM item")!, 3)
|
|
// }
|
|
// try destination.read { db in
|
|
// // TODO: understand why the fix for https://github.com/groue/GRDB.swift/issues/102
|
|
// // had this value change from 2 to 1.
|
|
// // TODO: Worse, this test is fragile. I've seen not 1 but 2 once.
|
|
// XCTAssertEqual(try Int.fetchOne(db, sql: "SELECT COUNT(*) FROM item")!, 1)
|
|
// }
|
|
// }
|
|
}
|