Update web-platform-tests to revision 04cd5eb8e5c47e4fe341f2fb541d39fa2346f464

This commit is contained in:
WPT Sync Bot 2018-11-16 21:03:13 -05:00
parent 0ab2c3f8a3
commit 1d0624b343
226 changed files with 4495 additions and 903 deletions

View file

@ -3,6 +3,7 @@
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="RTCConfiguration-helper.js"></script>
<script src="RTCPeerConnection-helper.js"></script>
<script>
'use strict';
@ -188,8 +189,8 @@
const pc = new RTCPeerConnection({rtcpMuxPolicy: 'require'});
t.add_cleanup(() => pc.close());
await pc.createOffer({offerToReceiveAudio: true})
.then(offer => pc.setLocalDescription(offer));
const offer = await generateAudioReceiveOnlyOffer(pc);
await pc.setLocalDescription(offer);
return promise_rejects(t, 'InvalidAccessError', pc.setRemoteDescription({type: 'answer', sdp}));
}, 'setRemoteDescription throws InvalidAccessError when called with an answer without rtcp-mux and rtcpMuxPolicy is set to require');
</script>

View file

@ -61,9 +61,9 @@ a=rtcp-rsize
const sessionDesc = { type: 'offer', sdp };
// valid candidate attributes
const sdpMid = 'a1';
const sdpMLineIndex = 0;
const usernameFragment = 'ETEn';
const sdpMid1 = 'a1';
const sdpMLineIndex1 = 0;
const usernameFragment1 = 'ETEn';
const sdpMid2 = 'v1';
const sdpMLineIndex2 = 1;
@ -138,7 +138,9 @@ a=rtcp-rsize
return promise_rejects(t, 'InvalidStateError',
pc.addIceCandidate({
candidate: candidateStr1,
sdpMid, sdpMLineIndex, usernameFragment
sdpMid: sdpMid1,
sdpMLineIndex: sdpMLineIndex1,
usernameFragment: usernameFragment1
}));
}, 'Add ICE candidate before setting remote description should reject with InvalidStateError');
@ -153,7 +155,9 @@ a=rtcp-rsize
return pc.setRemoteDescription(sessionDesc)
.then(() => pc.addIceCandidate({
candidate: candidateStr1,
sdpMid, sdpMLineIndex, usernameFragment
sdpMid: sdpMid1,
sdpMLineIndex: sdpMLineIndex1,
usernameFragement: usernameFragment1
}));
}, 'Add ICE candidate after setting remote description should succeed');
@ -165,7 +169,9 @@ a=rtcp-rsize
return pc.setRemoteDescription(sessionDesc)
.then(() => pc.addIceCandidate(new RTCIceCandidate({
candidate: candidateStr1,
sdpMid, sdpMLineIndex, usernameFragment
sdpMid: sdpMid1,
sdpMLineIndex: sdpMLineIndex1,
usernameFragement: usernameFragment1
})));
}, 'Add ICE candidate with RTCIceCandidate should succeed');
@ -175,7 +181,9 @@ a=rtcp-rsize
t.add_cleanup(() => pc.close());
return pc.setRemoteDescription(sessionDesc)
.then(() => pc.addIceCandidate({ sdpMid }));
.then(() => pc.addIceCandidate({
candidate: candidateStr1,
sdpMid: sdpMid1 }));
}, 'Add candidate with only valid sdpMid should succeed');
promise_test(t => {
@ -184,7 +192,9 @@ a=rtcp-rsize
t.add_cleanup(() => pc.close());
return pc.setRemoteDescription(sessionDesc)
.then(() => pc.addIceCandidate({ sdpMLineIndex }));
.then(() => pc.addIceCandidate({
candidate: candidateStr1,
sdpMLineIndex: sdpMLineIndex1 }));
}, 'Add candidate with only valid sdpMLineIndex should succeed');
/*
@ -206,7 +216,9 @@ a=rtcp-rsize
return pc.setRemoteDescription(sessionDesc)
.then(() => pc.addIceCandidate({
candidate: candidateStr1,
sdpMid, sdpMLineIndex, usernameFragment
sdpMid: sdpMid1,
sdpMLineIndex: sdpMLineIndex1,
usernameFragement: usernameFragment1
}))
.then(() => {
assert_candidate_line_between(pc.remoteDescription.sdp,
@ -240,8 +252,9 @@ a=rtcp-rsize
return pc.setRemoteDescription(sessionDesc)
.then(() => pc.addIceCandidate({
candidate: candidateStr1,
sdpMid, sdpMLineIndex,
usernameFragment: null
sdpMid: sdpMid1,
sdpMLineIndex: sdpMLineIndex1,
ufrag: null
}))
.then(() => {
assert_candidate_line_between(pc.remoteDescription.sdp,
@ -257,7 +270,9 @@ a=rtcp-rsize
return pc.setRemoteDescription(sessionDesc)
.then(() => pc.addIceCandidate({
candidate: candidateStr1,
sdpMid, sdpMLineIndex, usernameFragment
sdpMid: sdpMid1,
sdpMLineIndex: sdpMLineIndex1,
usernameFragement: usernameFragment1
}))
.then(() => pc.addIceCandidate({
candidate: candidateStr2,
@ -296,12 +311,15 @@ a=rtcp-rsize
return pc.setRemoteDescription(sessionDesc)
.then(() => pc.addIceCandidate({
candidate: candidateStr1,
sdpMid, sdpMLineIndex, usernameFragment
sdpMid: sdpMid1,
sdpMLineIndex: sdpMLineIndex1,
usernameFragement: usernameFragment1
}))
.then(() => pc.addIceCandidate({
candidate: '',
sdpMid, sdpMLineIndex,
usernameFragment
sdpMid: sdpMid1,
sdpMLineIndex: sdpMLineIndex1,
usernameFragement: usernameFragment1
}))
.then(() => {
assert_candidate_line_between(pc.remoteDescription.sdp,
@ -404,7 +422,9 @@ a=rtcp-rsize
promise_rejects(t, 'OperationError',
pc.addIceCandidate({
candidate: candidateStr1,
sdpMid: 'invalid', sdpMLineIndex, usernameFragment
sdpMid: 'invalid',
sdpMLineIndex: sdpMLineIndex1,
usernameFragement: usernameFragment1
})));
}, 'Add candidate with invalid sdpMid should reject with OperationError');
@ -427,7 +447,7 @@ a=rtcp-rsize
pc.addIceCandidate({
candidate: candidateStr1,
sdpMLineIndex: 2,
usernameFragment
usernameFragement: usernameFragment1
})));
}, 'Add candidate with invalid sdpMLineIndex should reject with OperationError');
@ -441,9 +461,9 @@ a=rtcp-rsize
return pc.setRemoteDescription(sessionDesc)
.then(() => pc.addIceCandidate({
candidate: candidateStr1,
sdpMid,
sdpMid: sdpMid1,
sdpMLineIndex: 2,
usernameFragment
usernameFragement: usernameFragment1
}));
}, 'Invalid sdpMLineIndex should be ignored if valid sdpMid is provided');
@ -482,8 +502,9 @@ a=rtcp-rsize
promise_rejects(t, 'OperationError',
pc.addIceCandidate({
candidate: candidateStr1,
sdpMid, sdpMLineIndex,
usernameFragment: 'invalid'
sdpMid: sdpMid1,
sdpMLineIndex: sdpMLineIndex1,
ufrag: 'invalid'
})));
}, 'Add candidate with invalid usernameFragment should reject with OperationError');
@ -504,7 +525,9 @@ a=rtcp-rsize
promise_rejects(t, 'OperationError',
pc.addIceCandidate({
candidate: invalidCandidateStr,
sdpMid, sdpMLineIndex, usernameFragment
sdpMid: sdpMid1,
sdpMLineIndex: sdpMLineIndex1,
usernameFragement: usernameFragment1
})));
}, 'Add candidate with invalid candidate string should reject with OperationError');
@ -520,7 +543,7 @@ a=rtcp-rsize
candidate: candidateStr2,
sdpMid: sdpMid2,
sdpMLineIndex: sdpMLineIndex2,
usernameFragment
usernameFragement: usernameFragment1
})));
}, 'Add candidate with sdpMid belonging to different usernameFragment should reject with OperationError');

View file

@ -11,8 +11,9 @@
// https://w3c.github.io/webrtc-pc/archives/20170605/webrtc.html
// The following helper functions are called from RTCPeerConnection-helper.js:
// exchangeIceCandidates
// doSignalingHandshake
// exchangeIceCandidates
// generateAudioReceiveOnlyOffer
/*
4.3.2. Interface Definition
@ -72,7 +73,7 @@
pc.addEventListener('icegatheringstatechange', onIceGatheringStateChange);
pc.createOffer({ offerToReceiveAudio: true })
generateAudioReceiveOnlyOffer(pc)
.then(offer => pc.setLocalDescription(offer))
.then(err => t.step_func(err =>
assert_unreached(`Unhandled rejection ${err.name}: ${err.message}`)));

View file

@ -12,6 +12,7 @@
// The following helper functions are called from RTCPeerConnection-helper.js:
// generateAnswer
// generateAudioReceiveOnlyOffer
// test_never_resolve
// Listen to the negotiationneeded event on a peer connection
@ -165,7 +166,7 @@
const pc = new RTCPeerConnection();
const negotiated = awaitNegotiation(pc);
return pc.createOffer({ offerToReceiveAudio: true })
return generateAudioReceiveOnlyOffer(pc)
.then(offer => pc.setLocalDescription(offer))
.then(() => negotiated)
.then(({nextPromise}) => {
@ -190,7 +191,7 @@
return assert_first_promise_fulfill_after_second(
awaitNegotiation(pc),
pc.createOffer({ offerToReceiveAudio: true })
generateAudioReceiveOnlyOffer(pc)
.then(offer =>
pc.setLocalDescription(offer)
.then(() => {

View file

@ -12,6 +12,7 @@
// The following helper functions are called from RTCPeerConnection-helper.js:
// assert_session_desc_similar
// generateAudioReceiveOnlyOffer
/*
4.3.2. Interface Definition
@ -105,7 +106,7 @@
promise_test(t => {
const pc = new RTCPeerConnection();
t.add_cleanup(() => pc.close());
return pc.createOffer({ offerToReceiveAudio: true })
return generateAudioReceiveOnlyOffer(pc)
.then(offer =>
pc.setRemoteDescription(offer)
.then(() => pc.createAnswer()))

View file

@ -12,6 +12,7 @@
// The following helper functions are called from RTCPeerConnection-helper.js:
// assert_session_desc_similar()
// generateAudioReceiveOnlyOffer
/*
4.3.2. Interface Definition
@ -115,7 +116,7 @@
.then(offer1 => {
return pc1.setLocalDescription(offer1)
.then(()=> {
return pc1.createOffer({ offerToReceiveAudio: true })
return generateAudioReceiveOnlyOffer(pc1)
.then(offer2 => {
assert_session_desc_not_similar(offer1, offer2);

View file

@ -11,8 +11,9 @@
// https://w3c.github.io/webrtc-pc/archives/20170605/webrtc.html
// The following helper functions are called from RTCPeerConnection-helper.js:
// generateDataChannelOffer
// assert_session_desc_similar
// generateAudioReceiveOnlyOffer
// generateDataChannelOffer
/*
4.3.2. Interface Definition
@ -105,7 +106,7 @@
promise_test(t => {
const pc = new RTCPeerConnection();
t.add_cleanup(() => pc.close());
return pc.createOffer({ offerToReceiveAudio: true })
return generateAudioReceiveOnlyOffer(pc)
.then(offer => pc.setRemoteDescription(offer))
.then(() => pc.setRemoteDescription({
type: 'rollback',

View file

@ -55,10 +55,8 @@ promise_test(async t => {
promise_test(async t => {
const [ localQuicTransport, remoteQuicTransport ] =
await makeTwoConnectedQuicTransports(t);
const firstLocalStream = localQuicTransport.createStream();
firstLocalStream.finish();
const secondLocalStream = localQuicTransport.createStream();
secondLocalStream.finish();
localQuicTransport.createStream().finish();
localQuicTransport.createStream().finish();
const remoteWatcher =
new EventWatcher(t, remoteQuicTransport, [ 'quicstream', 'statechange' ]);
const { stream: firstRemoteStream } =
@ -105,20 +103,6 @@ promise_test(async t => {
assert_equals(localStream.state, 'closed');
}, `reset() following finish() changes state to 'closed'.`);
promise_test(async t => {
const [ localQuicTransport, remoteQuicTransport ] =
await makeTwoConnectedQuicTransports(t);
const localStream = localQuicTransport.createStream();
localStream.finish();
const remoteWatcher = new EventWatcher(t, remoteQuicTransport, 'quicstream');
const { stream: remoteStream } = await remoteWatcher.wait_for('quicstream');
assert_equals(remoteStream.state, 'open');
const remoteStreamWatcher = new EventWatcher(t, remoteStream, 'statechange');
await remoteStreamWatcher.wait_for('statechange');
assert_equals(remoteStream.state, 'closing');
}, 'createStream() followed by finish() fires a quicstream event followed by ' +
`a statechange event to 'closing' on the remote side.`);
promise_test(async t => {
const [ localQuicTransport, remoteQuicTransport ] =
await makeTwoConnectedQuicTransports(t);
@ -133,33 +117,6 @@ promise_test(async t => {
}, 'createStream() followed by reset() fires a quicstream event followed ' +
`by a statechange event to 'closed' on the remote side.`);
promise_test(async t => {
const [ localQuicTransport, remoteQuicTransport ] =
await makeTwoConnectedQuicTransports(t);
remoteQuicTransport.onquicstream = ({ stream }) => stream.reset();
const localStream = localQuicTransport.createStream();
localStream.finish();
const localWatcher = new EventWatcher(t, localStream, 'statechange');
await localWatcher.wait_for('statechange');
assert_equals(localStream.state, 'closed');
}, 'finish() on a remote stream that has already finished fires a ' +
`statechange event to 'closed' on the remote side.`);
promise_test(async t => {
const [ localQuicTransport, remoteQuicTransport ] =
await makeTwoConnectedQuicTransports(t);
const localStream = localQuicTransport.createStream();
localStream.finish();
localStream.reset();
const remoteWatcher = new EventWatcher(t, remoteQuicTransport, 'quicstream');
const { stream: remoteStream } = await remoteWatcher.wait_for('quicstream');
const remoteStreamWatcher = new EventWatcher(t, remoteStream, 'statechange');
await remoteStreamWatcher.wait_for('statechange');
assert_equals(remoteStream.state, 'closing');
await remoteStreamWatcher.wait_for('statechange');
assert_equals(remoteStream.state, 'closed');
}, 'finish() then reset() fires two statechange events on the remote side.');
promise_test(async t => {
const [ localQuicTransport, remoteQuicTransport ] =
await makeTwoConnectedQuicTransports(t);
@ -213,6 +170,24 @@ promise_test(async t => {
}, 'write() throws if total write buffered amount would be greater than ' +
'maxWriteBufferedAmount.');
promise_test(async t => {
const [ localQuicTransport, remoteQuicTransport ] =
await makeTwoConnectedQuicTransports(t);
const localStream = localQuicTransport.createStream();
localStream.write(new Uint8Array(10));
const remoteWatcher = new EventWatcher(t, remoteQuicTransport, 'quicstream');
await remoteWatcher.wait_for('quicstream');
}, 'write() causes quicstream event to fire on the remote transport.');
promise_test(async t => {
const [ localQuicTransport, remoteQuicTransport ] =
await makeTwoConnectedQuicTransports(t);
const localStream = localQuicTransport.createStream();
localStream.finish();
const remoteWatcher = new EventWatcher(t, remoteQuicTransport, 'quicstream');
await remoteWatcher.wait_for('quicstream');
}, 'finish() causes quicstream event to fire on the remote transport.');
promise_test(async t => {
const [ localQuicTransport, remoteQuicTransport ] =
await makeTwoConnectedQuicTransports(t);
@ -253,4 +228,66 @@ promise_test(async t => {
assert_equals(localStream.writeBufferedAmount, 10);
}, 'writeBufferedAmount maintained after finish() has been called.');
promise_test(async t => {
const [ localQuicTransport, remoteQuicTransport ] =
await makeTwoConnectedQuicTransports(t);
const localStream = localQuicTransport.createStream();
await localStream.waitForWriteBufferedAmountBelow(0);
}, 'waitForWriteBufferedAmountBelow(0) resolves immediately.');
promise_test(async t => {
const [ localQuicTransport, remoteQuicTransport ] =
await makeTwoConnectedQuicTransports(t);
const localStream = localQuicTransport.createStream();
await localStream.waitForWriteBufferedAmountBelow(
localStream.maxWriteBufferedAmount);
}, 'waitForWriteBufferedAmountBelow(maxWriteBufferedAmount) resolves ' +
'immediately.');
promise_test(async t => {
const [ localQuicTransport, remoteQuicTransport ] =
await makeTwoConnectedQuicTransports(t);
const localStream = localQuicTransport.createStream();
localStream.write(new Uint8Array(localStream.maxWriteBufferedAmount));
const promise1 = localStream.waitForWriteBufferedAmountBelow(0);
const promise2 = localStream.waitForWriteBufferedAmountBelow(0);
localStream.finish();
await Promise.all([
promise_rejects(t, 'InvalidStateError', promise1),
promise_rejects(t, 'InvalidStateError', promise2)]);
}, 'Pending waitForWriteBufferedAmountBelow() promises rejected after ' +
'finish().');
promise_test(async t => {
const [ localQuicTransport, remoteQuicTransport ] =
await makeTwoConnectedQuicTransports(t);
const localStream = localQuicTransport.createStream();
localStream.write(new Uint8Array(localStream.maxWriteBufferedAmount));
const promise1 = localStream.waitForWriteBufferedAmountBelow(0);
const promise2 = localStream.waitForWriteBufferedAmountBelow(0);
localStream.reset();
await Promise.all([
promise_rejects(t, 'InvalidStateError', promise1),
promise_rejects(t, 'InvalidStateError', promise2)]);
}, 'Pending waitForWriteBufferedAmountBelow() promises rejected after ' +
'reset().');
closed_stream_test(async (t, stream) => {
await promise_rejects(t, 'InvalidStateError',
stream.waitForWriteBufferedAmountBelow(0));
}, 'waitForWriteBufferedBelow() rejects with InvalidStateError.');
promise_test(async t => {
const [ localQuicTransport, remoteQuicTransport ] =
await makeTwoConnectedQuicTransports(t);
const localStream = localQuicTransport.createStream();
assert_object_equals(
localStream.readInto(new Uint8Array(10)),
{ amount: 0, finished: false });
}, 'readInto() on new local stream returns amount 0.');
closed_stream_test(async (t, stream) => {
assert_throws('InvalidStateError', () => stream.readInto(new Uint8Array(1)));
}, 'readInto() throws InvalidStateError.');
</script>