]> Sergey Matveev's repositories - btrtrc.git/blob - webtorrent/transport_test.go
Also close created data channels when cleaning up webrtc conns
[btrtrc.git] / webtorrent / transport_test.go
1 package webtorrent
2
3 import (
4         "github.com/anacrolix/log"
5         qt "github.com/frankban/quicktest"
6         "github.com/pion/webrtc/v3"
7         "testing"
8 )
9
10 func TestClosingPeerConnectionDoesNotCloseUnopenedDataChannel(t *testing.T) {
11         c := qt.New(t)
12         var tc TrackerClient
13         pc, dc, _, err := tc.newOffer(log.Default, "", [20]byte{})
14         c.Assert(err, qt.IsNil)
15         defer pc.Close()
16         defer dc.Close()
17         peerConnClosed := make(chan struct{})
18         pc.OnConnectionStateChange(func(state webrtc.PeerConnectionState) {
19                 if state == webrtc.PeerConnectionStateClosed {
20                         close(peerConnClosed)
21                 }
22         })
23         dc.OnClose(func() {
24                 // This should not be called because the DataChannel is never opened.
25                 t.Fatal("DataChannel.OnClose handler called")
26         })
27         t.Logf("data channel ready state before close: %v", dc.ReadyState())
28         dc.OnError(func(err error) {
29                 t.Logf("data channel error: %v", err)
30         })
31         pc.Close()
32         c.Check(dc.ReadyState(), qt.Equals, webrtc.DataChannelStateClosed)
33         <-peerConnClosed
34 }