Skip to content

Commit e73443b

Browse files
committed
remove promise-passing through the send actions
1 parent 29dc613 commit e73443b

File tree

6 files changed

+57
-58
lines changed

6 files changed

+57
-58
lines changed

Sources/PostgresNIO/New/Connection State Machine/AuthenticationStateMachine.swift

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,10 @@ struct AuthenticationStateMachine {
1616
}
1717

1818
enum Action {
19-
case sendStartupMessage(AuthContext, promise: EventLoopPromise<Void>?)
20-
case sendPassword(PasswordAuthencationMode, AuthContext, promise: EventLoopPromise<Void>?)
21-
case sendSaslInitialResponse(name: String, initialResponse: [UInt8], promise: EventLoopPromise<Void>?)
22-
case sendSaslResponse([UInt8], promise: EventLoopPromise<Void>?)
19+
case sendStartupMessage(AuthContext)
20+
case sendPassword(PasswordAuthencationMode, AuthContext)
21+
case sendSaslInitialResponse(name: String, initialResponse: [UInt8])
22+
case sendSaslResponse([UInt8])
2323
case wait
2424
case authenticated
2525

@@ -34,12 +34,12 @@ struct AuthenticationStateMachine {
3434
self.state = .initialized
3535
}
3636

37-
mutating func start(_ promise: EventLoopPromise<Void>?) -> Action {
37+
mutating func start() -> Action {
3838
guard case .initialized = self.state else {
3939
preconditionFailure("Unexpected state")
4040
}
4141
self.state = .startupMessageSent
42-
return .sendStartupMessage(self.authContext, promise: promise)
42+
return .sendStartupMessage(self.authContext)
4343
}
4444

4545
mutating func authenticationMessageReceived(_ message: PostgresBackendMessage.Authentication) -> Action {
@@ -54,10 +54,10 @@ struct AuthenticationStateMachine {
5454
return self.setAndFireError(PSQLError(code: .authMechanismRequiresPassword))
5555
}
5656
self.state = .passwordAuthenticationSent
57-
return .sendPassword(.md5(salt: salt), self.authContext, promise: nil)
57+
return .sendPassword(.md5(salt: salt), self.authContext)
5858
case .plaintext:
5959
self.state = .passwordAuthenticationSent
60-
return .sendPassword(.cleartext, authContext, promise: nil)
60+
return .sendPassword(.cleartext, authContext)
6161
case .kerberosV5:
6262
return self.setAndFireError(.unsupportedAuthMechanism(.kerberosV5))
6363
case .scmCredential:
@@ -89,7 +89,7 @@ struct AuthenticationStateMachine {
8989
}
9090

9191
self.state = .saslInitialResponseSent(saslManager)
92-
return .sendSaslInitialResponse(name: SASLMechanism.SCRAM.SHA256.name, initialResponse: output, promise: nil)
92+
return .sendSaslInitialResponse(name: SASLMechanism.SCRAM.SHA256.name, initialResponse: output)
9393
} catch {
9494
return self.setAndFireError(.sasl(underlying: error))
9595
}
@@ -122,7 +122,7 @@ struct AuthenticationStateMachine {
122122
}
123123

124124
self.state = .saslChallengeResponseSent(saslManager)
125-
return .sendSaslResponse(output, promise: nil)
125+
return .sendSaslResponse(output)
126126
} catch {
127127
return self.setAndFireError(.sasl(underlying: error))
128128
}

Sources/PostgresNIO/New/Connection State Machine/ConnectionStateMachine.swift

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -77,10 +77,10 @@ struct ConnectionStateMachine {
7777
case closeConnectionAndCleanup(CleanUpContext)
7878

7979
// Auth Actions
80-
case sendStartupMessage(AuthContext, promise: EventLoopPromise<Void>?)
81-
case sendPasswordMessage(PasswordAuthencationMode, AuthContext, promise: EventLoopPromise<Void>?)
82-
case sendSaslInitialResponse(name: String, initialResponse: [UInt8], promise: EventLoopPromise<Void>?)
83-
case sendSaslResponse([UInt8], promise: EventLoopPromise<Void>?)
80+
case sendStartupMessage(AuthContext)
81+
case sendPasswordMessage(PasswordAuthencationMode, AuthContext)
82+
case sendSaslInitialResponse(name: String, initialResponse: [UInt8])
83+
case sendSaslResponse([UInt8])
8484

8585
// Connection Actions
8686

@@ -815,7 +815,7 @@ struct ConnectionStateMachine {
815815

816816
self.state = .modifying // avoid CoW
817817
var authState = AuthenticationStateMachine(authContext: authContext)
818-
let action = authState.start(promise)
818+
let action = authState.start()
819819
self.state = .authenticating(authState)
820820
return self.modify(with: action)
821821
}
@@ -1079,14 +1079,14 @@ extension ConnectionStateMachine {
10791079
extension ConnectionStateMachine {
10801080
mutating func modify(with action: AuthenticationStateMachine.Action) -> ConnectionStateMachine.ConnectionAction {
10811081
switch action {
1082-
case .sendStartupMessage(let authContext, let promise):
1083-
return .sendStartupMessage(authContext, promise: promise)
1084-
case .sendPassword(let mode, let authContext, let promise):
1085-
return .sendPasswordMessage(mode, authContext, promise: promise)
1086-
case .sendSaslInitialResponse(let name, let initialResponse, let promise):
1087-
return .sendSaslInitialResponse(name: name, initialResponse: initialResponse, promise: promise)
1088-
case .sendSaslResponse(let bytes, let promise):
1089-
return .sendSaslResponse(bytes, promise: promise)
1082+
case .sendStartupMessage(let authContext):
1083+
return .sendStartupMessage(authContext)
1084+
case .sendPassword(let mode, let authContext):
1085+
return .sendPasswordMessage(mode, authContext)
1086+
case .sendSaslInitialResponse(let name, let initialResponse):
1087+
return .sendSaslInitialResponse(name: name, initialResponse: initialResponse)
1088+
case .sendSaslResponse(let bytes):
1089+
return .sendSaslResponse(bytes)
10901090
case .authenticated:
10911091
self.state = .authenticated(nil, [:])
10921092
return .wait

Sources/PostgresNIO/New/PostgresChannelHandler.swift

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -339,20 +339,20 @@ final class PostgresChannelHandler: ChannelDuplexHandler {
339339
context.read()
340340
case .wait:
341341
break
342-
case .sendStartupMessage(let authContext, let promise):
342+
case .sendStartupMessage(let authContext):
343343
self.encoder.startup(user: authContext.username, database: authContext.database, options: authContext.additionalParameters)
344-
context.writeAndFlush(self.wrapOutboundOut(self.encoder.flushBuffer()), promise: promise)
344+
context.writeAndFlush(self.wrapOutboundOut(self.encoder.flushBuffer()), promise: nil)
345345
case .sendSSLRequest(let promise):
346346
self.encoder.ssl()
347-
context.writeAndFlush(self.wrapOutboundOut(self.encoder.flushBuffer()), promise: promise)
348-
case .sendPasswordMessage(let mode, let authContext, let promise):
349-
self.sendPasswordMessage(mode: mode, authContext: authContext, context: context, promise: promise)
350-
case .sendSaslInitialResponse(let name, let initialResponse, let promise):
347+
context.writeAndFlush(self.wrapOutboundOut(self.encoder.flushBuffer()), promise: nil)
348+
case .sendPasswordMessage(let mode, let authContext):
349+
self.sendPasswordMessage(mode: mode, authContext: authContext, context: context)
350+
case .sendSaslInitialResponse(let name, let initialResponse):
351351
self.encoder.saslInitialResponse(mechanism: name, bytes: initialResponse)
352-
context.writeAndFlush(self.wrapOutboundOut(self.encoder.flushBuffer()), promise: promise)
353-
case .sendSaslResponse(let bytes, let promise):
352+
context.writeAndFlush(self.wrapOutboundOut(self.encoder.flushBuffer()), promise: nil)
353+
case .sendSaslResponse(let bytes):
354354
self.encoder.saslResponse(bytes)
355-
context.writeAndFlush(self.wrapOutboundOut(self.encoder.flushBuffer()), promise: promise)
355+
context.writeAndFlush(self.wrapOutboundOut(self.encoder.flushBuffer()), promise: nil)
356356
case .closeConnectionAndCleanup(let cleanupContext):
357357
self.closeConnectionAndCleanup(cleanupContext, context: context)
358358
case .fireChannelInactive:
@@ -470,8 +470,7 @@ final class PostgresChannelHandler: ChannelDuplexHandler {
470470
private func sendPasswordMessage(
471471
mode: PasswordAuthencationMode,
472472
authContext: AuthContext,
473-
context: ChannelHandlerContext,
474-
promise: EventLoopPromise<Void>?
473+
context: ChannelHandlerContext
475474
) {
476475
switch mode {
477476
case .md5(let salt):
@@ -488,11 +487,11 @@ final class PostgresChannelHandler: ChannelDuplexHandler {
488487
let hash = Insecure.MD5.hash(data: hash2).md5PrefixHexdigest()
489488

490489
self.encoder.password(hash.utf8)
491-
context.writeAndFlush(self.wrapOutboundOut(self.encoder.flushBuffer()), promise: promise)
490+
context.writeAndFlush(self.wrapOutboundOut(self.encoder.flushBuffer()), promise: nil)
492491

493492
case .cleartext:
494493
self.encoder.password((authContext.password ?? "").utf8)
495-
context.writeAndFlush(self.wrapOutboundOut(self.encoder.flushBuffer()), promise: promise)
494+
context.writeAndFlush(self.wrapOutboundOut(self.encoder.flushBuffer()), promise: nil)
496495
}
497496
}
498497

Tests/PostgresNIOTests/New/Connection State Machine/AuthenticationStateMachineTests.swift

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ class AuthenticationStateMachineTests: XCTestCase {
1010
var state = ConnectionStateMachine(requireBackendKeyData: true)
1111
XCTAssertEqual(state.connected(tls: .disable, promise: nil), .provideAuthenticationContext)
1212

13-
XCTAssertEqual(state.provideAuthenticationContext(authContext, promise: nil), .sendStartupMessage(authContext, promise: nil))
14-
XCTAssertEqual(state.authenticationMessageReceived(.plaintext), .sendPasswordMessage(.cleartext, authContext, promise: nil))
13+
XCTAssertEqual(state.provideAuthenticationContext(authContext, promise: nil), .sendStartupMessage(authContext))
14+
XCTAssertEqual(state.authenticationMessageReceived(.plaintext), .sendPasswordMessage(.cleartext, authContext))
1515
XCTAssertEqual(state.authenticationMessageReceived(.ok), .wait)
1616
}
1717

@@ -21,8 +21,8 @@ class AuthenticationStateMachineTests: XCTestCase {
2121
XCTAssertEqual(state.connected(tls: .disable, promise: nil), .provideAuthenticationContext)
2222
let salt: UInt32 = 0x00_01_02_03
2323

24-
XCTAssertEqual(state.provideAuthenticationContext(authContext, promise: nil), .sendStartupMessage(authContext, promise: nil))
25-
XCTAssertEqual(state.authenticationMessageReceived(.md5(salt: salt)), .sendPasswordMessage(.md5(salt: salt), authContext, promise: nil))
24+
XCTAssertEqual(state.provideAuthenticationContext(authContext, promise: nil), .sendStartupMessage(authContext))
25+
XCTAssertEqual(state.authenticationMessageReceived(.md5(salt: salt)), .sendPasswordMessage(.md5(salt: salt), authContext))
2626
XCTAssertEqual(state.authenticationMessageReceived(.ok), .wait)
2727
}
2828

@@ -32,7 +32,7 @@ class AuthenticationStateMachineTests: XCTestCase {
3232
XCTAssertEqual(state.connected(tls: .disable, promise: nil), .provideAuthenticationContext)
3333
let salt: UInt32 = 0x00_01_02_03
3434

35-
XCTAssertEqual(state.provideAuthenticationContext(authContext, promise: nil), .sendStartupMessage(authContext, promise: nil))
35+
XCTAssertEqual(state.provideAuthenticationContext(authContext, promise: nil), .sendStartupMessage(authContext))
3636
XCTAssertEqual(state.authenticationMessageReceived(.md5(salt: salt)),
3737
.closeConnectionAndCleanup(.init(action: .close, tasks: [], error: .authMechanismRequiresPassword, closePromise: nil)))
3838
}
@@ -41,18 +41,18 @@ class AuthenticationStateMachineTests: XCTestCase {
4141
let authContext = AuthContext(username: "test", password: "abc123", database: "test")
4242
var state = ConnectionStateMachine(requireBackendKeyData: true)
4343
XCTAssertEqual(state.connected(tls: .disable, promise: nil), .provideAuthenticationContext)
44-
XCTAssertEqual(state.provideAuthenticationContext(authContext, promise: nil), .sendStartupMessage(authContext, promise: nil))
44+
XCTAssertEqual(state.provideAuthenticationContext(authContext, promise: nil), .sendStartupMessage(authContext))
4545
XCTAssertEqual(state.authenticationMessageReceived(.ok), .wait)
4646
}
4747

4848
func testAuthenticateSCRAMSHA256WithAtypicalEncoding() {
4949
let authContext = AuthContext(username: "test", password: "abc123", database: "test")
5050
var state = ConnectionStateMachine(requireBackendKeyData: true)
5151
XCTAssertEqual(state.connected(tls: .disable, promise: nil), .provideAuthenticationContext)
52-
XCTAssertEqual(state.provideAuthenticationContext(authContext, promise: nil), .sendStartupMessage(authContext, promise: nil))
52+
XCTAssertEqual(state.provideAuthenticationContext(authContext, promise: nil), .sendStartupMessage(authContext))
5353

5454
let saslResponse = state.authenticationMessageReceived(.sasl(names: ["SCRAM-SHA-256"]))
55-
guard case .sendSaslInitialResponse(name: let name, initialResponse: let responseData, _) = saslResponse else {
55+
guard case .sendSaslInitialResponse(name: let name, initialResponse: let responseData) = saslResponse else {
5656
return XCTFail("\(saslResponse) is not .sendSaslInitialResponse")
5757
}
5858
let responseString = String(decoding: responseData, as: UTF8.self)
@@ -62,7 +62,7 @@ class AuthenticationStateMachineTests: XCTestCase {
6262
let saslContinueResponse = state.authenticationMessageReceived(.saslContinue(data: .init(bytes:
6363
"r=\(responseString.dropFirst(12))RUJSZHhkeUVFNzRLNERKMkxmU05ITU1NZWcxaQ==,s=ijgUVaWgCDLRJyF963BKNA==,i=4096".utf8
6464
)))
65-
guard case .sendSaslResponse(let responseData2, _) = saslContinueResponse else {
65+
guard case .sendSaslResponse(let responseData2) = saslContinueResponse else {
6666
return XCTFail("\(saslContinueResponse) is not .sendSaslResponse")
6767
}
6868
let response2String = String(decoding: responseData2, as: UTF8.self)
@@ -75,8 +75,8 @@ class AuthenticationStateMachineTests: XCTestCase {
7575
XCTAssertEqual(state.connected(tls: .disable, promise: nil), .provideAuthenticationContext)
7676
let salt: UInt32 = 0x00_01_02_03
7777

78-
XCTAssertEqual(state.provideAuthenticationContext(authContext, promise: nil), .sendStartupMessage(authContext, promise: nil))
79-
XCTAssertEqual(state.authenticationMessageReceived(.md5(salt: salt)), .sendPasswordMessage(.md5(salt: salt), authContext, promise: nil))
78+
XCTAssertEqual(state.provideAuthenticationContext(authContext, promise: nil), .sendStartupMessage(authContext))
79+
XCTAssertEqual(state.authenticationMessageReceived(.md5(salt: salt)), .sendPasswordMessage(.md5(salt: salt), authContext))
8080
let fields: [PostgresBackendMessage.Field: String] = [
8181
.message: "password authentication failed for user \"postgres\"",
8282
.severity: "FATAL",
@@ -105,7 +105,7 @@ class AuthenticationStateMachineTests: XCTestCase {
105105
let authContext = AuthContext(username: "test", password: "abc123", database: "test")
106106
var state = ConnectionStateMachine(requireBackendKeyData: true)
107107
XCTAssertEqual(state.connected(tls: .disable, promise: nil), .provideAuthenticationContext)
108-
XCTAssertEqual(state.provideAuthenticationContext(authContext, promise: nil), .sendStartupMessage(authContext, promise: nil))
108+
XCTAssertEqual(state.provideAuthenticationContext(authContext, promise: nil), .sendStartupMessage(authContext))
109109
XCTAssertEqual(state.authenticationMessageReceived(message),
110110
.closeConnectionAndCleanup(.init(action: .close, tasks: [], error: .unsupportedAuthMechanism(mechanism), closePromise: nil)))
111111
}
@@ -124,7 +124,7 @@ class AuthenticationStateMachineTests: XCTestCase {
124124
let authContext = AuthContext(username: "test", password: "abc123", database: "test")
125125
var state = ConnectionStateMachine(requireBackendKeyData: true)
126126
XCTAssertEqual(state.connected(tls: .disable, promise: nil), .provideAuthenticationContext)
127-
XCTAssertEqual(state.provideAuthenticationContext(authContext, promise: nil), .sendStartupMessage(authContext, promise: nil))
127+
XCTAssertEqual(state.provideAuthenticationContext(authContext, promise: nil), .sendStartupMessage(authContext))
128128
XCTAssertEqual(state.authenticationMessageReceived(message),
129129
.closeConnectionAndCleanup(.init(action: .close, tasks: [], error: .unexpectedBackendMessage(.authentication(message)), closePromise: nil)))
130130
}
@@ -151,8 +151,8 @@ class AuthenticationStateMachineTests: XCTestCase {
151151
let authContext = AuthContext(username: "test", password: "abc123", database: "test")
152152
var state = ConnectionStateMachine(requireBackendKeyData: true)
153153
XCTAssertEqual(state.connected(tls: .disable, promise: nil), .provideAuthenticationContext)
154-
XCTAssertEqual(state.provideAuthenticationContext(authContext, promise: nil), .sendStartupMessage(authContext, promise: nil))
155-
XCTAssertEqual(state.authenticationMessageReceived(.md5(salt: salt)), .sendPasswordMessage(.md5(salt: salt), authContext, promise: nil))
154+
XCTAssertEqual(state.provideAuthenticationContext(authContext, promise: nil), .sendStartupMessage(authContext))
155+
XCTAssertEqual(state.authenticationMessageReceived(.md5(salt: salt)), .sendPasswordMessage(.md5(salt: salt), authContext))
156156
XCTAssertEqual(state.authenticationMessageReceived(message),
157157
.closeConnectionAndCleanup(.init(action: .close, tasks: [], error: .unexpectedBackendMessage(.authentication(message)), closePromise: nil)))
158158
}

Tests/PostgresNIOTests/New/Connection State Machine/ConnectionStateMachineTests.swift

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ class ConnectionStateMachineTests: XCTestCase {
1010
let authContext = AuthContext(username: "test", password: "abc123", database: "test")
1111
var state = ConnectionStateMachine(requireBackendKeyData: true)
1212
XCTAssertEqual(state.connected(tls: .disable, promise: nil), .provideAuthenticationContext)
13-
XCTAssertEqual(state.provideAuthenticationContext(authContext, promise: nil), .sendStartupMessage(authContext, promise: nil))
14-
XCTAssertEqual(state.authenticationMessageReceived(.plaintext), .sendPasswordMessage(.cleartext, authContext, promise: nil))
13+
XCTAssertEqual(state.provideAuthenticationContext(authContext, promise: nil), .sendStartupMessage(authContext))
14+
XCTAssertEqual(state.authenticationMessageReceived(.plaintext), .sendPasswordMessage(.cleartext, authContext))
1515
XCTAssertEqual(state.authenticationMessageReceived(.ok), .wait)
1616
}
1717

@@ -22,9 +22,9 @@ class ConnectionStateMachineTests: XCTestCase {
2222
XCTAssertEqual(state.sslSupportedReceived(unprocessedBytes: 0, promise: nil), .establishSSLConnection(nil))
2323
XCTAssertEqual(state.sslHandlerAdded(), .wait)
2424
XCTAssertEqual(state.sslEstablished(), .provideAuthenticationContext)
25-
XCTAssertEqual(state.provideAuthenticationContext(authContext, promise: nil), .sendStartupMessage(authContext, promise: nil))
25+
XCTAssertEqual(state.provideAuthenticationContext(authContext, promise: nil), .sendStartupMessage(authContext))
2626
let salt: UInt32 = 0x00_01_02_03
27-
XCTAssertEqual(state.authenticationMessageReceived(.md5(salt: salt)), .sendPasswordMessage(.md5(salt: salt), authContext, promise: nil))
27+
XCTAssertEqual(state.authenticationMessageReceived(.md5(salt: salt)), .sendPasswordMessage(.md5(salt: salt), authContext))
2828
}
2929

3030
func testSSLStartupFailureTooManyBytesRemaining() {
@@ -166,8 +166,8 @@ class ConnectionStateMachineTests: XCTestCase {
166166

167167
XCTAssertEqual(state.enqueue(task: .extendedQuery(extendedQueryContext, writePromise: nil)), .wait)
168168
XCTAssertEqual(state.connected(tls: .disable, promise: nil), .provideAuthenticationContext)
169-
XCTAssertEqual(state.provideAuthenticationContext(authContext, promise: nil), .sendStartupMessage(authContext, promise: nil))
170-
XCTAssertEqual(state.authenticationMessageReceived(.md5(salt: salt)), .sendPasswordMessage(.md5(salt: salt), authContext, promise: nil))
169+
XCTAssertEqual(state.provideAuthenticationContext(authContext, promise: nil), .sendStartupMessage(authContext))
170+
XCTAssertEqual(state.authenticationMessageReceived(.md5(salt: salt)), .sendPasswordMessage(.md5(salt: salt), authContext))
171171
let fields: [PostgresBackendMessage.Field: String] = [
172172
.message: "password authentication failed for user \"postgres\"",
173173
.severity: "FATAL",

0 commit comments

Comments
 (0)