mirror of
https://github.com/pion/webrtc.git
synced 2025-09-27 11:32:19 +08:00
Add test for negotiated DataChannel.OnOpen
5dc7245
was missing a test for this
This commit is contained in:

committed by
Sean DuBois

parent
5dc7245bee
commit
c2e8c97f2d
@@ -111,6 +111,8 @@ func benchmarkDataChannelSend(b *testing.B, numChannels int) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestDataChannel_Open(t *testing.T) {
|
func TestDataChannel_Open(t *testing.T) {
|
||||||
|
const openOnceChannelCapacity = 2
|
||||||
|
|
||||||
t.Run("handler should be called once", func(t *testing.T) {
|
t.Run("handler should be called once", func(t *testing.T) {
|
||||||
report := test.CheckRoutines(t)
|
report := test.CheckRoutines(t)
|
||||||
defer report()
|
defer report()
|
||||||
@@ -121,7 +123,7 @@ func TestDataChannel_Open(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
done := make(chan bool)
|
done := make(chan bool)
|
||||||
openCalls := make(chan bool, 2)
|
openCalls := make(chan bool, openOnceChannelCapacity)
|
||||||
|
|
||||||
answerPC.OnDataChannel(func(d *DataChannel) {
|
answerPC.OnDataChannel(func(d *DataChannel) {
|
||||||
if d.Label() != expectedLabel {
|
if d.Label() != expectedLabel {
|
||||||
@@ -155,6 +157,63 @@ func TestDataChannel_Open(t *testing.T) {
|
|||||||
|
|
||||||
assert.Len(t, openCalls, 1)
|
assert.Len(t, openCalls, 1)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
t.Run("handler should be called once when already negotiated", func(t *testing.T) {
|
||||||
|
report := test.CheckRoutines(t)
|
||||||
|
defer report()
|
||||||
|
|
||||||
|
offerPC, answerPC, err := newPair()
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("Failed to create a PC pair for testing")
|
||||||
|
}
|
||||||
|
|
||||||
|
done := make(chan bool)
|
||||||
|
answerOpenCalls := make(chan bool, openOnceChannelCapacity)
|
||||||
|
offerOpenCalls := make(chan bool, openOnceChannelCapacity)
|
||||||
|
|
||||||
|
negotiated := true
|
||||||
|
ordered := true
|
||||||
|
dataChannelID := uint16(0)
|
||||||
|
|
||||||
|
answerDC, err := answerPC.CreateDataChannel(expectedLabel, &DataChannelInit{
|
||||||
|
ID: &dataChannelID,
|
||||||
|
Negotiated: &negotiated,
|
||||||
|
Ordered: &ordered,
|
||||||
|
})
|
||||||
|
assert.NoError(t, err)
|
||||||
|
offerDC, err := offerPC.CreateDataChannel(expectedLabel, &DataChannelInit{
|
||||||
|
ID: &dataChannelID,
|
||||||
|
Negotiated: &negotiated,
|
||||||
|
Ordered: &ordered,
|
||||||
|
})
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
answerDC.OnMessage(func(msg DataChannelMessage) {
|
||||||
|
go func() {
|
||||||
|
// Wait a little bit to ensure all messages are processed.
|
||||||
|
time.Sleep(100 * time.Millisecond)
|
||||||
|
done <- true
|
||||||
|
}()
|
||||||
|
})
|
||||||
|
answerDC.OnOpen(func() {
|
||||||
|
answerOpenCalls <- true
|
||||||
|
})
|
||||||
|
|
||||||
|
offerDC.OnOpen(func() {
|
||||||
|
offerOpenCalls <- true
|
||||||
|
e := offerDC.SendText("Ping")
|
||||||
|
if e != nil {
|
||||||
|
t.Fatalf("Failed to send string on data channel")
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
assert.NoError(t, signalPair(offerPC, answerPC))
|
||||||
|
|
||||||
|
closePair(t, offerPC, answerPC, done)
|
||||||
|
|
||||||
|
assert.Len(t, answerOpenCalls, 1)
|
||||||
|
assert.Len(t, offerOpenCalls, 1)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestDataChannel_Send(t *testing.T) {
|
func TestDataChannel_Send(t *testing.T) {
|
||||||
|
Reference in New Issue
Block a user