1// +build !js
2
3package webrtc
4
5import (
6	"testing"
7
8	"github.com/pion/ice"
9	"github.com/pion/webrtc/v2/pkg/rtcerr"
10	"github.com/stretchr/testify/assert"
11)
12
13func TestICEServer_validate(t *testing.T) {
14	t.Run("Success", func(t *testing.T) {
15		testCases := []struct {
16			iceServer        ICEServer
17			expectedValidate bool
18		}{
19			{ICEServer{
20				URLs:           []string{"turn:192.158.29.39?transport=udp"},
21				Username:       "unittest",
22				Credential:     "placeholder",
23				CredentialType: ICECredentialTypePassword,
24			}, true},
25			{ICEServer{
26				URLs:     []string{"turn:192.158.29.39?transport=udp"},
27				Username: "unittest",
28				Credential: OAuthCredential{
29					MACKey:      "WmtzanB3ZW9peFhtdm42NzUzNG0=",
30					AccessToken: "AAwg3kPHWPfvk9bDFL936wYvkoctMADzQ5VhNDgeMR3+ZlZ35byg972fW8QjpEl7bx91YLBPFsIhsxloWcXPhA==",
31				},
32				CredentialType: ICECredentialTypeOauth,
33			}, true},
34		}
35
36		for i, testCase := range testCases {
37			_, err := testCase.iceServer.urls()
38			assert.Nil(t, err, "testCase: %d %v", i, testCase)
39		}
40	})
41	t.Run("Failure", func(t *testing.T) {
42		testCases := []struct {
43			iceServer   ICEServer
44			expectedErr error
45		}{
46			{ICEServer{
47				URLs: []string{"turn:192.158.29.39?transport=udp"},
48			}, &rtcerr.InvalidAccessError{Err: ErrNoTurnCredentials}},
49			{ICEServer{
50				URLs:           []string{"turn:192.158.29.39?transport=udp"},
51				Username:       "unittest",
52				Credential:     false,
53				CredentialType: ICECredentialTypePassword,
54			}, &rtcerr.InvalidAccessError{Err: ErrTurnCredentials}},
55			{ICEServer{
56				URLs:           []string{"turn:192.158.29.39?transport=udp"},
57				Username:       "unittest",
58				Credential:     false,
59				CredentialType: ICECredentialTypeOauth,
60			}, &rtcerr.InvalidAccessError{Err: ErrTurnCredentials}},
61			{ICEServer{
62				URLs:           []string{"turn:192.158.29.39?transport=udp"},
63				Username:       "unittest",
64				Credential:     false,
65				CredentialType: Unknown,
66			}, &rtcerr.InvalidAccessError{Err: ErrTurnCredentials}},
67			{ICEServer{
68				URLs:           []string{"stun:google.de?transport=udp"},
69				Username:       "unittest",
70				Credential:     false,
71				CredentialType: ICECredentialTypeOauth,
72			}, ice.ErrSTUNQuery},
73		}
74
75		for i, testCase := range testCases {
76			_, err := testCase.iceServer.urls()
77			assert.EqualError(t,
78				err,
79				testCase.expectedErr.Error(),
80				"testCase: %d %v", i, testCase,
81			)
82		}
83	})
84}
85