88 lines
3.8 KiB
JavaScript
88 lines
3.8 KiB
JavaScript
// META: global=window,worker
|
|
// META: script=/common/get-host-info.sub.js
|
|
// META: script=resources/webtransport-test-helpers.sub.js
|
|
|
|
promise_test(async t => {
|
|
const wt = new WebTransport(webtransport_url('custom-response.py?:status=200'));
|
|
await wt.ready;
|
|
}, 'WebTransport session is established with status code 200');
|
|
|
|
promise_test(async t => {
|
|
const wt = new WebTransport(webtransport_url('custom-response.py?:status=204'));
|
|
await wt.ready;
|
|
}, 'WebTransport session is established with status code 204');
|
|
|
|
promise_test(async t => {
|
|
const wt = new WebTransport(webtransport_url('custom-response.py?:status=301'));
|
|
// Sadly we cannot use promise_rejects_dom as the error constructor is
|
|
// WebTransportError rather than DOMException. Ditto below.
|
|
// We get a possible error, and then make sure wt.closed is rejected with it.
|
|
const e = await wt.ready.catch(e => e);
|
|
await promise_rejects_exactly(t, e, wt.closed, 'closed promise should be rejected');
|
|
await promise_rejects_exactly(t, e, wt.ready, 'ready promise shoud be rejected');
|
|
assert_true(e instanceof WebTransportError);
|
|
assert_equals(e.source, 'session', 'source');
|
|
assert_equals(e.streamErrorCode, null, 'streamErrorCode');
|
|
}, 'WebTransport session establishment fails with status code 301');
|
|
|
|
promise_test(async t => {
|
|
const wt = new WebTransport(webtransport_url('custom-response.py?:status=401'));
|
|
const e = await wt.ready.catch(e => e);
|
|
await promise_rejects_exactly(t, e, wt.closed, 'closed promise should be rejected');
|
|
await promise_rejects_exactly(t, e, wt.ready, 'ready promise shoud be rejected');
|
|
assert_true(e instanceof WebTransportError);
|
|
assert_equals(e.source, 'session', 'source');
|
|
assert_equals(e.streamErrorCode, null, 'streamErrorCode');
|
|
}, 'WebTransport session establishment with status code 401');
|
|
|
|
promise_test(async t => {
|
|
const wt = new WebTransport(webtransport_url('custom-response.py?:status=404'));
|
|
const e = await wt.ready.catch(e => e);
|
|
await promise_rejects_exactly(t, e, wt.closed, 'closed promise should be rejected');
|
|
await promise_rejects_exactly(t, e, wt.ready, 'ready promise shoud be rejected');
|
|
assert_true(e instanceof WebTransportError);
|
|
assert_equals(e.source, 'session', 'source');
|
|
assert_equals(e.streamErrorCode, null, 'streamErrorCode');
|
|
}, 'WebTransport session establishment fails with status code 404');
|
|
|
|
promise_test(async t => {
|
|
// Create WebTransport session.
|
|
const wt = new WebTransport(webtransport_url('echo-request-headers.py'));
|
|
await wt.ready;
|
|
|
|
// Read incoming unidirectional stream for echoed request headers.
|
|
const streams = await wt.incomingUnidirectionalStreams;
|
|
|
|
const stream_reader = streams.getReader();
|
|
const { value: recv_stream } = await stream_reader.read();
|
|
stream_reader.releaseLock();
|
|
|
|
const request_headers = await read_stream_as_json(recv_stream);
|
|
|
|
// Check the standard request headers.
|
|
check_and_remove_standard_headers(request_headers);
|
|
}, 'Echo back request headers');
|
|
|
|
promise_test(async t => {
|
|
// Create WebTransport session, and attach "Set-Cookie: foo=bar" to the response of
|
|
// the handshake.
|
|
const encodedSetCookie = encodeURIComponent('foo=bar');
|
|
let wt = new WebTransport(webtransport_url('custom-response.py?set-cookie=' + encodedSetCookie));
|
|
await wt.ready;
|
|
|
|
wt = new WebTransport(webtransport_url('echo-request-headers.py'));
|
|
await wt.ready;
|
|
|
|
// Read incoming unidirectional stream for echoed request headers.
|
|
const streams = await wt.incomingUnidirectionalStreams;
|
|
|
|
const stream_reader = streams.getReader();
|
|
const { value: recv_stream } = await stream_reader.read();
|
|
stream_reader.releaseLock();
|
|
|
|
const request_headers = await read_stream_as_json(recv_stream);
|
|
|
|
// Check cookie header is not echoed back.
|
|
check_and_remove_standard_headers(request_headers);
|
|
assert_equals(request_headers['cookie'], undefined);
|
|
}, 'Cookie header is not echoed back');
|