github.com/pion/webrtc/v4@v4.0.1/peerconnection_js_test.go (about) 1 // SPDX-FileCopyrightText: 2023 The Pion community <https://pion.ly> 2 // SPDX-License-Identifier: MIT 3 4 package webrtc 5 6 import ( 7 "encoding/json" 8 "syscall/js" 9 "testing" 10 11 "github.com/stretchr/testify/assert" 12 ) 13 14 func TestValueToICECandidate(t *testing.T) { 15 testCases := []struct { 16 jsonCandidate string 17 expect ICECandidate 18 }{ 19 { 20 // Firefox-style ICECandidateInit: 21 `{"candidate":"1966762133 1 udp 2122260222 192.168.20.128 47298 typ srflx raddr 203.0.113.1 rport 5000"}`, 22 ICECandidate{ 23 Foundation: "1966762133", 24 Priority: 2122260222, 25 Address: "192.168.20.128", 26 Protocol: ICEProtocolUDP, 27 Port: 47298, 28 Typ: ICECandidateTypeSrflx, 29 Component: 1, 30 RelatedAddress: "203.0.113.1", 31 RelatedPort: 5000, 32 }, 33 }, { 34 // Chrome/Webkit-style ICECandidate: 35 `{"foundation":"1966762134", "component":"rtp", "protocol":"udp", "priority":2122260223, "address":"192.168.20.129", "port":47299, "type":"host", "relatedAddress":null}`, 36 ICECandidate{ 37 Foundation: "1966762134", 38 Priority: 2122260223, 39 Address: "192.168.20.129", 40 Protocol: ICEProtocolUDP, 41 Port: 47299, 42 Typ: ICECandidateTypeHost, 43 Component: 1, 44 RelatedAddress: "<null>", 45 RelatedPort: 0, 46 }, 47 }, { 48 // Both are present, Chrome/Webkit-style takes precedent: 49 `{"candidate":"1966762133 1 udp 2122260222 192.168.20.128 47298 typ srflx raddr 203.0.113.1 rport 5000", "foundation":"1966762134", "component":"rtp", "protocol":"udp", "priority":2122260223, "address":"192.168.20.129", "port":47299, "type":"host", "relatedAddress":null}`, 50 ICECandidate{ 51 Foundation: "1966762134", 52 Priority: 2122260223, 53 Address: "192.168.20.129", 54 Protocol: ICEProtocolUDP, 55 Port: 47299, 56 Typ: ICECandidateTypeHost, 57 Component: 1, 58 RelatedAddress: "<null>", 59 RelatedPort: 0, 60 }, 61 }, 62 } 63 64 for i, testCase := range testCases { 65 v := map[string]interface{}{} 66 err := json.Unmarshal([]byte(testCase.jsonCandidate), &v) 67 if err != nil { 68 t.Errorf("Case %d: bad test, got error: %v", i, err) 69 } 70 val := *valueToICECandidate(js.ValueOf(v)) 71 val.statsID = "" 72 assert.Equal(t, testCase.expect, val) 73 } 74 } 75 76 func TestValueToICEServer(t *testing.T) { 77 testCases := []ICEServer{ 78 { 79 URLs: []string{"turn:192.158.29.39?transport=udp"}, 80 Username: "unittest", 81 Credential: "placeholder", 82 CredentialType: ICECredentialTypePassword, 83 }, 84 { 85 URLs: []string{"turn:[2001:db8:1234:5678::1]?transport=udp"}, 86 Username: "unittest", 87 Credential: "placeholder", 88 CredentialType: ICECredentialTypePassword, 89 }, 90 { 91 URLs: []string{"turn:192.158.29.39?transport=udp"}, 92 Username: "unittest", 93 Credential: OAuthCredential{ 94 MACKey: "WmtzanB3ZW9peFhtdm42NzUzNG0=", 95 AccessToken: "AAwg3kPHWPfvk9bDFL936wYvkoctMADzQ5VhNDgeMR3+ZlZ35byg972fW8QjpEl7bx91YLBPFsIhsxloWcXPhA==", 96 }, 97 CredentialType: ICECredentialTypeOauth, 98 }, 99 } 100 101 for _, testCase := range testCases { 102 v := iceServerToValue(testCase) 103 s := valueToICEServer(v) 104 assert.Equal(t, testCase, s) 105 } 106 }