| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- // SPDX-FileCopyrightText: 2023 The Pion community <https://pion.ly>
- // SPDX-License-Identifier: MIT
- //go:build !js
- // +build !js
- package webrtc
- import (
- "io"
- "testing"
- "time"
- "github.com/pion/transport/v2/test"
- "github.com/stretchr/testify/assert"
- )
- func TestDataChannel_ORTC_SCTPTransport(t *testing.T) {
- lim := test.TimeOut(time.Second * 20)
- defer lim.Stop()
- report := test.CheckRoutines(t)
- defer report()
- stackA, stackB, err := newORTCPair()
- assert.NoError(t, err)
- getSelectedCandidatePairErrChan := make(chan error)
- stackB.sctp.OnDataChannel(func(d *DataChannel) {
- _, getSelectedCandidatePairErr := d.Transport().Transport().ICETransport().GetSelectedCandidatePair()
- getSelectedCandidatePairErrChan <- getSelectedCandidatePairErr
- })
- assert.NoError(t, signalORTCPair(stackA, stackB))
- var id uint16 = 1
- _, err = stackA.api.NewDataChannel(stackA.sctp, &DataChannelParameters{
- Label: "Foo",
- ID: &id,
- })
- assert.NoError(t, err)
- assert.NoError(t, <-getSelectedCandidatePairErrChan)
- assert.NoError(t, stackA.close())
- assert.NoError(t, stackB.close())
- }
- func TestDataChannel_ORTCE2E(t *testing.T) {
- lim := test.TimeOut(time.Second * 20)
- defer lim.Stop()
- report := test.CheckRoutines(t)
- defer report()
- stackA, stackB, err := newORTCPair()
- assert.NoError(t, err)
- awaitSetup := make(chan struct{})
- awaitString := make(chan struct{})
- awaitBinary := make(chan struct{})
- stackB.sctp.OnDataChannel(func(d *DataChannel) {
- close(awaitSetup)
- d.OnMessage(func(msg DataChannelMessage) {
- if msg.IsString {
- close(awaitString)
- } else {
- close(awaitBinary)
- }
- })
- })
- assert.NoError(t, signalORTCPair(stackA, stackB))
- var id uint16 = 1
- dcParams := &DataChannelParameters{
- Label: "Foo",
- ID: &id,
- }
- channelA, err := stackA.api.NewDataChannel(stackA.sctp, dcParams)
- assert.NoError(t, err)
- <-awaitSetup
- assert.NoError(t, channelA.SendText("ABC"))
- assert.NoError(t, channelA.Send([]byte("ABC")))
- <-awaitString
- <-awaitBinary
- assert.NoError(t, stackA.close())
- assert.NoError(t, stackB.close())
- // attempt to send when channel is closed
- assert.ErrorIs(t, channelA.Send([]byte("ABC")), io.ErrClosedPipe)
- assert.ErrorIs(t, channelA.SendText("test"), io.ErrClosedPipe)
- assert.ErrorIs(t, channelA.ensureOpen(), io.ErrClosedPipe)
- }
|