mirror of
https://github.com/servo/servo.git
synced 2025-06-29 03:23:41 +01:00
98 lines
4.2 KiB
JavaScript
98 lines
4.2 KiB
JavaScript
'use strict';
|
|
|
|
// This file depends on RTCQuicTransport-helper.js which should be loaded from
|
|
// the main HTML file.
|
|
// The following helper methods are called from RTCQuicTransport-helper.js:
|
|
// makeTwoConnectedQuicTransports
|
|
|
|
// Run a test function for as many ways as an RTCQuicStream can transition to
|
|
// the 'closed' state.
|
|
// |test_func| will be called with the test as the first argument and the closed
|
|
// RTCQuicStream as the second argument.
|
|
function closed_stream_test(test_func, description) {
|
|
promise_test(async t => {
|
|
const [ localQuicTransport, remoteQuicTransport ] =
|
|
await makeTwoConnectedQuicTransports(t);
|
|
const localStream = localQuicTransport.createStream();
|
|
localStream.reset();
|
|
assert_equals(localStream.state, 'closed');
|
|
return test_func(t, localStream);
|
|
}, 'Stream closed by local reset(): ' + description);
|
|
|
|
promise_test(async t => {
|
|
const [ localQuicTransport, remoteQuicTransport ] =
|
|
await makeTwoConnectedQuicTransports(t);
|
|
const localStream = localQuicTransport.createStream();
|
|
localStream.write({ data: new Uint8Array(1) });
|
|
const remoteWatcher =
|
|
new EventWatcher(t, remoteQuicTransport, 'quicstream');
|
|
const { stream: remoteStream } = await remoteWatcher.wait_for('quicstream');
|
|
localStream.reset();
|
|
const remoteStreamWatcher =
|
|
new EventWatcher(t, remoteStream, 'statechange');
|
|
await remoteStreamWatcher.wait_for('statechange');
|
|
assert_equals(remoteStream.state, 'closed');
|
|
return test_func(t, remoteStream);
|
|
}, 'Stream closed by remote reset(): ' + description);
|
|
|
|
promise_test(async t => {
|
|
const [ localQuicTransport, remoteQuicTransport ] =
|
|
await makeTwoConnectedQuicTransports(t);
|
|
const localStream = localQuicTransport.createStream();
|
|
localStream.write({ finish: true });
|
|
const remoteWatcher =
|
|
new EventWatcher(t, remoteQuicTransport, 'quicstream');
|
|
const { stream: remoteStream } = await remoteWatcher.wait_for('quicstream');
|
|
remoteStream.write({ finish: true });
|
|
await localStream.waitForReadable(localStream.maxReadBufferedAmount);
|
|
assert_object_equals(
|
|
localStream.readInto(new Uint8Array(10)),
|
|
{ amount: 0, finished: true });
|
|
assert_equals(localStream.state, 'closed');
|
|
return test_func(t, localStream);
|
|
}, 'Stream closed by writing a finish, followed by reading remote finish: ' +
|
|
description);
|
|
|
|
promise_test(async t => {
|
|
const [ localQuicTransport, remoteQuicTransport ] =
|
|
await makeTwoConnectedQuicTransports(t);
|
|
const localStream = localQuicTransport.createStream();
|
|
localStream.write({ finish: true });
|
|
const remoteWatcher =
|
|
new EventWatcher(t, remoteQuicTransport, 'quicstream');
|
|
const { stream: remoteStream } = await remoteWatcher.wait_for('quicstream');
|
|
await remoteStream.waitForReadable(10);
|
|
assert_object_equals(
|
|
remoteStream.readInto(new Uint8Array(10)),
|
|
{ amount: 0, finished: true });
|
|
remoteStream.write({ finish: true });
|
|
assert_equals(remoteStream.state, 'closed');
|
|
return test_func(t, remoteStream);
|
|
}, 'Stream closed by by reading remote finish, followed by writing a ' +
|
|
'finish: ' + description);
|
|
|
|
promise_test(async t => {
|
|
const [ localQuicTransport, remoteQuicTransport ] =
|
|
await makeTwoConnectedQuicTransports(t);
|
|
const localStream = localQuicTransport.createStream();
|
|
localQuicTransport.stop();
|
|
assert_equals(localStream.state, 'closed');
|
|
return test_func(t, localStream);
|
|
}, 'Stream closed by local RTCQuicTransport stop(): ' + description);
|
|
|
|
promise_test(async t => {
|
|
const [ localQuicTransport, remoteQuicTransport ] =
|
|
await makeTwoConnectedQuicTransports(t);
|
|
const localStream = localQuicTransport.createStream();
|
|
localStream.write({ data: new Uint8Array(1) });
|
|
const remoteWatcher =
|
|
new EventWatcher(t, remoteQuicTransport,
|
|
[ 'quicstream', 'statechange' ]);
|
|
const { stream: remoteStream } = await remoteWatcher.wait_for('quicstream');
|
|
localQuicTransport.stop();
|
|
await remoteWatcher.wait_for('statechange');
|
|
assert_equals(remoteStream.state, 'closed');
|
|
return test_func(t, remoteStream);
|
|
}, 'Stream closed by remote RTCQuicTransport stop(): ' + description);
|
|
}
|
|
|