@@ -11,11 +11,7 @@ class RMQSuspendResumeDispatcherTest: XCTestCase {
11
11
}
12
12
13
13
func testSyncMethodsSentToSender( ) {
14
- let q = FakeSerialQueue ( )
15
- let sender = SenderSpy ( )
16
- let dispatcher = RMQSuspendResumeDispatcher ( sender: sender, commandQueue: q)
17
- let ch = RMQAllocatedChannel ( 123 , contentBodySize: 1 , dispatcher: dispatcher, commandQueue: q)
18
- dispatcher. activateWithChannel ( ch, delegate: nil )
14
+ let ( dispatcher, q, sender, _, _) = setupActivated ( )
19
15
20
16
dispatcher. sendSyncMethod ( MethodFixtures . basicGet ( ) )
21
17
@@ -26,36 +22,22 @@ class RMQSuspendResumeDispatcherTest: XCTestCase {
26
22
}
27
23
28
24
func testSyncMethodFailureSendsErrorToDelegate( ) {
29
- let q = FakeSerialQueue ( )
30
- let sender = SenderSpy ( )
31
- let delegate = ConnectionDelegateSpy ( )
32
- let dispatcher = RMQSuspendResumeDispatcher ( sender: sender, commandQueue: q)
33
- let ch = RMQAllocatedChannel ( 123 , contentBodySize: 1 , dispatcher: dispatcher, commandQueue: q)
34
- dispatcher. activateWithChannel ( ch, delegate: delegate)
25
+ let ( dispatcher, q, _, delegate, _) = setupActivated ( )
35
26
36
27
dispatcher. sendSyncMethod ( MethodFixtures . basicGet ( ) )
37
-
38
28
try ! q. step ( )
39
29
40
30
dispatcher. handleFrameset ( RMQFrameset ( channelNumber: 123 , method: MethodFixtures . basicQosOk ( ) ) )
41
-
42
31
try ! q. step ( )
43
32
44
33
XCTAssertEqual ( RMQError . ChannelIncorrectSyncMethod. rawValue, delegate. lastChannelError!. code)
45
34
}
46
35
47
36
func testBlockingSyncMethodsSentToSender( ) {
48
- let q = FakeSerialQueue ( )
49
- let sender = SenderSpy ( )
50
- let dispatcher = RMQSuspendResumeDispatcher ( sender: sender, commandQueue: q)
51
- let delegate = ConnectionDelegateSpy ( )
52
- let ch = RMQAllocatedChannel ( 123 , contentBodySize: 1 , dispatcher: dispatcher, commandQueue: q)
53
- dispatcher. activateWithChannel ( ch, delegate: delegate)
37
+ let ( dispatcher, q, sender, delegate, ch) = setupActivated ( )
54
38
55
39
dispatcher. sendSyncMethodBlocking ( MethodFixtures . basicGet ( ) )
56
-
57
40
XCTAssertEqual ( 2 , q. blockingItems. count)
58
-
59
41
try ! q. step ( )
60
42
61
43
let expectedFrameset = RMQFrameset ( channelNumber: 123 , method: MethodFixtures . basicGet ( ) )
@@ -68,12 +50,7 @@ class RMQSuspendResumeDispatcherTest: XCTestCase {
68
50
}
69
51
70
52
func testBlockingErrorsSentToDelegate( ) {
71
- let q = FakeSerialQueue ( )
72
- let sender = SenderSpy ( )
73
- let dispatcher = RMQSuspendResumeDispatcher ( sender: sender, commandQueue: q)
74
- let ch = RMQAllocatedChannel ( 123 , contentBodySize: 1 , dispatcher: dispatcher, commandQueue: q)
75
- let delegate = ConnectionDelegateSpy ( )
76
- dispatcher. activateWithChannel ( ch, delegate: delegate)
53
+ let ( dispatcher, q, _, delegate, _) = setupActivated ( )
77
54
78
55
dispatcher. sendSyncMethodBlocking ( MethodFixtures . basicGet ( ) )
79
56
@@ -86,12 +63,7 @@ class RMQSuspendResumeDispatcherTest: XCTestCase {
86
63
}
87
64
88
65
func testAsyncMethodSendsFrameset( ) {
89
- let q = FakeSerialQueue ( )
90
- let sender = SenderSpy ( )
91
- let delegate = ConnectionDelegateSpy ( )
92
- let dispatcher = RMQSuspendResumeDispatcher ( sender: sender, commandQueue: q)
93
- let ch = RMQAllocatedChannel ( 123 , contentBodySize: 1 , dispatcher: dispatcher, commandQueue: q)
94
- dispatcher. activateWithChannel ( ch, delegate: delegate)
66
+ let ( dispatcher, q, sender, _, _) = setupActivated ( )
95
67
96
68
dispatcher. sendAsyncMethod ( MethodFixtures . channelOpen ( ) )
97
69
@@ -102,12 +74,7 @@ class RMQSuspendResumeDispatcherTest: XCTestCase {
102
74
}
103
75
104
76
func testAsyncFramesetSendsFrameset( ) {
105
- let q = FakeSerialQueue ( )
106
- let sender = SenderSpy ( )
107
- let delegate = ConnectionDelegateSpy ( )
108
- let dispatcher = RMQSuspendResumeDispatcher ( sender: sender, commandQueue: q)
109
- let ch = RMQAllocatedChannel ( 123 , contentBodySize: 1 , dispatcher: dispatcher, commandQueue: q)
110
- dispatcher. activateWithChannel ( ch, delegate: delegate)
77
+ let ( dispatcher, q, sender, _, _) = setupActivated ( )
111
78
112
79
let frameset = RMQFrameset ( channelNumber: 123 , method: MethodFixtures . channelClose ( ) )
113
80
dispatcher. sendAsyncFrameset ( frameset)
@@ -117,9 +84,9 @@ class RMQSuspendResumeDispatcherTest: XCTestCase {
117
84
XCTAssertEqual ( frameset, sender. sentFramesets. last!)
118
85
}
119
86
120
- // MARK: After- close tests
87
+ // MARK: Client close tests
121
88
122
- func testFutureBlockingWaitOnProducesErrorAfterClose ( ) {
89
+ func testFutureBlockingWaitOnProducesErrorAfterClientClose ( ) {
123
90
let ( dispatcher, q, delegate) = setUpAfterCloseTest ( )
124
91
dispatcher. handleFrameset ( RMQFrameset ( channelNumber: 123 , method: MethodFixtures . channelCloseOk ( ) ) )
125
92
try ! q. step ( )
@@ -133,7 +100,7 @@ class RMQSuspendResumeDispatcherTest: XCTestCase {
133
100
" Didn't receive correct error \n Got: \( delegate. lastChannelError) " )
134
101
}
135
102
136
- func testFutureSyncMethodBlockingProducesErrorAfterClose ( ) {
103
+ func testFutureSyncMethodBlockingProducesErrorAfterClientClose ( ) {
137
104
let ( dispatcher, q, delegate) = setUpAfterCloseTest ( )
138
105
dispatcher. handleFrameset ( RMQFrameset ( channelNumber: 123 , method: MethodFixtures . channelCloseOk ( ) ) )
139
106
try ! q. step ( )
@@ -147,7 +114,7 @@ class RMQSuspendResumeDispatcherTest: XCTestCase {
147
114
" Didn't receive correct error \n Got: \( delegate. lastChannelError) " )
148
115
}
149
116
150
- func testFutureSyncMethodProducesErrorAfterClose ( ) {
117
+ func testFutureSyncMethodProducesErrorAfterClientClose ( ) {
151
118
let ( dispatcher, q, delegate) = setUpAfterCloseTest ( )
152
119
dispatcher. handleFrameset ( RMQFrameset ( channelNumber: 123 , method: MethodFixtures . channelCloseOk ( ) ) )
153
120
try ! q. step ( )
@@ -161,7 +128,7 @@ class RMQSuspendResumeDispatcherTest: XCTestCase {
161
128
" Didn't receive correct error \n Got: \( delegate. lastChannelError) " )
162
129
}
163
130
164
- func testSendAsyncFramesetProducesErrorAfterClose ( ) {
131
+ func testSendAsyncFramesetProducesErrorAfterClientClose ( ) {
165
132
let ( dispatcher, q, delegate) = setUpAfterCloseTest ( )
166
133
dispatcher. handleFrameset ( RMQFrameset ( channelNumber: 123 , method: MethodFixtures . channelCloseOk ( ) ) )
167
134
try ! q. step ( )
@@ -201,12 +168,7 @@ class RMQSuspendResumeDispatcherTest: XCTestCase {
201
168
}
202
169
203
170
func testCloseDoesNotCauseErrorIfNotTheFirstOperation( ) {
204
- let q = FakeSerialQueue ( )
205
- let sender = SenderSpy ( )
206
- let delegate = ConnectionDelegateSpy ( )
207
- let dispatcher = RMQSuspendResumeDispatcher ( sender: sender, commandQueue: q)
208
- let ch = RMQAllocatedChannel ( 123 , contentBodySize: 1 , dispatcher: dispatcher, commandQueue: q)
209
- dispatcher. activateWithChannel ( ch, delegate: delegate)
171
+ let ( dispatcher, q, _, delegate, _) = setupActivated ( )
210
172
211
173
dispatcher. sendSyncMethod ( MethodFixtures . channelOpen ( ) )
212
174
dispatcher. sendSyncMethod ( MethodFixtures . channelClose ( ) )
@@ -222,19 +184,61 @@ class RMQSuspendResumeDispatcherTest: XCTestCase {
222
184
XCTAssertNil ( delegate. lastChannelError)
223
185
}
224
186
187
+ // MARK: Server close tests
188
+
189
+ func testServerCloseCausesCloseOkToBeSentInResponse( ) {
190
+ let ( dispatcher, _, sender, _, _) = setupActivated ( )
191
+ dispatcher. handleFrameset ( RMQFrameset ( channelNumber: 123 , method: MethodFixtures . channelClose ( ) ) )
192
+ XCTAssertEqual ( RMQFrameset ( channelNumber: 123 , method: MethodFixtures . channelCloseOk ( ) ) ,
193
+ sender. sentFramesets. last)
194
+ }
195
+
196
+ func testServerCloseStopsFutureConsumersFromTriggering( ) {
197
+ let ( dispatcher, q, _, _, _) = setupActivated ( )
198
+ var called = false
199
+ dispatcher. sendSyncMethod ( MethodFixtures . basicConsume ( " " , consumerTag: " " , options: [ ] ) ) { result in
200
+ called = true
201
+ }
202
+ dispatcher. handleFrameset ( RMQFrameset ( channelNumber: 123 , method: MethodFixtures . channelClose ( ) ) )
203
+
204
+ try ! q. step ( ) // send basic.consume
205
+ dispatcher. handleFrameset ( RMQFrameset ( channelNumber: 123 , method: MethodFixtures . basicConsumeOk ( " " ) ) )
206
+ try ! q. step ( ) // run basic.consume-ok response block
207
+ XCTAssertFalse ( called)
208
+ }
209
+
210
+ func testServerCloseTriggersErrorsForFutureOperations( ) {
211
+ let ( dispatcher, q, _, delegate, _) = setupActivated ( )
212
+ dispatcher. handleFrameset ( RMQFrameset ( channelNumber: 123 , method: MethodFixtures . channelClose ( ) ) )
213
+ dispatcher. sendSyncMethod ( MethodFixtures . basicGet ( ) )
214
+ XCTAssertNil ( delegate. lastChannelError)
215
+ try ! q. step ( )
216
+ XCTAssertEqual ( RMQError . ChannelClosed. rawValue, delegate. lastChannelError? . code)
217
+ }
218
+
219
+ func testServerCloseResumesCommandQueueToAllowErrorsToPropagate( ) {
220
+ let ( dispatcher, q, _, _, _) = setupActivated ( )
221
+ q. suspend ( )
222
+ dispatcher. handleFrameset ( RMQFrameset ( channelNumber: 123 , method: MethodFixtures . channelClose ( ) ) )
223
+ XCTAssertFalse ( q. suspended)
224
+ }
225
+
225
226
// MARK: Helpers
226
227
227
- func setUpAfterCloseTest ( ) -> ( dispatcher: RMQSuspendResumeDispatcher , q: FakeSerialQueue , delegate: ConnectionDelegateSpy ) {
228
+ func setupActivated ( ) -> ( dispatcher: RMQSuspendResumeDispatcher , q: FakeSerialQueue , sender : SenderSpy , delegate: ConnectionDelegateSpy , ch : RMQAllocatedChannel ) {
228
229
let q = FakeSerialQueue ( )
229
230
let sender = SenderSpy ( )
230
231
let delegate = ConnectionDelegateSpy ( )
231
232
let dispatcher = RMQSuspendResumeDispatcher ( sender: sender, commandQueue: q)
232
233
let ch = RMQAllocatedChannel ( 123 , contentBodySize: 1 , dispatcher: dispatcher, commandQueue: q)
233
234
dispatcher. activateWithChannel ( ch, delegate: delegate)
235
+ return ( dispatcher, q, sender, delegate, ch)
236
+ }
234
237
238
+ func setUpAfterCloseTest( ) -> ( dispatcher: RMQSuspendResumeDispatcher , q: FakeSerialQueue , delegate: ConnectionDelegateSpy ) {
239
+ let ( dispatcher, q, _, delegate, _) = setupActivated ( )
235
240
dispatcher. sendSyncMethod ( MethodFixtures . channelClose ( ) )
236
241
try ! q. step ( )
237
-
238
242
return ( dispatcher, q, delegate)
239
243
}
240
244
0 commit comments