This is a testharness.js-based test.
Found 65 tests; 33 PASS, 32 FAIL, 0 TIMEOUT, 0 NOTRUN.
FAIL new RTCPeerConnection() should have default configuration.iceServers of undefined assert_equals: expected (undefined) undefined but got (object) []
PASS new RTCPeerConnection(config) - {} should succeed
PASS setConfiguration(config) - {} should succeed
PASS new RTCPeerConnection(config) - { iceServers: null } should throw TypeError
PASS setConfiguration(config) - { iceServers: null } should throw TypeError
FAIL new RTCPeerConnection(config) - { iceServers: undefined } should succeed assert_equals: expected (undefined) undefined but got (object) []
FAIL setConfiguration(config) - { iceServers: undefined } should succeed assert_equals: expected (undefined) undefined but got (object) []
PASS new RTCPeerConnection(config) - { iceServers: [] } should succeed
PASS setConfiguration(config) - { iceServers: [] } should succeed
PASS new RTCPeerConnection(config) - { iceServers: [null] } should throw TypeError
PASS setConfiguration(config) - { iceServers: [null] } should throw TypeError
PASS new RTCPeerConnection(config) - { iceServers: [undefined] } should throw TypeError
PASS setConfiguration(config) - { iceServers: [undefined] } should throw TypeError
PASS new RTCPeerConnection(config) - { iceServers: [{}] } should throw TypeError
PASS setConfiguration(config) - { iceServers: [{}] } should throw TypeError
FAIL new RTCPeerConnection(config) - with stun server should succeed assert_equals: expected (string) "password" but got (undefined) undefined
FAIL setConfiguration(config) - with stun server should succeed assert_equals: expected (string) "password" but got (undefined) undefined
FAIL new RTCPeerConnection(config) - with stun server array should succeed assert_equals: expected (string) "password" but got (undefined) undefined
FAIL setConfiguration(config) - with stun server array should succeed assert_equals: expected (string) "password" but got (undefined) undefined
FAIL new RTCPeerConnection(config) - with 2 stun servers should succeed assert_equals: expected 1 but got 2
FAIL setConfiguration(config) - with 2 stun servers should succeed assert_equals: expected 1 but got 2
FAIL new RTCPeerConnection(config) - with turn server, username, credential should succeed assert_equals: expected (string) "password" but got (undefined) undefined
FAIL setConfiguration(config) - with turn server, username, credential should succeed assert_equals: expected (string) "password" but got (undefined) undefined
FAIL new RTCPeerConnection(config) - with turns server and empty string username, credential should succeed Failed to construct 'RTCPeerConnection': ICE server parse failed
FAIL setConfiguration(config) - with turns server and empty string username, credential should succeed Failed to execute 'setConfiguration' on 'RTCPeerConnection': Could not update the PeerConnection with the given configuration.
FAIL new RTCPeerConnection(config) - with turn server and empty string username, credential should succeed Failed to construct 'RTCPeerConnection': ICE server parse failed
FAIL setConfiguration(config) - with turn server and empty string username, credential should succeed Failed to execute 'setConfiguration' on 'RTCPeerConnection': Could not update the PeerConnection with the given configuration.
FAIL new RTCPeerConnection(config) - with one turns server, one turn server, username, credential should succeed assert_equals: expected 1 but got 2
FAIL setConfiguration(config) - with one turns server, one turn server, username, credential should succeed assert_equals: expected 1 but got 2
FAIL new RTCPeerConnection(config) - with stun server and credentialType password should succeed assert_equals: expected (string) "password" but got (undefined) undefined
FAIL setConfiguration(config) - with stun server and credentialType password should succeed assert_equals: expected (string) "password" but got (undefined) undefined
PASS new RTCPeerConnection(config) - with turn server and no credentials should throw InvalidAccessError
PASS setConfiguration(config) - with turn server and no credentials should throw InvalidAccessError
PASS new RTCPeerConnection(config) - with turn server and only username should throw InvalidAccessError
PASS setConfiguration(config) - with turn server and only username should throw InvalidAccessError
PASS new RTCPeerConnection(config) - with turn server and only credential should throw InvalidAccessError
PASS setConfiguration(config) - with turn server and only credential should throw InvalidAccessError
PASS new RTCPeerConnection(config) - with turns server and no credentials should throw InvalidAccessError
PASS setConfiguration(config) - with turns server and no credentials should throw InvalidAccessError
PASS new RTCPeerConnection(config) - with turns server and only username should throw InvalidAccessError
PASS setConfiguration(config) - with turns server and only username should throw InvalidAccessError
PASS new RTCPeerConnection(config) - with turns server and only credential should throw InvalidAccessError
PASS setConfiguration(config) - with turns server and only credential should throw InvalidAccessError
PASS new RTCPeerConnection(config) - with "" url should throw SyntaxError
PASS setConfiguration(config) - with "" url should throw SyntaxError
PASS new RTCPeerConnection(config) - with ["stun:stun1.example.net", ""] url should throw SyntaxError
PASS setConfiguration(config) - with ["stun:stun1.example.net", ""] url should throw SyntaxError
PASS new RTCPeerConnection(config) - with relative url should throw SyntaxError
PASS setConfiguration(config) - with relative url should throw SyntaxError
PASS new RTCPeerConnection(config) - with http url should throw SyntaxError
PASS setConfiguration(config) - with http url should throw SyntaxError
FAIL new RTCPeerConnection(config) - with invalid turn url should throw SyntaxError assert_throws_dom: function "() =>
      makePc({ iceServers: [{
        urls: 'turn://example.org/foo?x=y'
      }] })" threw object "InvalidAccessError: Failed to construct 'RTCPeerConnection': Both username and credential are required when the URL scheme is "turn" or "turns"." that is not a DOMException SyntaxError: property "code" is equal to 15, expected 12
