@@ -160,7 +160,7 @@ final class ConnectionPoolTests: GRPCTestCase {
160160 }
161161
162162 XCTAssertThrowsError ( try stream. wait ( ) ) { error in
163- XCTAssert ( ( error as? ConnectionPoolError ) . isShutdown)
163+ XCTAssert ( ( error as? GRPCConnectionPoolError ) . isShutdown)
164164 }
165165 }
166166
@@ -181,14 +181,14 @@ final class ConnectionPoolTests: GRPCTestCase {
181181 }
182182
183183 XCTAssertThrowsError ( try tooManyWaiters. wait ( ) ) { error in
184- XCTAssert ( ( error as? ConnectionPoolError ) . isTooManyWaiters)
184+ XCTAssert ( ( error as? GRPCConnectionPoolError ) . isTooManyWaiters)
185185 }
186186
187187 XCTAssertNoThrow ( try pool. shutdown ( ) . wait ( ) )
188188 // All 'waiting' futures will be failed by the shutdown promise.
189189 for waiter in waiting {
190190 XCTAssertThrowsError ( try waiter. wait ( ) ) { error in
191- XCTAssert ( ( error as? ConnectionPoolError ) . isShutdown)
191+ XCTAssert ( ( error as? GRPCConnectionPoolError ) . isShutdown)
192192 }
193193 }
194194 }
@@ -205,7 +205,7 @@ final class ConnectionPoolTests: GRPCTestCase {
205205
206206 self . eventLoop. advanceTime ( to: . uptimeNanoseconds( 10 ) )
207207 XCTAssertThrowsError ( try waiter. wait ( ) ) { error in
208- XCTAssert ( ( error as? ConnectionPoolError ) . isDeadlineExceeded)
208+ XCTAssert ( ( error as? GRPCConnectionPoolError ) . isDeadlineExceeded)
209209 }
210210
211211 XCTAssertEqual ( pool. sync. waiters, 0 )
@@ -225,7 +225,7 @@ final class ConnectionPoolTests: GRPCTestCase {
225225
226226 self . eventLoop. run ( )
227227 XCTAssertThrowsError ( try waiter. wait ( ) ) { error in
228- XCTAssert ( ( error as? ConnectionPoolError ) . isDeadlineExceeded)
228+ XCTAssert ( ( error as? GRPCConnectionPoolError ) . isDeadlineExceeded)
229229 }
230230
231231 XCTAssertEqual ( pool. sync. waiters, 0 )
@@ -358,7 +358,7 @@ final class ConnectionPoolTests: GRPCTestCase {
358358 XCTAssertNoThrow ( try shutdown. wait ( ) )
359359 for waiter in others {
360360 XCTAssertThrowsError ( try waiter. wait ( ) ) { error in
361- XCTAssert ( ( error as? ConnectionPoolError ) . isShutdown)
361+ XCTAssert ( ( error as? GRPCConnectionPoolError ) . isShutdown)
362362 }
363363 }
364364 }
@@ -503,7 +503,7 @@ final class ConnectionPoolTests: GRPCTestCase {
503503 // We need to advance the time to fire the timeout to fail the waiter.
504504 self . eventLoop. advanceTime ( to: . uptimeNanoseconds( 10 ) )
505505 XCTAssertThrowsError ( try waiter1. wait ( ) ) { error in
506- XCTAssert ( ( error as? ConnectionPoolError ) . isDeadlineExceeded)
506+ XCTAssert ( ( error as? GRPCConnectionPoolError ) . isDeadlineExceeded)
507507 }
508508
509509 self . eventLoop. run ( )
@@ -758,8 +758,10 @@ final class ConnectionPoolTests: GRPCTestCase {
758758 self . eventLoop. advanceTime ( to: . uptimeNanoseconds( 10 ) )
759759
760760 XCTAssertThrowsError ( try w1. wait ( ) ) { error in
761- switch error as? ConnectionPoolError {
762- case . some( . deadlineExceeded( . none) ) :
761+ switch error as? GRPCConnectionPoolError {
762+ case . some( let error) :
763+ XCTAssertEqual ( error. code, . deadlineExceeded)
764+ XCTAssertNil ( error. underlyingError)
763765 // Deadline exceeded but no underlying error, as expected.
764766 ( )
765767 default :
@@ -774,10 +776,11 @@ final class ConnectionPoolTests: GRPCTestCase {
774776 self . eventLoop. advanceTime ( to: . uptimeNanoseconds( 20 ) )
775777
776778 XCTAssertThrowsError ( try w2. wait ( ) ) { error in
777- switch error as? ConnectionPoolError {
778- case let . some( . deadlineExceeded( . some( wrappedError) ) ) :
779+ switch error as? GRPCConnectionPoolError {
780+ case let . some( error) :
781+ XCTAssertEqual ( error. code, . deadlineExceeded)
779782 // Deadline exceeded and we have the underlying error.
780- XCTAssert ( wrappedError is DummyError )
783+ XCTAssert ( error . underlyingError is DummyError )
781784 default :
782785 XCTFail ( " Expected ConnectionPoolError.deadlineExceeded(.some) but got \( error) " )
783786 }
@@ -837,9 +840,10 @@ final class ConnectionPoolTests: GRPCTestCase {
837840 $0. eventLoop. makeSucceededVoidFuture ( )
838841 }
839842 XCTAssertThrowsError ( try tooManyWaiters. wait ( ) ) { error in
840- switch error as? ConnectionPoolError {
841- case . some( . tooManyWaiters( . none) ) :
842- ( )
843+ switch error as? GRPCConnectionPoolError {
844+ case . some( let error) :
845+ XCTAssertEqual ( error. code, . tooManyWaiters)
846+ XCTAssertNil ( error. underlyingError)
843847 default :
844848 XCTFail ( " Expected ConnectionPoolError.tooManyWaiters(.none) but got \( error) " )
845849 }
@@ -849,9 +853,10 @@ final class ConnectionPoolTests: GRPCTestCase {
849853 self . eventLoop. advanceTime ( by: . seconds( 1 ) )
850854 for waiter in waiters {
851855 XCTAssertThrowsError ( try waiter. wait ( ) ) { error in
852- switch error as? ConnectionPoolError {
853- case . some( . deadlineExceeded( . none) ) :
854- ( )
856+ switch error as? GRPCConnectionPoolError {
857+ case . some( let error) :
858+ XCTAssertEqual ( error. code, . deadlineExceeded)
859+ XCTAssertNil ( error. underlyingError)
855860 default :
856861 XCTFail ( " Expected ConnectionPoolError.deadlineExceeded(.none) but got \( error) " )
857862 }
@@ -869,7 +874,7 @@ final class ConnectionPoolTests: GRPCTestCase {
869874 XCTAssertNil ( waiter. _scheduledTimeout)
870875
871876 waiter. scheduleTimeout ( on: self . eventLoop) {
872- waiter. fail ( ConnectionPoolError . deadlineExceeded ( connectionError: nil ) )
877+ waiter. fail ( GRPCConnectionPoolError . deadlineExceeded ( connectionError: nil ) )
873878 }
874879
875880 XCTAssertNotNil ( waiter. _scheduledTimeout)
@@ -1045,6 +1050,25 @@ final class ConnectionPoolTests: GRPCTestCase {
10451050 }
10461051 }
10471052 }
1053+
1054+ func testConnectionPoolErrorDescription( ) {
1055+ var error = GRPCConnectionPoolError ( code: . deadlineExceeded)
1056+ XCTAssertEqual ( String ( describing: error) , " deadlineExceeded " )
1057+ error. code = . shutdown
1058+ XCTAssertEqual ( String ( describing: error) , " shutdown " )
1059+ error. code = . tooManyWaiters
1060+ XCTAssertEqual ( String ( describing: error) , " tooManyWaiters " )
1061+
1062+ struct DummyError : Error { }
1063+ error. underlyingError = DummyError ( )
1064+ XCTAssertEqual ( String ( describing: error) , " tooManyWaiters (DummyError()) " )
1065+ }
1066+
1067+ func testConnectionPoolErrorCodeEquality( ) {
1068+ let error = GRPCConnectionPoolError ( code: . deadlineExceeded)
1069+ XCTAssertEqual ( error. code, . deadlineExceeded)
1070+ XCTAssertNotEqual ( error. code, . shutdown)
1071+ }
10481072}
10491073
10501074extension ConnectionPool {
@@ -1216,31 +1240,16 @@ internal struct HookedStreamLender: StreamLender {
12161240 }
12171241}
12181242
1219- extension Optional where Wrapped == ConnectionPoolError {
1243+ extension Optional where Wrapped == GRPCConnectionPoolError {
12201244 internal var isTooManyWaiters : Bool {
1221- switch self {
1222- case . some( . tooManyWaiters) :
1223- return true
1224- case . some( . deadlineExceeded) , . some( . shutdown) , . none:
1225- return false
1226- }
1245+ self ? . code == . tooManyWaiters
12271246 }
12281247
12291248 internal var isDeadlineExceeded : Bool {
1230- switch self {
1231- case . some( . deadlineExceeded) :
1232- return true
1233- case . some( . tooManyWaiters) , . some( . shutdown) , . none:
1234- return false
1235- }
1249+ self ? . code == . deadlineExceeded
12361250 }
12371251
12381252 internal var isShutdown : Bool {
1239- switch self {
1240- case . some( . shutdown) :
1241- return true
1242- case . some( . tooManyWaiters) , . some( . deadlineExceeded) , . none:
1243- return false
1244- }
1253+ self ? . code == . shutdown
12451254 }
12461255}
0 commit comments