Files
webrtc/configuration_test.go
mchlrhw 7243561f2f Implement permissive STUN URL parsing
The parser included in the ice package strictly adheres to RFC 7064,
however, this can be problematic when attempting to use ICE server URLs
that were automatically generated by a third party.

Twilio, for example, has been seen to send the following in its list of
ICE servers:

    stun:global.stun.twilio.com:3478?transport=udp

which would require user intervention to sanitise before passing to
Pion.
This patch side-steps this aspect of ice.ParseURL by pre-stripping any
queries that may be present so that we can allow URLs of this form.
2019-07-17 06:42:46 +01:00

56 lines
1.2 KiB
Go

package webrtc
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestConfiguration_getICEServers(t *testing.T) {
t.Run("Success", func(t *testing.T) {
expectedServerStr := "stun:stun.l.google.com:19302"
cfg := Configuration{
ICEServers: []ICEServer{
{
URLs: []string{expectedServerStr},
},
},
}
parsedURLs, err := cfg.getICEServers()
assert.Nil(t, err)
assert.Equal(t, expectedServerStr, (*parsedURLs)[0].String())
})
t.Run("Failure", func(t *testing.T) {
expectedServerStr := "stun.l.google.com:19302"
cfg := Configuration{
ICEServers: []ICEServer{
{
URLs: []string{expectedServerStr},
},
},
}
_, err := cfg.getICEServers()
assert.NotNil(t, err)
})
t.Run("Success", func(t *testing.T) {
// ignore the fact that stun URLs shouldn't have a query
serverStr := "stun:global.stun.twilio.com:3478?transport=udp"
expectedServerStr := "stun:global.stun.twilio.com:3478"
cfg := Configuration{
ICEServers: []ICEServer{
{
URLs: []string{serverStr},
},
},
}
parsedURLs, err := cfg.getICEServers()
assert.Nil(t, err)
assert.Equal(t, expectedServerStr, (*parsedURLs)[0].String())
})
}