| '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(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.finish(); |
| const remoteWatcher = |
| new EventWatcher(t, remoteQuicTransport, 'quicstream'); |
| const { stream: remoteStream } = await remoteWatcher.wait_for('quicstream'); |
| remoteStream.finish(); |
| 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 finish(), followed by reading remote finish: ' + |
| description); |
| |
| promise_test(async t => { |
| const [ localQuicTransport, remoteQuicTransport ] = |
| await makeTwoConnectedQuicTransports(t); |
| const localStream = localQuicTransport.createStream(); |
| localStream.write(new Uint8Array(1)); |
| const remoteWatcher = |
| new EventWatcher(t, remoteQuicTransport, 'quicstream'); |
| const { stream: remoteStream } = await remoteWatcher.wait_for('quicstream'); |
| remoteStream.finish(); |
| await localStream.waitForReadable(localStream.maxReadBufferedAmount); |
| assert_object_equals( |
| localStream.readInto(new Uint8Array(10)), |
| { amount: 0, finished: true }); |
| localStream.finish(); |
| assert_equals(localStream.state, 'closed'); |
| return test_func(t, localStream); |
| }, 'Stream closed by by reading remote finish, followed by 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(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(localStream.state, 'closed'); |
| return test_func(t, localStream); |
| }, 'Stream closed by remote RTCQuicTransport stop(): ' + description); |
| } |
| |