diff --git a/Tests/SwiftKueryPostgreSQLTests/TestTransaction.swift b/Tests/SwiftKueryPostgreSQLTests/TestTransaction.swift index a303f8b..196ffb7 100644 --- a/Tests/SwiftKueryPostgreSQLTests/TestTransaction.swift +++ b/Tests/SwiftKueryPostgreSQLTests/TestTransaction.swift @@ -48,42 +48,43 @@ class TestTransaction: XCTestCase { func testTransaction() { let t = MyTable() - let connection = createConnection() + let pool = CommonUtils.sharedInstance.getConnectionPool() performTest(asyncTasks: { expectation in - connection.connect() { error in - XCTAssertNil(error, "Error connecting to PostgreSQL server: \(error)") + guard let connection = pool.getConnection() else { + XCTFail("Failed to get connection") + return + } + + cleanUp(table: t.tableName, connection: connection) { result in - cleanUp(table: t.tableName, connection: connection) { result in + executeRawQuery("CREATE TABLE " + t.tableName + " (a varchar(40), b integer)", connection: connection) { result, rows in + XCTAssertEqual(result.success, true, "CREATE TABLE failed") + XCTAssertNil(result.asError, "Error in CREATE TABLE: \(result.asError!)") - executeRawQuery("CREATE TABLE " + t.tableName + " (a varchar(40), b integer)", connection: connection) { result, rows in - XCTAssertEqual(result.success, true, "CREATE TABLE failed") - XCTAssertNil(result.asError, "Error in CREATE TABLE: \(result.asError!)") + connection.startTransaction() { result in + XCTAssertEqual(result.success, true, "Failed to start transaction") + XCTAssertNil(result.asError, "Error in start transaction: \(result.asError!)") - connection.startTransaction() { result in - XCTAssertEqual(result.success, true, "Failed to start transaction") - XCTAssertNil(result.asError, "Error in start transaction: \(result.asError!)") + let i1 = Insert(into: t, rows: [["apple", 10], ["apricot", 3]]) + executeQuery(query: i1, connection: connection) { result, rows in + XCTAssertEqual(result.success, true, "INSERT failed") + XCTAssertNil(result.asError, "Error in INSERT: \(result.asError!)") - let i1 = Insert(into: t, rows: [["apple", 10], ["apricot", 3]]) - executeQuery(query: i1, connection: connection) { result, rows in + let i2 = Insert(into: t, rows: [["apple", 12], ["apricot", 23]]) + executeQuery(query: i2, connection: connection) { result, rows in XCTAssertEqual(result.success, true, "INSERT failed") XCTAssertNil(result.asError, "Error in INSERT: \(result.asError!)") - let i2 = Insert(into: t, rows: [["apple", 12], ["apricot", 23]]) - executeQuery(query: i2, connection: connection) { result, rows in - XCTAssertEqual(result.success, true, "INSERT failed") - XCTAssertNil(result.asError, "Error in INSERT: \(result.asError!)") + connection.commit() { result in + XCTAssertEqual(result.success, true, "Failed to commit transaction") + XCTAssertNil(result.asError, "Error in commit transaction: \(result.asError!)") - connection.commit() { result in - XCTAssertEqual(result.success, true, "Failed to commit transaction") - XCTAssertNil(result.asError, "Error in commit transaction: \(result.asError!)") - - let s = Select(from: t) - executeQuery(query: s, connection: connection) { result, rows in - XCTAssertEqual(result.success, true, "SELECT failed") - XCTAssertNotNil(rows, "SELECT returned no rows") - XCTAssertEqual(rows!.count, 4, "SELECT returned wrong number of rows: \(rows!.count) instead of 4") - } + let s = Select(from: t) + executeQuery(query: s, connection: connection) { result, rows in + XCTAssertEqual(result.success, true, "SELECT failed") + XCTAssertNotNil(rows, "SELECT returned no rows") + XCTAssertEqual(rows!.count, 4, "SELECT returned wrong number of rows: \(rows!.count) instead of 4") } } } @@ -98,41 +99,42 @@ class TestTransaction: XCTestCase { func testRollback() { let t = MyTable() - let connection = createConnection() + let pool = CommonUtils.sharedInstance.getConnectionPool() performTest(asyncTasks: { expectation in - connection.connect() { error in - XCTAssertNil(error, "Error connecting to PostgreSQL server: \(error)") + guard let connection = pool.getConnection() else { + XCTFail("Failed to get connection") + return + } + + cleanUp(table: t.tableName, connection: connection) { result in - cleanUp(table: t.tableName, connection: connection) { result in + executeRawQuery("CREATE TABLE " + t.tableName + " (a varchar(40), b integer)", connection: connection) { result, rows in + XCTAssertEqual(result.success, true, "CREATE TABLE failed") + XCTAssertNil(result.asError, "Error in CREATE TABLE: \(result.asError!)") - executeRawQuery("CREATE TABLE " + t.tableName + " (a varchar(40), b integer)", connection: connection) { result, rows in - XCTAssertEqual(result.success, true, "CREATE TABLE failed") - XCTAssertNil(result.asError, "Error in CREATE TABLE: \(result.asError!)") + connection.startTransaction() { result in + XCTAssertEqual(result.success, true, "Failed to start transaction") + XCTAssertNil(result.asError, "Error in start transaction: \(result.asError!)") - connection.startTransaction() { result in - XCTAssertEqual(result.success, true, "Failed to start transaction") - XCTAssertNil(result.asError, "Error in start transaction: \(result.asError!)") + let i1 = Insert(into: t, rows: [["apple", 10], ["apricot", 3]]) + executeQuery(query: i1, connection: connection) { result, rows in + XCTAssertEqual(result.success, true, "INSERT failed") + XCTAssertNil(result.asError, "Error in INSERT: \(result.asError!)") - let i1 = Insert(into: t, rows: [["apple", 10], ["apricot", 3]]) - executeQuery(query: i1, connection: connection) { result, rows in + let i2 = Insert(into: t, rows: [["apple", 12], ["apricot", 23]]) + executeQuery(query: i2, connection: connection) { result, rows in XCTAssertEqual(result.success, true, "INSERT failed") XCTAssertNil(result.asError, "Error in INSERT: \(result.asError!)") - let i2 = Insert(into: t, rows: [["apple", 12], ["apricot", 23]]) - executeQuery(query: i2, connection: connection) { result, rows in - XCTAssertEqual(result.success, true, "INSERT failed") - XCTAssertNil(result.asError, "Error in INSERT: \(result.asError!)") + connection.rollback() { result in + XCTAssertEqual(result.success, true, "Failed to rollback transaction") + XCTAssertNil(result.asError, "Error in rollback transaction: \(result.asError!)") - connection.rollback() { result in - XCTAssertEqual(result.success, true, "Failed to rollback transaction") - XCTAssertNil(result.asError, "Error in rollback transaction: \(result.asError!)") - - let s = Select(from: t) - executeQuery(query: s, connection: connection) { result, rows in - XCTAssertEqual(result.success, true, "SELECT failed") - XCTAssertNil(rows, "SELECT returned rows") - } + let s = Select(from: t) + executeQuery(query: s, connection: connection) { result, rows in + XCTAssertEqual(result.success, true, "SELECT failed") + XCTAssertNil(rows, "SELECT returned rows") } } } @@ -147,76 +149,77 @@ class TestTransaction: XCTestCase { func testSavepoint() { let t = MyTable() - let connection = createConnection() + let pool = CommonUtils.sharedInstance.getConnectionPool() performTest(asyncTasks: { expectation in - connection.connect() { error in - XCTAssertNil(error, "Error connecting to PostgreSQL server: \(error)") + guard let connection = pool.getConnection() else { + XCTFail("Failed to get connection") + return + } + + cleanUp(table: t.tableName, connection: connection) { result in - cleanUp(table: t.tableName, connection: connection) { result in + connection.startTransaction() { result in + XCTAssertEqual(result.success, true, "Failed to start transaction") + XCTAssertNil(result.asError, "Error in start transaction: \(result.asError!)") - connection.startTransaction() { result in - XCTAssertEqual(result.success, true, "Failed to start transaction") - XCTAssertNil(result.asError, "Error in start transaction: \(result.asError!)") + executeRawQuery("CREATE TABLE " + t.tableName + " (a varchar(40), b integer)", connection: connection) { result, rows in + XCTAssertEqual(result.success, true, "CREATE TABLE failed") + XCTAssertNil(result.asError, "Error in CREATE TABLE: \(result.asError!)") - executeRawQuery("CREATE TABLE " + t.tableName + " (a varchar(40), b integer)", connection: connection) { result, rows in - XCTAssertEqual(result.success, true, "CREATE TABLE failed") - XCTAssertNil(result.asError, "Error in CREATE TABLE: \(result.asError!)") + connection.create(savepoint: "spcreate") { result in + XCTAssertEqual(result.success, true, "Failed to create savepoint") + XCTAssertNil(result.asError, "Error in create savepoint: \(result.asError!)") - connection.create(savepoint: "spcreate") { result in - XCTAssertEqual(result.success, true, "Failed to create savepoint") - XCTAssertNil(result.asError, "Error in create savepoint: \(result.asError!)") + let i1 = Insert(into: t, rows: [["apple", 10], ["apricot", 3]]) + executeQuery(query: i1, connection: connection) { result, rows in + XCTAssertEqual(result.success, true, "INSERT failed") + XCTAssertNil(result.asError, "Error in INSERT: \(result.asError!)") - let i1 = Insert(into: t, rows: [["apple", 10], ["apricot", 3]]) - executeQuery(query: i1, connection: connection) { result, rows in - XCTAssertEqual(result.success, true, "INSERT failed") - XCTAssertNil(result.asError, "Error in INSERT: \(result.asError!)") + connection.create(savepoint: "spinsert1") { result in + XCTAssertEqual(result.success, true, "Failed to create savepoint") + XCTAssertNil(result.asError, "Error in create savepoint: \(result.asError!)") - connection.create(savepoint: "spinsert1") { result in - XCTAssertEqual(result.success, true, "Failed to create savepoint") - XCTAssertNil(result.asError, "Error in create savepoint: \(result.asError!)") - + + let i2 = Insert(into: t, rows: [["apple", 12], ["apricot", 23]]) + executeQuery(query: i2, connection: connection) { result, rows in + XCTAssertEqual(result.success, true, "INSERT failed") + XCTAssertNil(result.asError, "Error in INSERT: \(result.asError!)") - let i2 = Insert(into: t, rows: [["apple", 12], ["apricot", 23]]) - executeQuery(query: i2, connection: connection) { result, rows in - XCTAssertEqual(result.success, true, "INSERT failed") - XCTAssertNil(result.asError, "Error in INSERT: \(result.asError!)") + connection.create(savepoint: "spinsert2") { result in + XCTAssertEqual(result.success, true, "Failed to create savepoint") + XCTAssertNil(result.asError, "Error in create savepoint: \(result.asError!)") - connection.create(savepoint: "spinsert2") { result in - XCTAssertEqual(result.success, true, "Failed to create savepoint") - XCTAssertNil(result.asError, "Error in create savepoint: \(result.asError!)") + connection.release(savepoint: "spinsert2") { result in + XCTAssertEqual(result.success, true, "Failed to release savepoint") + XCTAssertNil(result.asError, "Error in release savepoint: \(result.asError!)") - connection.release(savepoint: "spinsert2") { result in - XCTAssertEqual(result.success, true, "Failed to release savepoint") - XCTAssertNil(result.asError, "Error in release savepoint: \(result.asError!)") + connection.rollback(to: "spinsert1") { result in + XCTAssertEqual(result.success, true, "Failed to rollback transaction") + XCTAssertNil(result.asError, "Error in rollback transaction: \(result.asError!)") - connection.rollback(to: "spinsert1") { result in - XCTAssertEqual(result.success, true, "Failed to rollback transaction") - XCTAssertNil(result.asError, "Error in rollback transaction: \(result.asError!)") + let s = Select(from: t) + executeQuery(query: s, connection: connection) { result, rows in + XCTAssertEqual(result.success, true, "SELECT failed") + XCTAssertNotNil(rows, "SELECT returned no rows") + XCTAssertEqual(rows!.count, 2, "SELECT returned wrong number of rows: \(rows!.count) instead of 2") - let s = Select(from: t) - executeQuery(query: s, connection: connection) { result, rows in - XCTAssertEqual(result.success, true, "SELECT failed") - XCTAssertNotNil(rows, "SELECT returned no rows") - XCTAssertEqual(rows!.count, 2, "SELECT returned wrong number of rows: \(rows!.count) instead of 2") + connection.rollback(to: "spcreate") { result in + XCTAssertEqual(result.success, true, "Failed to rollback transaction") + XCTAssertNil(result.asError, "Error in rollback transaction: \(result.asError!)") - connection.rollback(to: "spcreate") { result in - XCTAssertEqual(result.success, true, "Failed to rollback transaction") - XCTAssertNil(result.asError, "Error in rollback transaction: \(result.asError!)") + let s = Select(from: t) + executeQuery(query: s, connection: connection) { result, rows in + XCTAssertEqual(result.success, true, "SELECT failed") + XCTAssertNil(rows, "SELECT returned rows") - let s = Select(from: t) - executeQuery(query: s, connection: connection) { result, rows in - XCTAssertEqual(result.success, true, "SELECT failed") - XCTAssertNil(rows, "SELECT returned rows") + connection.release(savepoint: "spcreate") { result in + XCTAssertEqual(result.success, true, "Failed to release savepoint") + XCTAssertNil(result.asError, "Error in release savepoint: \(result.asError!)") - connection.release(savepoint: "spcreate") { result in - XCTAssertEqual(result.success, true, "Failed to release savepoint") - XCTAssertNil(result.asError, "Error in release savepoint: \(result.asError!)") - - connection.commit() { result in - XCTAssertEqual(result.success, true, "Failed to commit transaction") - XCTAssertNil(result.asError, "Error in commit transaction: \(result.asError!)") - } + connection.commit() { result in + XCTAssertEqual(result.success, true, "Failed to commit transaction") + XCTAssertNil(result.asError, "Error in commit transaction: \(result.asError!)") } } } @@ -239,47 +242,47 @@ class TestTransaction: XCTestCase { func testErrors1() { let t = MyTable() - let connection = createConnection() + let pool = CommonUtils.sharedInstance.getConnectionPool() performTest(asyncTasks: { expectation in - connection.connect() { error in - XCTAssertNil(error, "Error connecting to PostgreSQL server: \(error)") + guard let connection = pool.getConnection() else { + XCTFail("Failed to get connection") + return + } + cleanUp(table: t.tableName, connection: connection) { result in - cleanUp(table: t.tableName, connection: connection) { result in + connection.release(savepoint: "spinsert2") { result in + XCTAssertEqual(result.success, false, "Succeeded to release savepoint without transaction") - connection.release(savepoint: "spinsert2") { result in - XCTAssertEqual(result.success, false, "Succeeded to release savepoint without transaction") + connection.rollback(to: "spinsert1") { result in + XCTAssertEqual(result.success, false, "Succeeded to rollback to savepoint without transaction") - connection.rollback(to: "spinsert1") { result in - XCTAssertEqual(result.success, false, "Succeeded to rollback to savepoint without transaction") + connection.startTransaction() { result in + XCTAssertEqual(result.success, true, "Failed to start transaction") + XCTAssertNil(result.asError, "Error in start transaction: \(result.asError!)") connection.startTransaction() { result in - XCTAssertEqual(result.success, true, "Failed to start transaction") - XCTAssertNil(result.asError, "Error in start transaction: \(result.asError!)") + XCTAssertEqual(result.success, false, "Started second transaction") - connection.startTransaction() { result in - XCTAssertEqual(result.success, false, "Started second transaction") + executeRawQuery("CREATE TABLE " + t.tableName + " (a varchar(40), b integer)", connection: connection) { result, rows in + XCTAssertEqual(result.success, true, "CREATE TABLE failed") + XCTAssertNil(result.asError, "Error in CREATE TABLE: \(result.asError!)") - executeRawQuery("CREATE TABLE " + t.tableName + " (a varchar(40), b integer)", connection: connection) { result, rows in - XCTAssertEqual(result.success, true, "CREATE TABLE failed") - XCTAssertNil(result.asError, "Error in CREATE TABLE: \(result.asError!)") + connection.create(savepoint: "spcreate") { result in + XCTAssertEqual(result.success, true, "Failed to create savepoint") + XCTAssertNil(result.asError, "Error in create savepoint: \(result.asError!)") - connection.create(savepoint: "spcreate") { result in - XCTAssertEqual(result.success, true, "Failed to create savepoint") - XCTAssertNil(result.asError, "Error in create savepoint: \(result.asError!)") + let i1 = Insert(into: t, rows: [["apple", 10], ["apricot", 3]]) + executeQuery(query: i1, connection: connection) { result, rows in + XCTAssertEqual(result.success, true, "INSERT failed") + XCTAssertNil(result.asError, "Error in INSERT: \(result.asError!)") - let i1 = Insert(into: t, rows: [["apple", 10], ["apricot", 3]]) - executeQuery(query: i1, connection: connection) { result, rows in - XCTAssertEqual(result.success, true, "INSERT failed") - XCTAssertNil(result.asError, "Error in INSERT: \(result.asError!)") + connection.release(savepoint: "spinsert2") { result in + XCTAssertEqual(result.success, false, "Release non-existing savepoint") - connection.release(savepoint: "spinsert2") { result in - XCTAssertEqual(result.success, false, "Release non-existing savepoint") - - connection.commit() { result in - XCTAssertEqual(result.success, true, "Failed to commit transaction") - XCTAssertNil(result.asError, "Error in commit transaction: \(result.asError!)") - } + connection.commit() { result in + XCTAssertEqual(result.success, true, "Failed to commit transaction") + XCTAssertNil(result.asError, "Error in commit transaction: \(result.asError!)") } } } @@ -298,44 +301,44 @@ class TestTransaction: XCTestCase { func testErrors2() { let t = MyTable() - let connection = createConnection() + let pool = CommonUtils.sharedInstance.getConnectionPool() performTest(asyncTasks: { expectation in - connection.connect() { error in - XCTAssertNil(error, "Error connecting to PostgreSQL server: \(error)") + guard let connection = pool.getConnection() else { + XCTFail("Failed to get connection") + return + } + cleanUp(table: t.tableName, connection: connection) { result in - cleanUp(table: t.tableName, connection: connection) { result in + connection.commit() { result in + XCTAssertEqual(result.success, false, "Succeeded to commit savepoint without transaction") - connection.commit() { result in - XCTAssertEqual(result.success, false, "Succeeded to commit savepoint without transaction") + connection.create(savepoint: "spcreate") { result in + XCTAssertEqual(result.success, false, "Succeeded to create savepoint without transaction") - connection.create(savepoint: "spcreate") { result in - XCTAssertEqual(result.success, false, "Succeeded to create savepoint without transaction") + connection.startTransaction() { result in + XCTAssertEqual(result.success, true, "Failed to start transaction") + XCTAssertNil(result.asError, "Error in start transaction: \(result.asError!)") - connection.startTransaction() { result in - XCTAssertEqual(result.success, true, "Failed to start transaction") - XCTAssertNil(result.asError, "Error in start transaction: \(result.asError!)") + executeRawQuery("CREATE TABLE " + t.tableName + " (a varchar(40), b integer)", connection: connection) { result, rows in + XCTAssertEqual(result.success, true, "CREATE TABLE failed") + XCTAssertNil(result.asError, "Error in CREATE TABLE: \(result.asError!)") - executeRawQuery("CREATE TABLE " + t.tableName + " (a varchar(40), b integer)", connection: connection) { result, rows in - XCTAssertEqual(result.success, true, "CREATE TABLE failed") - XCTAssertNil(result.asError, "Error in CREATE TABLE: \(result.asError!)") + connection.create(savepoint: "spcreate") { result in + XCTAssertEqual(result.success, true, "Failed to create savepoint") + XCTAssertNil(result.asError, "Error in create savepoint: \(result.asError!)") - connection.create(savepoint: "spcreate") { result in - XCTAssertEqual(result.success, true, "Failed to create savepoint") - XCTAssertNil(result.asError, "Error in create savepoint: \(result.asError!)") + let i1 = Insert(into: t, rows: [["apple", 10], ["apricot", 3]]) + executeQuery(query: i1, connection: connection) { result, rows in + XCTAssertEqual(result.success, true, "INSERT failed") + XCTAssertNil(result.asError, "Error in INSERT: \(result.asError!)") - let i1 = Insert(into: t, rows: [["apple", 10], ["apricot", 3]]) - executeQuery(query: i1, connection: connection) { result, rows in - XCTAssertEqual(result.success, true, "INSERT failed") - XCTAssertNil(result.asError, "Error in INSERT: \(result.asError!)") + connection.rollback(to: "spinsert1") { result in + XCTAssertEqual(result.success, false, "Rolled back to non-existing savepoint") - connection.rollback(to: "spinsert1") { result in - XCTAssertEqual(result.success, false, "Rolled back to non-existing savepoint") - - connection.commit() { result in - XCTAssertEqual(result.success, true, "Failed to commit transaction") - XCTAssertNil(result.asError, "Error in commit transaction: \(result.asError!)") - } + connection.commit() { result in + XCTAssertEqual(result.success, true, "Failed to commit transaction") + XCTAssertNil(result.asError, "Error in commit transaction: \(result.asError!)") } } }