Files
UUVPN/iOS-SwiftUI-Code/GRDB.swift-6.29.3/Tests/GRDBTests/DatabasePoolBackupTests.swift
T
2025-01-28 12:28:03 +08:00

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)
// }
// }
}