Skip to content

Commit f732e6d

Browse files
committed
test: cls variant of test-http-abort-stream-end
Refs: #31978 fixup: address review comment
1 parent 757e203 commit f732e6d

File tree

2 files changed

+106
-0
lines changed

2 files changed

+106
-0
lines changed
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
'use strict';
2+
const common = require('../common');
3+
const assert = require('assert');
4+
5+
const http = require('http');
6+
const { AsyncLocalStorage } = require('async_hooks');
7+
const asyncLocalStorage = new AsyncLocalStorage();
8+
9+
const maxSize = 1024;
10+
11+
const server = http.createServer(common.mustCall((req, res) => {
12+
server.close();
13+
14+
res.writeHead(200, { 'Content-Type': 'text/plain' });
15+
for (let i = 0; i < maxSize; i++) {
16+
res.write(`x${i}`);
17+
}
18+
res.end();
19+
}));
20+
21+
server.listen(0, () => {
22+
asyncLocalStorage.run(new Map(), common.mustCall(() => {
23+
const options = { port: server.address().port };
24+
const req = http.get(options, common.mustCall((res) => {
25+
const store = asyncLocalStorage.getStore();
26+
store.set('req', req);
27+
store.set('size', 0);
28+
res.on('data', ondata);
29+
req.on('abort', common.mustCall(onabort));
30+
assert.strictEqual(req.aborted, false);
31+
}));
32+
}));
33+
});
34+
35+
function ondata(d) {
36+
const store = asyncLocalStorage.getStore();
37+
const req = store.get('req');
38+
let size = store.get('size');
39+
size += d.length;
40+
assert(!req.aborted, 'got data after abort');
41+
if (size > maxSize) {
42+
req.abort();
43+
assert.strictEqual(req.aborted, true);
44+
size = maxSize;
45+
}
46+
store.set('size', size);
47+
}
48+
49+
function onabort() {
50+
const store = asyncLocalStorage.getStore();
51+
const size = store.get('size');
52+
assert.strictEqual(size, maxSize);
53+
}
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
'use strict';
2+
const common = require('../common');
3+
const assert = require('assert');
4+
5+
const http = require('http');
6+
const { AsyncLocalStorage } = require('async_hooks');
7+
const als = new AsyncLocalStorage();
8+
9+
const maxSize = 1024;
10+
11+
const server = http.createServer(common.mustCall((req, res) => {
12+
server.close();
13+
14+
res.writeHead(200, { 'Content-Type': 'text/plain' });
15+
for (let i = 0; i < maxSize; i++) {
16+
res.write(`x${i}`);
17+
}
18+
res.end();
19+
}));
20+
21+
server.listen(0, () => {
22+
als.run(new Map(), common.mustCall(() => {
23+
const options = { port: server.address().port };
24+
const req = http.get(options, common.mustCall((res) => {
25+
const store = als.getStore();
26+
store.set('req', req);
27+
store.set('size', 0);
28+
res.on('data', ondata);
29+
req.on('abort', common.mustCall(onabort));
30+
assert.strictEqual(req.aborted, false);
31+
}));
32+
}));
33+
});
34+
35+
function ondata(d) {
36+
const store = als.getStore();
37+
const req = store.get('req');
38+
let size = store.get('size');
39+
size += d.length;
40+
assert(!req.aborted, 'got data after abort');
41+
if (size > maxSize) {
42+
req.abort();
43+
assert.strictEqual(req.aborted, true);
44+
size = maxSize;
45+
}
46+
store.set('size', size);
47+
}
48+
49+
function onabort() {
50+
const store = als.getStore();
51+
const size = store.get('size');
52+
assert.strictEqual(size, maxSize);
53+
}

0 commit comments

Comments
 (0)