torrent/webtorrent/transport_test.go

36 lines
953 B
Go

package webtorrent
import (
"testing"
"github.com/anacrolix/log"
qt "github.com/frankban/quicktest"
"github.com/pion/webrtc/v3"
)
func TestClosingPeerConnectionDoesNotCloseUnopenedDataChannel(t *testing.T) {
c := qt.New(t)
var tc TrackerClient
pc, dc, _, err := tc.newOffer(log.Default, "", [20]byte{})
c.Assert(err, qt.IsNil)
defer pc.Close()
defer dc.Close()
peerConnClosed := make(chan struct{})
pc.OnConnectionStateChange(func(state webrtc.PeerConnectionState) {
if state == webrtc.PeerConnectionStateClosed {
close(peerConnClosed)
}
})
dc.OnClose(func() {
// This should not be called because the DataChannel is never opened.
t.Fatal("DataChannel.OnClose handler called")
})
t.Logf("data channel ready state before close: %v", dc.ReadyState())
dc.OnError(func(err error) {
t.Logf("data channel error: %v", err)
})
pc.Close()
c.Check(dc.ReadyState(), qt.Equals, webrtc.DataChannelStateClosed)
<-peerConnClosed
}