@@ -745,3 +745,80 @@ func TestDetachRemovesDatachannelReference(t *testing.T) {
745
745
}
746
746
}
747
747
}
748
+
749
+ func TestDataChannelClose (t * testing.T ) {
750
+ // Test if onClose is fired for self and remote after Close is called
751
+ t .Run ("close open channels" , func (t * testing.T ) {
752
+ options := & DataChannelInit {}
753
+
754
+ offerPC , answerPC , dc , done := setUpDataChannelParametersTest (t , options )
755
+
756
+ answerPC .OnDataChannel (func (dataChannel * DataChannel ) {
757
+ // Make sure this is the data channel we were looking for. (Not the one
758
+ // created in signalPair).
759
+ if dataChannel .Label () != expectedLabel {
760
+ return
761
+ }
762
+
763
+ dataChannel .OnOpen (func () {
764
+ assert .NoError (t , dataChannel .Close ())
765
+ })
766
+
767
+ dataChannel .OnClose (func () {
768
+ done <- true
769
+ })
770
+ })
771
+
772
+ dc .OnClose (func () {
773
+ done <- true
774
+ })
775
+
776
+ assert .NoError (t , signalPair (offerPC , answerPC ))
777
+
778
+ // Offer and Answer OnClose
779
+ <- done
780
+ <- done
781
+
782
+ assert .NoError (t , offerPC .Close ())
783
+ assert .NoError (t , answerPC .Close ())
784
+ })
785
+
786
+ // Test if OnClose is fired for self and remote after Close is called on non-established channel
787
+ // https://github.com/pion/webrtc/issues/2659
788
+ t .Run ("Close connecting channels" , func (t * testing.T ) {
789
+ options := & DataChannelInit {}
790
+
791
+ offerPC , answerPC , dc , done := setUpDataChannelParametersTest (t , options )
792
+
793
+ answerPC .OnDataChannel (func (dataChannel * DataChannel ) {
794
+ // Make sure this is the data channel we were looking for. (Not the one
795
+ // created in signalPair).
796
+ if dataChannel .Label () != expectedLabel {
797
+ return
798
+ }
799
+
800
+ dataChannel .OnOpen (func () {
801
+ t .Fatal ("OnOpen must not be fired after we call Close" )
802
+ })
803
+
804
+ dataChannel .OnClose (func () {
805
+ done <- true
806
+ })
807
+
808
+ assert .NoError (t , dataChannel .Close ())
809
+ })
810
+
811
+ dc .OnClose (func () {
812
+ done <- true
813
+ })
814
+
815
+ assert .NoError (t , signalPair (offerPC , answerPC ))
816
+
817
+ // Offer and Answer OnClose
818
+ <- done
819
+ <- done
820
+
821
+ assert .NoError (t , offerPC .Close ())
822
+ assert .NoError (t , answerPC .Close ())
823
+ })
824
+ }
0 commit comments