abort.any.js (2204B)
1 // META: script=../../constants.sub.js 2 // META: script=resources/url-constants.js 3 // META: script=/common/utils.js 4 // META: global=window,worker 5 // META: variant=?wss 6 // META: variant=?wpt_flags=h2 7 8 promise_test(async t => { 9 const controller = new AbortController(); 10 controller.abort(); 11 const key = token(); 12 const wsUrl = new URL( 13 `/fetch/api/resources/stash-put.py?key=${key}&value=connected`, 14 location.href); 15 wsUrl.protocol = wsUrl.protocol.replace('http', 'ws'); 16 // We intentionally use the port for the HTTP server, not the WebSocket 17 // server, because we don't expect the connection to be performed. 18 const wss = new WebSocketStream(wsUrl, { signal: controller.signal }); 19 await promise_rejects_dom( 20 t, 'AbortError', wss.opened, 'opened should reject'); 21 await promise_rejects_dom( 22 t, 'AbortError', wss.closed, 'closed should reject'); 23 // An incorrect implementation could pass this test due a race condition, 24 // but it is hard to completely eliminate the possibility. 25 const response = await fetch(`/fetch/api/resources/stash-take.py?key=${key}`); 26 assert_equals(await response.text(), 'null', 'response should be null'); 27 }, 'abort before constructing should prevent connection'); 28 29 promise_test(async t => { 30 const controller = new AbortController(); 31 const wss = new WebSocketStream(`${BASEURL}/handshake_sleep_2`, 32 { signal: controller.signal }); 33 // Give the connection a chance to start. 34 await new Promise(resolve => t.step_timeout(resolve, 0)); 35 controller.abort(); 36 await promise_rejects_dom( 37 t, 'AbortError', wss.opened, 'opened should reject'); 38 await promise_rejects_dom( 39 t, 'AbortError', wss.closed, 'closed should reject'); 40 }, 'abort during handshake should work'); 41 42 promise_test(async t => { 43 const controller = new AbortController(); 44 const wss = new WebSocketStream(ECHOURL, { signal: controller.signal }); 45 const { readable, writable } = await wss.opened; 46 controller.abort(); 47 writable.getWriter().write('connected'); 48 const { value } = await readable.getReader().read(); 49 assert_equals(value, 'connected', 'value should match'); 50 }, 'abort after connect should do nothing');