@@ -32,11 +32,17 @@ class SocketSpec: QuickSpec {
32
32
expect ( socket. timeout) . to ( equal ( Defaults . timeoutInterval) )
33
33
expect ( socket. heartbeatInterval) . to ( equal ( Defaults . heartbeatInterval) )
34
34
expect ( socket. logger) . to ( beNil ( ) )
35
- expect ( socket. reconnectAfter ( 1 ) ) . to ( equal ( 1 ) )
36
- expect ( socket. reconnectAfter ( 2 ) ) . to ( equal ( 2 ) )
37
- expect ( socket. reconnectAfter ( 3 ) ) . to ( equal ( 5 ) )
38
- expect ( socket. reconnectAfter ( 4 ) ) . to ( equal ( 10 ) )
39
- expect ( socket. reconnectAfter ( 5 ) ) . to ( equal ( 10 ) )
35
+ expect ( socket. reconnectAfter ( 1 ) ) . to ( equal ( 0.010 ) ) // 10ms
36
+ expect ( socket. reconnectAfter ( 2 ) ) . to ( equal ( 0.050 ) ) // 50ms
37
+ expect ( socket. reconnectAfter ( 3 ) ) . to ( equal ( 0.100 ) ) // 100ms
38
+ expect ( socket. reconnectAfter ( 4 ) ) . to ( equal ( 0.150 ) ) // 150ms
39
+ expect ( socket. reconnectAfter ( 5 ) ) . to ( equal ( 0.200 ) ) // 200ms
40
+ expect ( socket. reconnectAfter ( 6 ) ) . to ( equal ( 0.250 ) ) // 250ms
41
+ expect ( socket. reconnectAfter ( 7 ) ) . to ( equal ( 0.500 ) ) // 500ms
42
+ expect ( socket. reconnectAfter ( 8 ) ) . to ( equal ( 1.000 ) ) // 1_000ms (1s)
43
+ expect ( socket. reconnectAfter ( 9 ) ) . to ( equal ( 2.000 ) ) // 2_000ms (2s)
44
+ expect ( socket. reconnectAfter ( 10 ) ) . to ( equal ( 5.00 ) ) // 5_000ms (5s)
45
+ expect ( socket. reconnectAfter ( 11 ) ) . to ( equal ( 5.00 ) ) // 5_000ms (5s)
40
46
} )
41
47
42
48
it ( " overrides some defaults " , closure: {
@@ -110,6 +116,7 @@ class SocketSpec: QuickSpec {
110
116
} )
111
117
}
112
118
119
+
113
120
describe ( " websocketProtocol " ) {
114
121
it ( " returns wss when protocol is https " , closure: {
115
122
let socket = Socket ( " https://example.com/ " )
@@ -268,6 +275,13 @@ class SocketSpec: QuickSpec {
268
275
. to ( equal ( CloseCode . normal. rawValue) )
269
276
} )
270
277
278
+ it ( " flags the socket as closed cleanly " , closure: {
279
+ expect ( socket. closeWasClean) . to ( beFalse ( ) )
280
+
281
+ socket. disconnect ( )
282
+ expect ( socket. closeWasClean) . to ( beTrue ( ) )
283
+ } )
284
+
271
285
it ( " calls callback " , closure: {
272
286
var callCount = 0
273
287
socket. connect ( )
@@ -599,6 +613,13 @@ class SocketSpec: QuickSpec {
599
613
expect ( socket. pendingHeartbeatRef) . to ( beNil ( ) )
600
614
} )
601
615
616
+ it ( " does not schedule heartbeat if skipHeartbeat == true " , closure: {
617
+ socket. skipHeartbeat = true
618
+ socket. resetHeartbeat ( )
619
+
620
+ expect ( socket. heartbeatTimer) . to ( beNil ( ) )
621
+ } )
622
+
602
623
it ( " creates a timer and sends a heartbeat " , closure: {
603
624
mockWebSocket. isConnected = true
604
625
socket. connect ( )
@@ -647,13 +668,19 @@ class SocketSpec: QuickSpec {
647
668
mockWebSocket = WebSocketClientMock ( )
648
669
mockTimeoutTimer = TimeoutTimerMock ( )
649
670
socket = Socket ( endPoint: " /socket " , transport: mockWebSocketTransport)
650
- socket. reconnectAfter = { _ in return 10 }
671
+ // socket.reconnectAfter = { _ in return 10 }
651
672
socket. reconnectTimer = mockTimeoutTimer
652
- socket. skipHeartbeat = true
673
+ // socket.skipHeartbeat = true
653
674
}
654
675
655
- it ( " does not schedule reconnectTimer timeout if normal close" , closure: {
676
+ it ( " schedules reconnectTimer timeout if normal close" , closure: {
656
677
socket. onConnectionClosed ( code: Int ( CloseCode . normal. rawValue) )
678
+ expect ( mockTimeoutTimer. scheduleTimeoutCalled) . to ( beTrue ( ) )
679
+ } )
680
+
681
+
682
+ it ( " does not schedule reconnectTimer timeout if normal close after explicit disconnect " , closure: {
683
+ socket. disconnect ( )
657
684
expect ( mockTimeoutTimer. scheduleTimeoutCalled) . to ( beFalse ( ) )
658
685
} )
659
686
@@ -662,6 +689,58 @@ class SocketSpec: QuickSpec {
662
689
expect ( mockTimeoutTimer. scheduleTimeoutCalled) . to ( beTrue ( ) )
663
690
} )
664
691
692
+ it ( " schedules reconnectTimer timeout if connection cannot be made after a previous clean disconnect " , closure: {
693
+ socket. disconnect ( )
694
+ socket. connect ( )
695
+
696
+ socket. onConnectionClosed ( code: 1001 )
697
+ expect ( mockTimeoutTimer. scheduleTimeoutCalled) . to ( beTrue ( ) )
698
+ } )
699
+
700
+ it ( " triggers channel error if joining " , closure: {
701
+ let channel = socket. channel ( " topic " )
702
+ var errorCalled = false
703
+ channel. on ( ChannelEvent . error, callback: { _ in
704
+ errorCalled = true
705
+ } )
706
+
707
+ channel. join ( )
708
+ expect ( channel. state) . to ( equal ( . joining) )
709
+
710
+ socket. onConnectionClosed ( code: 1001 )
711
+ expect ( errorCalled) . to ( beTrue ( ) )
712
+ } )
713
+
714
+ it ( " triggers channel error if joined " , closure: {
715
+ let channel = socket. channel ( " topic " )
716
+ var errorCalled = false
717
+ channel. on ( ChannelEvent . error, callback: { _ in
718
+ errorCalled = true
719
+ } )
720
+
721
+ channel. join ( ) . trigger ( " ok " , payload: [ : ] )
722
+ expect ( channel. state) . to ( equal ( . joined) )
723
+
724
+ socket. onConnectionClosed ( code: 1001 )
725
+ expect ( errorCalled) . to ( beTrue ( ) )
726
+ } )
727
+
728
+ it ( " does not trigger channel error after leave " , closure: {
729
+ let channel = socket. channel ( " topic " )
730
+ var errorCalled = false
731
+ channel. on ( ChannelEvent . error, callback: { _ in
732
+ errorCalled = true
733
+ } )
734
+
735
+ channel. join ( ) . trigger ( " ok " , payload: [ : ] )
736
+ channel. leave ( )
737
+ expect ( channel. state) . to ( equal ( . closed) )
738
+
739
+ socket. onConnectionClosed ( code: 1001 )
740
+ expect ( errorCalled) . to ( beFalse ( ) )
741
+ } )
742
+
743
+
665
744
it ( " triggers onClose callbacks " , closure: {
666
745
var oneCalled = 0
667
746
socket. onClose { oneCalled += 1 }
@@ -675,24 +754,6 @@ class SocketSpec: QuickSpec {
675
754
expect ( twoCalled) . to ( equal ( 1 ) )
676
755
expect ( threeCalled) . to ( equal ( 0 ) )
677
756
} )
678
-
679
- it ( " triggers channel error " , closure: {
680
- let channel = socket. channel ( " topic " )
681
-
682
- var errorCalled = false
683
- var errorEvent : String ?
684
- var closeCalled = false
685
- channel. on ( ChannelEvent . error, callback: { ( msg) in
686
- errorEvent = msg. event
687
- errorCalled = true
688
- } )
689
- channel. on ( ChannelEvent . close, callback: { ( _) in closeCalled = true } )
690
-
691
- socket. onConnectionClosed ( code: 1000 )
692
- expect ( errorCalled) . to ( beTrue ( ) )
693
- expect ( errorEvent) . to ( equal ( ChannelEvent . error) )
694
- expect ( closeCalled) . to ( beFalse ( ) )
695
- } )
696
757
}
697
758
698
759
describe ( " onConnectionError " ) {
@@ -724,22 +785,48 @@ class SocketSpec: QuickSpec {
724
785
expect ( lastError) . toNot ( beNil ( ) )
725
786
} )
726
787
727
- it ( " triggers channel error " , closure: {
788
+
789
+ it ( " triggers channel error if joining " , closure: {
728
790
let channel = socket. channel ( " topic " )
791
+ var errorCalled = false
792
+ channel. on ( ChannelEvent . error, callback: { _ in
793
+ errorCalled = true
794
+ } )
795
+
796
+ channel. join ( )
797
+ expect ( channel. state) . to ( equal ( . joining) )
729
798
799
+ socket. onConnectionError ( TestError . stub)
800
+ expect ( errorCalled) . to ( beTrue ( ) )
801
+ } )
802
+
803
+ it ( " triggers channel error if joined " , closure: {
804
+ let channel = socket. channel ( " topic " )
730
805
var errorCalled = false
731
- var errorEvent : String ?
732
- var closeCalled = false
733
- channel. on ( ChannelEvent . error, callback: { ( msg) in
734
- errorEvent = msg. event
806
+ channel. on ( ChannelEvent . error, callback: { _ in
735
807
errorCalled = true
736
808
} )
737
- channel. on ( ChannelEvent . close, callback: { ( _) in closeCalled = true } )
809
+
810
+ channel. join ( ) . trigger ( " ok " , payload: [ : ] )
811
+ expect ( channel. state) . to ( equal ( . joined) )
738
812
739
813
socket. onConnectionError ( TestError . stub)
740
814
expect ( errorCalled) . to ( beTrue ( ) )
741
- expect ( errorEvent) . to ( equal ( ChannelEvent . error) )
742
- expect ( closeCalled) . to ( beFalse ( ) )
815
+ } )
816
+
817
+ it ( " does not trigger channel error after leave " , closure: {
818
+ let channel = socket. channel ( " topic " )
819
+ var errorCalled = false
820
+ channel. on ( ChannelEvent . error, callback: { _ in
821
+ errorCalled = true
822
+ } )
823
+
824
+ channel. join ( ) . trigger ( " ok " , payload: [ : ] )
825
+ channel. leave ( )
826
+ expect ( channel. state) . to ( equal ( . closed) )
827
+
828
+ socket. onConnectionError ( TestError . stub)
829
+ expect ( errorCalled) . to ( beFalse ( ) )
743
830
} )
744
831
}
745
832
0 commit comments