https://github.com/web-platform-tests/wpt
Raw File
Tip revision: dc95d6e03b834edb8aef5b1c9f63187625197117 authored by Dong-hee Na on 10 October 2018, 08:14:18 UTC
Convert blocks.dat to html5lib_blocks.html
Tip revision: dc95d6e
RTCQuicStream.https.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>
back to top