@@ -5,16 +5,16 @@ import Logging
5
5
@testable import PostgresNIO
6
6
7
7
class ExtendedQueryStateMachineTests : XCTestCase {
8
-
8
+
9
9
func testExtendedQueryWithoutDataRowsHappyPath( ) {
10
10
var state = ConnectionStateMachine . readyForQuery ( )
11
-
11
+
12
12
let logger = Logger . psqlTest
13
13
let promise = EmbeddedEventLoop ( ) . makePromise ( of: PSQLRowStream . self)
14
14
promise. fail ( PSQLError . uncleanShutdown) // we don't care about the error at all.
15
15
let query : PostgresQuery = " DELETE FROM table WHERE id= \( 1 ) "
16
16
let queryContext = ExtendedQueryContext ( query: query, logger: logger, promise: promise)
17
-
17
+
18
18
XCTAssertEqual ( state. enqueue ( task: . extendedQuery( queryContext, writePromise: nil ) ) , . sendParseDescribeBindExecuteSync( query, promise: nil ) )
19
19
XCTAssertEqual ( state. parseCompleteReceived ( ) , . wait)
20
20
XCTAssertEqual ( state. parameterDescriptionReceived ( . init( dataTypes: [ . int8] ) ) , . wait)
@@ -23,20 +23,20 @@ class ExtendedQueryStateMachineTests: XCTestCase {
23
23
XCTAssertEqual ( state. commandCompletedReceived ( " DELETE 1 " ) , . succeedQuery( promise, with: . init( value: . noRows( . tag( " DELETE 1 " ) ) , logger: logger) ) )
24
24
XCTAssertEqual ( state. readyForQueryReceived ( . idle) , . fireEventReadyForQuery)
25
25
}
26
-
26
+
27
27
func testExtendedQueryWithDataRowsHappyPath( ) {
28
28
var state = ConnectionStateMachine . readyForQuery ( )
29
-
29
+
30
30
let logger = Logger . psqlTest
31
31
let promise = EmbeddedEventLoop ( ) . makePromise ( of: PSQLRowStream . self)
32
32
promise. fail ( PSQLError . uncleanShutdown) // we don't care about the error at all.
33
33
let query : PostgresQuery = " SELECT version() "
34
34
let queryContext = ExtendedQueryContext ( query: query, logger: logger, promise: promise)
35
-
35
+
36
36
XCTAssertEqual ( state. enqueue ( task: . extendedQuery( queryContext, writePromise: nil ) ) , . sendParseDescribeBindExecuteSync( query, promise: nil ) )
37
37
XCTAssertEqual ( state. parseCompleteReceived ( ) , . wait)
38
38
XCTAssertEqual ( state. parameterDescriptionReceived ( . init( dataTypes: [ . int8] ) ) , . wait)
39
-
39
+
40
40
// We need to ensure that even though the row description from the wire says that we
41
41
// will receive data in `.text` format, we will actually receive it in binary format,
42
42
// since we requested it in binary with our bind message.
@@ -47,15 +47,15 @@ class ExtendedQueryStateMachineTests: XCTestCase {
47
47
. init( name: $0. name, tableOID: $0. tableOID, columnAttributeNumber: $0. columnAttributeNumber, dataType: $0. dataType,
48
48
dataTypeSize: $0. dataTypeSize, dataTypeModifier: $0. dataTypeModifier, format: . binary)
49
49
}
50
-
50
+
51
51
XCTAssertEqual ( state. rowDescriptionReceived ( . init( columns: input) ) , . wait)
52
52
XCTAssertEqual ( state. bindCompleteReceived ( ) , . succeedQuery( promise, with: . init( value: . rowDescription( expected) , logger: logger) ) )
53
53
let row1 : DataRow = [ ByteBuffer ( string: " test1 " ) ]
54
54
XCTAssertEqual ( state. dataRowReceived ( row1) , . wait)
55
55
XCTAssertEqual ( state. channelReadComplete ( ) , . forwardRows( [ row1] ) )
56
56
XCTAssertEqual ( state. readEventCaught ( ) , . wait)
57
57
XCTAssertEqual ( state. requestQueryRows ( ) , . read)
58
-
58
+
59
59
let row2 : DataRow = [ ByteBuffer ( string: " test2 " ) ]
60
60
let row3 : DataRow = [ ByteBuffer ( string: " test3 " ) ]
61
61
let row4 : DataRow = [ ByteBuffer ( string: " test4 " ) ]
@@ -65,15 +65,15 @@ class ExtendedQueryStateMachineTests: XCTestCase {
65
65
XCTAssertEqual ( state. channelReadComplete ( ) , . forwardRows( [ row2, row3, row4] ) )
66
66
XCTAssertEqual ( state. requestQueryRows ( ) , . wait)
67
67
XCTAssertEqual ( state. readEventCaught ( ) , . read)
68
-
68
+
69
69
XCTAssertEqual ( state. channelReadComplete ( ) , . wait)
70
70
XCTAssertEqual ( state. readEventCaught ( ) , . read)
71
-
71
+
72
72
let row5 : DataRow = [ ByteBuffer ( string: " test5 " ) ]
73
73
let row6 : DataRow = [ ByteBuffer ( string: " test6 " ) ]
74
74
XCTAssertEqual ( state. dataRowReceived ( row5) , . wait)
75
75
XCTAssertEqual ( state. dataRowReceived ( row6) , . wait)
76
-
76
+
77
77
XCTAssertEqual ( state. commandCompletedReceived ( " SELECT 2 " ) , . forwardStreamComplete( [ row5, row6] , commandTag: " SELECT 2 " ) )
78
78
XCTAssertEqual ( state. readyForQueryReceived ( . idle) , . fireEventReadyForQuery)
79
79
}
@@ -98,17 +98,17 @@ class ExtendedQueryStateMachineTests: XCTestCase {
98
98
99
99
func testReceiveTotallyUnexpectedMessageInQuery( ) {
100
100
var state = ConnectionStateMachine . readyForQuery ( )
101
-
101
+
102
102
let logger = Logger . psqlTest
103
103
let promise = EmbeddedEventLoop ( ) . makePromise ( of: PSQLRowStream . self)
104
104
promise. fail ( PSQLError . uncleanShutdown) // we don't care about the error at all.
105
105
let query : PostgresQuery = " DELETE FROM table WHERE id= \( 1 ) "
106
106
let queryContext = ExtendedQueryContext ( query: query, logger: logger, promise: promise)
107
-
107
+
108
108
XCTAssertEqual ( state. enqueue ( task: . extendedQuery( queryContext, writePromise: nil ) ) , . sendParseDescribeBindExecuteSync( query, promise: nil ) )
109
109
XCTAssertEqual ( state. parseCompleteReceived ( ) , . wait)
110
110
XCTAssertEqual ( state. parameterDescriptionReceived ( . init( dataTypes: [ . int8] ) ) , . wait)
111
-
111
+
112
112
let psqlError = PSQLError . unexpectedBackendMessage ( . authentication( . ok) )
113
113
XCTAssertEqual ( state. authenticationMessageReceived ( . ok) ,
114
114
. failQuery( promise, with: psqlError, cleanupContext: . init( action: . close, tasks: [ ] , error: psqlError, closePromise: nil ) ) )
0 commit comments