@@ -404,4 +404,46 @@ final class RSocketReactiveSwiftTests: XCTestCase {
404
404
// checking if connection is inactive
405
405
XCTAssertTrue ( client. isDisposed)
406
406
}
407
+ func testConnectionDisposeListener( ) {
408
+ // Creating expectation
409
+ let didReceiveConnectionclosedEvent = expectation ( description: " did receive Connection closed event " )
410
+ let serverResponder : RSocketReactiveSwift . ResponderRSocket ? = TestRSocket ( )
411
+ let clientResponder : RSocketReactiveSwift . ResponderRSocket ? = TestRSocket ( )
412
+ let ( serverMultiplexer, clientMultiplexer) = TestDemultiplexer . pipe (
413
+ serverResponder: serverResponder. map { ResponderAdapter ( responder: $0, encoding: . default) } ,
414
+ clientResponder: clientResponder. map { ResponderAdapter ( responder: $0, encoding: . default) }
415
+ )
416
+ // Channel creation
417
+ let serverChannel = EmbeddedChannel ( )
418
+ // Making channel Active
419
+ XCTAssertNoThrow ( try serverChannel. connect ( to: SocketAddress . init ( ipAddress: " 127.0.0.1 " , port: 0 ) ) . wait ( ) )
420
+ let clientChannel = EmbeddedChannel ( )
421
+ XCTAssertNoThrow ( try clientChannel. connect ( to: SocketAddress . init ( ipAddress: " 127.0.0.1 " , port: 0 ) ) . wait ( ) )
422
+ // Creating Reactive swift client
423
+ let server = ReactiveSwiftClient ( CoreClient ( requester: serverMultiplexer. requester, channel: serverChannel) )
424
+ let client = ReactiveSwiftClient ( CoreClient ( requester: clientMultiplexer. requester, channel: clientChannel) )
425
+ defer {
426
+ // closing channel connection
427
+ XCTAssertNoThrow ( try serverChannel. finish ( ) )
428
+ }
429
+ XCTAssertNotNil ( server)
430
+ XCTAssertNotNil ( client)
431
+ // client connection closed event signal producer
432
+ client. shutdownProducer. startWithSignal ( { signal, interruptHandle in
433
+ signal. flatMapError ( { error -> Signal < Void , Error > in
434
+ XCTFail ( " \( error) " )
435
+ return . empty
436
+ } ) . materialize ( ) . collect ( ) . observeValues { values in
437
+ didReceiveConnectionclosedEvent. fulfill ( )
438
+ }
439
+ } )
440
+ // checking if connection is active
441
+ XCTAssertFalse ( client. isDisposed)
442
+ // closing connection using dispose method
443
+ XCTAssertNoThrow ( try clientChannel. finish ( ) )
444
+ // checking if connection is inactive
445
+ XCTAssertTrue ( client. isDisposed)
446
+ self . wait ( for: [ didReceiveConnectionclosedEvent] , timeout: 0.1 )
447
+ }
407
448
}
449
+
0 commit comments