Files
webrtc/peerconnection_js_test.go
salmān aljammāz 7a95bb893a WASM: Fallback to SDP line for candiate callback
On Firefox, the RTCIceCandidate interface appears to just be an
RTCIceCandidateInit in disguise. That is, it does not have properties
for each individual component of the candidate line. It only has
the raw SDP string in the candidate property.

This change falls back to parsing the candidate line if some expected
property is missing when preparing the candidate for the callback
OnICECandidate.

https://developer.mozilla.org/en-US/docs/Web/API/RTCIceCandidate

https://caniuse.com/#feat=mdn-api_rtcicecandidate_priority
2020-05-26 16:28:25 -07:00

70 lines
2.1 KiB
Go

package webrtc
import (
"encoding/json"
"syscall/js"
"testing"
"github.com/stretchr/testify/assert"
)
func TestValueToICECandidate(t *testing.T) {
testCases := []struct {
jsonCandidate string
expect ICECandidate
}{
{
// Firefox-style ICECandidateInit:
`{"candidate":"1966762133 1 udp 2122260222 192.168.20.128 47298 typ srflx raddr 203.0.113.1 rport 5000"}`,
ICECandidate{
Foundation: "1966762133",
Priority: 2122260222,
Address: "192.168.20.128",
Protocol: ICEProtocolUDP,
Port: 47298,
Typ: ICECandidateTypeSrflx,
Component: 1,
RelatedAddress: "203.0.113.1",
RelatedPort: 5000,
},
}, {
// Chrome/Webkit-style ICECandidate:
`{"foundation":"1966762134", "component":"rtp", "protocol":"udp", "priority":2122260223, "address":"192.168.20.129", "port":47299, "type":"host", "relatedAddress":null}`,
ICECandidate{
Foundation: "1966762134",
Priority: 2122260223,
Address: "192.168.20.129",
Protocol: ICEProtocolUDP,
Port: 47299,
Typ: ICECandidateTypeHost,
Component: 1,
RelatedAddress: "<null>",
RelatedPort: 0,
},
}, {
// Both are present, Chrome/Webkit-style takes precedent:
`{"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}`,
ICECandidate{
Foundation: "1966762134",
Priority: 2122260223,
Address: "192.168.20.129",
Protocol: ICEProtocolUDP,
Port: 47299,
Typ: ICECandidateTypeHost,
Component: 1,
RelatedAddress: "<null>",
RelatedPort: 0,
},
},
}
for i, testCase := range testCases {
v := map[string]interface{}{}
err := json.Unmarshal([]byte(testCase.jsonCandidate), &v)
if err != nil {
t.Errorf("Case %d: bad test, got error: %v", i, err)
}
assert.Equal(t, testCase.expect, *valueToICECandidate(js.ValueOf(v)))
}
}