11cb0ef41Sopenharmony_ci'use strict'; 21cb0ef41Sopenharmony_ciconst common = require('../common'); 31cb0ef41Sopenharmony_ciconst http = require('http'); 41cb0ef41Sopenharmony_ciconst assert = require('assert'); 51cb0ef41Sopenharmony_ciconst { getEventListeners } = require('events'); 61cb0ef41Sopenharmony_ci 71cb0ef41Sopenharmony_ci{ 81cb0ef41Sopenharmony_ci // abort 91cb0ef41Sopenharmony_ci 101cb0ef41Sopenharmony_ci const server = http.createServer(common.mustCall((req, res) => { 111cb0ef41Sopenharmony_ci res.end('Hello'); 121cb0ef41Sopenharmony_ci })); 131cb0ef41Sopenharmony_ci 141cb0ef41Sopenharmony_ci server.listen(0, common.mustCall(() => { 151cb0ef41Sopenharmony_ci const options = { port: server.address().port }; 161cb0ef41Sopenharmony_ci const req = http.get(options, common.mustCall((res) => { 171cb0ef41Sopenharmony_ci res.on('data', (data) => { 181cb0ef41Sopenharmony_ci req.abort(); 191cb0ef41Sopenharmony_ci assert.strictEqual(req.aborted, true); 201cb0ef41Sopenharmony_ci assert.strictEqual(req.destroyed, true); 211cb0ef41Sopenharmony_ci server.close(); 221cb0ef41Sopenharmony_ci }); 231cb0ef41Sopenharmony_ci })); 241cb0ef41Sopenharmony_ci req.on('error', common.mustNotCall()); 251cb0ef41Sopenharmony_ci assert.strictEqual(req.aborted, false); 261cb0ef41Sopenharmony_ci assert.strictEqual(req.destroyed, false); 271cb0ef41Sopenharmony_ci })); 281cb0ef41Sopenharmony_ci} 291cb0ef41Sopenharmony_ci 301cb0ef41Sopenharmony_ci{ 311cb0ef41Sopenharmony_ci // destroy + res 321cb0ef41Sopenharmony_ci 331cb0ef41Sopenharmony_ci const server = http.createServer(common.mustCall((req, res) => { 341cb0ef41Sopenharmony_ci res.end('Hello'); 351cb0ef41Sopenharmony_ci })); 361cb0ef41Sopenharmony_ci 371cb0ef41Sopenharmony_ci server.listen(0, common.mustCall(() => { 381cb0ef41Sopenharmony_ci const options = { port: server.address().port }; 391cb0ef41Sopenharmony_ci const req = http.get(options, common.mustCall((res) => { 401cb0ef41Sopenharmony_ci res.on('data', (data) => { 411cb0ef41Sopenharmony_ci req.destroy(); 421cb0ef41Sopenharmony_ci assert.strictEqual(req.aborted, false); 431cb0ef41Sopenharmony_ci assert.strictEqual(req.destroyed, true); 441cb0ef41Sopenharmony_ci server.close(); 451cb0ef41Sopenharmony_ci }); 461cb0ef41Sopenharmony_ci })); 471cb0ef41Sopenharmony_ci req.on('error', common.mustNotCall()); 481cb0ef41Sopenharmony_ci assert.strictEqual(req.aborted, false); 491cb0ef41Sopenharmony_ci assert.strictEqual(req.destroyed, false); 501cb0ef41Sopenharmony_ci })); 511cb0ef41Sopenharmony_ci} 521cb0ef41Sopenharmony_ci 531cb0ef41Sopenharmony_ci{ 541cb0ef41Sopenharmony_ci // destroy 551cb0ef41Sopenharmony_ci 561cb0ef41Sopenharmony_ci const server = http.createServer(common.mustNotCall()); 571cb0ef41Sopenharmony_ci 581cb0ef41Sopenharmony_ci server.listen(0, common.mustCall(() => { 591cb0ef41Sopenharmony_ci const options = { port: server.address().port }; 601cb0ef41Sopenharmony_ci const req = http.get(options, common.mustNotCall()); 611cb0ef41Sopenharmony_ci req.on('error', common.mustCall((err) => { 621cb0ef41Sopenharmony_ci assert.strictEqual(err.code, 'ECONNRESET'); 631cb0ef41Sopenharmony_ci server.close(); 641cb0ef41Sopenharmony_ci })); 651cb0ef41Sopenharmony_ci assert.strictEqual(req.aborted, false); 661cb0ef41Sopenharmony_ci assert.strictEqual(req.destroyed, false); 671cb0ef41Sopenharmony_ci req.destroy(); 681cb0ef41Sopenharmony_ci assert.strictEqual(req.aborted, false); 691cb0ef41Sopenharmony_ci assert.strictEqual(req.destroyed, true); 701cb0ef41Sopenharmony_ci })); 711cb0ef41Sopenharmony_ci} 721cb0ef41Sopenharmony_ci 731cb0ef41Sopenharmony_ci 741cb0ef41Sopenharmony_ci{ 751cb0ef41Sopenharmony_ci // Destroy post-abort sync with AbortSignal 761cb0ef41Sopenharmony_ci 771cb0ef41Sopenharmony_ci const server = http.createServer(common.mustNotCall()); 781cb0ef41Sopenharmony_ci const controller = new AbortController(); 791cb0ef41Sopenharmony_ci const { signal } = controller; 801cb0ef41Sopenharmony_ci server.listen(0, common.mustCall(() => { 811cb0ef41Sopenharmony_ci const options = { port: server.address().port, signal }; 821cb0ef41Sopenharmony_ci const req = http.get(options, common.mustNotCall()); 831cb0ef41Sopenharmony_ci req.on('error', common.mustCall((err) => { 841cb0ef41Sopenharmony_ci assert.strictEqual(err.code, 'ABORT_ERR'); 851cb0ef41Sopenharmony_ci assert.strictEqual(err.name, 'AbortError'); 861cb0ef41Sopenharmony_ci server.close(); 871cb0ef41Sopenharmony_ci })); 881cb0ef41Sopenharmony_ci assert.strictEqual(getEventListeners(signal, 'abort').length, 1); 891cb0ef41Sopenharmony_ci assert.strictEqual(req.aborted, false); 901cb0ef41Sopenharmony_ci assert.strictEqual(req.destroyed, false); 911cb0ef41Sopenharmony_ci controller.abort(); 921cb0ef41Sopenharmony_ci assert.strictEqual(req.aborted, false); 931cb0ef41Sopenharmony_ci assert.strictEqual(req.destroyed, true); 941cb0ef41Sopenharmony_ci })); 951cb0ef41Sopenharmony_ci} 961cb0ef41Sopenharmony_ci 971cb0ef41Sopenharmony_ci{ 981cb0ef41Sopenharmony_ci // Use post-abort async AbortSignal 991cb0ef41Sopenharmony_ci const server = http.createServer(common.mustNotCall()); 1001cb0ef41Sopenharmony_ci const controller = new AbortController(); 1011cb0ef41Sopenharmony_ci const { signal } = controller; 1021cb0ef41Sopenharmony_ci server.listen(0, common.mustCall(() => { 1031cb0ef41Sopenharmony_ci const options = { port: server.address().port, signal }; 1041cb0ef41Sopenharmony_ci const req = http.get(options, common.mustNotCall()); 1051cb0ef41Sopenharmony_ci req.on('error', common.mustCall((err) => { 1061cb0ef41Sopenharmony_ci assert.strictEqual(err.code, 'ABORT_ERR'); 1071cb0ef41Sopenharmony_ci assert.strictEqual(err.name, 'AbortError'); 1081cb0ef41Sopenharmony_ci })); 1091cb0ef41Sopenharmony_ci 1101cb0ef41Sopenharmony_ci req.on('close', common.mustCall(() => { 1111cb0ef41Sopenharmony_ci assert.strictEqual(req.aborted, false); 1121cb0ef41Sopenharmony_ci assert.strictEqual(req.destroyed, true); 1131cb0ef41Sopenharmony_ci server.close(); 1141cb0ef41Sopenharmony_ci })); 1151cb0ef41Sopenharmony_ci 1161cb0ef41Sopenharmony_ci assert.strictEqual(getEventListeners(signal, 'abort').length, 1); 1171cb0ef41Sopenharmony_ci process.nextTick(() => controller.abort()); 1181cb0ef41Sopenharmony_ci })); 1191cb0ef41Sopenharmony_ci} 1201cb0ef41Sopenharmony_ci 1211cb0ef41Sopenharmony_ci{ 1221cb0ef41Sopenharmony_ci // Use pre-aborted AbortSignal 1231cb0ef41Sopenharmony_ci const server = http.createServer(common.mustNotCall()); 1241cb0ef41Sopenharmony_ci const controller = new AbortController(); 1251cb0ef41Sopenharmony_ci const { signal } = controller; 1261cb0ef41Sopenharmony_ci server.listen(0, common.mustCall(() => { 1271cb0ef41Sopenharmony_ci controller.abort(); 1281cb0ef41Sopenharmony_ci const options = { port: server.address().port, signal }; 1291cb0ef41Sopenharmony_ci const req = http.get(options, common.mustNotCall()); 1301cb0ef41Sopenharmony_ci assert.strictEqual(getEventListeners(signal, 'abort').length, 0); 1311cb0ef41Sopenharmony_ci req.on('error', common.mustCall((err) => { 1321cb0ef41Sopenharmony_ci assert.strictEqual(err.code, 'ABORT_ERR'); 1331cb0ef41Sopenharmony_ci assert.strictEqual(err.name, 'AbortError'); 1341cb0ef41Sopenharmony_ci server.close(); 1351cb0ef41Sopenharmony_ci })); 1361cb0ef41Sopenharmony_ci assert.strictEqual(req.aborted, false); 1371cb0ef41Sopenharmony_ci assert.strictEqual(req.destroyed, true); 1381cb0ef41Sopenharmony_ci })); 1391cb0ef41Sopenharmony_ci} 140