FAIL setConfiguration(config) - with invalid turn url should throw SyntaxError assert_throws_dom: function "() =>
      makePc({ iceServers: [{
        urls: 'turn://example.org/foo?x=y'
      }] })" threw object "InvalidAccessError: Failed to execute 'setConfiguration' on 'RTCPeerConnection': Both username and credential are required when the URL scheme is "turn" or "turns"." that is not a DOMException SyntaxError: property "code" is equal to 15, expected 12
PASS new RTCPeerConnection(config) - with invalid stun url should throw SyntaxError
FAIL setConfiguration(config) - with invalid stun url should throw SyntaxError assert_throws_dom: function "() =>
      makePc({ iceServers: [{
        urls: 'stun://example.org/foo?x=y'
      }] })" threw object "OperationError: Failed to execute 'setConfiguration' on 'RTCPeerConnection': Could not update the PeerConnection with the given configuration." that is not a DOMException SyntaxError: property "code" is equal to 0, expected 12
FAIL new RTCPeerConnection(config) - with empty urls should throw SyntaxError assert_throws_dom: function "() =>
      makePc({ iceServers: [{
        urls: []
      }] })" did not throw
FAIL setConfiguration(config) - with empty urls should throw SyntaxError assert_throws_dom: function "() =>
      makePc({ iceServers: [{
        urls: []
      }] })" did not throw
FAIL new RTCPeerConnection(config) - with invalid credentialType should throw TypeError assert_throws_js: function "() =>
      makePc({ iceServers: [{
        urls: [],
        credentialType: 'invalid'
      }] })" did not throw
FAIL setConfiguration(config) - with invalid credentialType should throw TypeError assert_throws_js: function "() =>
      makePc({ iceServers: [{
        urls: [],
        credentialType: 'invalid'
      }] })" did not throw
FAIL new RTCPeerConnection(config) - with credentialType token should throw TypeError assert_throws_js: function "() =>
      makePc({ iceServers: [{
        urls: [],
        credentialType: 'token'
      }] })" did not throw
FAIL setConfiguration(config) - with credentialType token should throw TypeError assert_throws_js: function "() =>
      makePc({ iceServers: [{
        urls: [],
        credentialType: 'token'
      }] })" did not throw
FAIL new RTCPeerConnection(config) - with url field should throw TypeError assert_throws_js: function "() =>
      makePc({ iceServers: [{
        url: 'stun:stun1.example.net'
      }] })" did not throw
FAIL setConfiguration(config) - with url field should throw TypeError assert_throws_js: function "() =>
      makePc({ iceServers: [{
        url: 'stun:stun1.example.net'
      }] })" did not throw
FAIL new RTCPeerConnection(config) - with turns server, credentialType password, and object credential should throw InvalidAccessError assert_throws_dom: function "() =>
      makePc({ iceServers: [{
        urls: 'turns:turn.example.org',
        credentialType: 'password',
        username: 'user',
        credential: {
          macKey: '',
          accessToken: ''
        }
      }] })" did not throw
FAIL setConfiguration(config) - with turns server, credentialType password, and object credential should throw InvalidAccessError assert_throws_dom: function "() =>
      makePc({ iceServers: [{
        urls: 'turns:turn.example.org',
        credentialType: 'password',
        username: 'user',
        credential: {
          macKey: '',
          accessToken: ''
        }
      }] })" did not throw
Harness: the test ran to completion.

