mirror of
https://github.com/servo/servo.git
synced 2025-10-04 02:29:12 +01:00
158 lines
6.8 KiB
HTML
158 lines
6.8 KiB
HTML
<!doctype html>
|
|
<meta charset=utf-8>
|
|
<title>RTCQuicStream.https.html</title>
|
|
<script src="/resources/testharness.js"></script>
|
|
<script src="/resources/testharnessreport.js"></script>
|
|
<script src="RTCIceTransport-extension-helper.js"></script>
|
|
<script src="RTCQuicTransport-helper.js"></script>
|
|
<script>
|
|
'use strict';
|
|
|
|
// These tests are based on the following specification:
|
|
// https://w3c.github.io/webrtc-quic/
|
|
|
|
// The following helper functions are called from RTCQuicTransport-helper.js:
|
|
// makeStandaloneQuicTransport
|
|
// makeTwoConnectedQuicTransports
|
|
|
|
promise_test(async t => {
|
|
const [ quicTransport, ] = await makeTwoConnectedQuicTransports(t);
|
|
const quicStream = quicTransport.createStream();
|
|
assert_equals(quicStream.transport, quicTransport,
|
|
'Expect transport to be set to the creating RTCQuicTransport.');
|
|
assert_equals(quicStream.state, 'open', `Expect state to be 'open'.`);
|
|
assert_equals(quicStream.readBufferedAmount, 0,
|
|
'Expect read buffered amount to be 0.');
|
|
assert_equals(quicStream.writeBufferedAmount, 0,
|
|
'Expect write buffered amount to be 0.');
|
|
}, 'createStream() returns an RTCQuicStream with initial properties set.');
|
|
|
|
promise_test(async t => {
|
|
const quicTransport = await makeStandaloneQuicTransport(t);
|
|
assert_throws('InvalidStateError', () => quicTransport.createStream());
|
|
}, 'createStream() throws if the transport is not connected.');
|
|
|
|
promise_test(async t => {
|
|
const quicTransport = await makeStandaloneQuicTransport(t);
|
|
quicTransport.stop();
|
|
assert_throws('InvalidStateError', () => quicTransport.createStream());
|
|
}, 'createStream() throws if the transport is closed.');
|
|
|
|
promise_test(async t => {
|
|
const [ quicTransport, ] = await makeTwoConnectedQuicTransports(t);
|
|
const firstQuicStream = quicTransport.createStream();
|
|
const secondQuicStream = quicTransport.createStream();
|
|
quicTransport.stop();
|
|
assert_equals(firstQuicStream.state, 'closed');
|
|
assert_equals(secondQuicStream.state, 'closed');
|
|
}, 'RTCQuicTransport.stop() closes all local streams.');
|
|
|
|
promise_test(async t => {
|
|
const [ localQuicTransport, remoteQuicTransport ] =
|
|
await makeTwoConnectedQuicTransports(t);
|
|
const firstLocalStream = localQuicTransport.createStream();
|
|
firstLocalStream.finish();
|
|
const secondLocalStream = localQuicTransport.createStream();
|
|
secondLocalStream.finish();
|
|
const remoteWatcher =
|
|
new EventWatcher(t, remoteQuicTransport, [ 'quicstream', 'statechange' ]);
|
|
const { stream: firstRemoteStream } =
|
|
await remoteWatcher.wait_for('quicstream');
|
|
const { stream: secondRemoteStream } =
|
|
await remoteWatcher.wait_for('quicstream');
|
|
localQuicTransport.stop();
|
|
await remoteWatcher.wait_for('statechange');
|
|
assert_equals(firstRemoteStream.state, 'closed');
|
|
assert_equals(secondRemoteStream.state, 'closed');
|
|
}, 'RTCQuicTransport.stop() closes all remote streams.');
|
|
|
|
promise_test(async t => {
|
|
const [ localQuicTransport, remoteQuicTransport ] =
|
|
await makeTwoConnectedQuicTransports(t);
|
|
const localStream = localQuicTransport.createStream();
|
|
localStream.finish();
|
|
assert_equals(localStream.state, 'closing');
|
|
}, `finish() changes state to 'closing'.`);
|
|
|
|
promise_test(async t => {
|
|
const [ localQuicTransport, remoteQuicTransport ] =
|
|
await makeTwoConnectedQuicTransports(t);
|
|
const localStream = localQuicTransport.createStream();
|
|
localStream.finish();
|
|
localStream.finish();
|
|
assert_equals(localStream.state, 'closing');
|
|
}, `finish() twice does not change state.`);
|
|
|
|
promise_test(async t => {
|
|
const [ localQuicTransport, remoteQuicTransport ] =
|
|
await makeTwoConnectedQuicTransports(t);
|
|
const localStream = localQuicTransport.createStream();
|
|
localStream.reset();
|
|
assert_equals(localStream.state, 'closed');
|
|
}, `reset() changes state to 'closed'.`);
|
|
|
|
promise_test(async t => {
|
|
const [ localQuicTransport, remoteQuicTransport ] =
|
|
await makeTwoConnectedQuicTransports(t);
|
|
const localStream = localQuicTransport.createStream();
|
|
localStream.finish();
|
|
localStream.reset();
|
|
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);
|
|
const localStream = localQuicTransport.createStream();
|
|
localStream.reset();
|
|
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, 'closed');
|
|
}, '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.');
|
|
|
|
</script>
|