mirror of
https://github.com/nodejs/node.git
synced 2024-11-21 10:59:27 +00:00
test: wrap countdown callback in common.mustCall
This adds a implicit common.mustCall to the callback provided to the countdown. PR-URL: https://github.com/nodejs/node/pull/18506 Reviewed-By: Anatoli Papirovski <apapirovski@mac.com> Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de> Reviewed-By: Luigi Pinca <luigipinca@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com>
This commit is contained in:
parent
96c57fbfaa
commit
941bc93f22
@ -380,7 +380,7 @@ Synchronous version of `spawnPwd`.
|
||||
The `Countdown` module provides a simple countdown mechanism for tests that
|
||||
require a particular action to be taken after a given number of completed
|
||||
tasks (for instance, shutting down an HTTP server after a specific number of
|
||||
requests).
|
||||
requests). The Countdown will fail the test if the remainder did not reach 0.
|
||||
|
||||
<!-- eslint-disable strict, required-modules -->
|
||||
```js
|
||||
|
@ -4,13 +4,14 @@
|
||||
const assert = require('assert');
|
||||
const kLimit = Symbol('limit');
|
||||
const kCallback = Symbol('callback');
|
||||
const common = require('./');
|
||||
|
||||
class Countdown {
|
||||
constructor(limit, cb) {
|
||||
assert.strictEqual(typeof limit, 'number');
|
||||
assert.strictEqual(typeof cb, 'function');
|
||||
this[kLimit] = limit;
|
||||
this[kCallback] = cb;
|
||||
this[kCallback] = common.mustCall(cb);
|
||||
}
|
||||
|
||||
dec() {
|
||||
|
2
test/fixtures/failcounter.js
vendored
Normal file
2
test/fixtures/failcounter.js
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
const Countdown = require('../common/countdown');
|
||||
new Countdown(2, () => {});
|
@ -3,13 +3,31 @@
|
||||
const common = require('../common');
|
||||
const assert = require('assert');
|
||||
const Countdown = require('../common/countdown');
|
||||
const fixtures = require('../common/fixtures');
|
||||
const { execFile } = require('child_process');
|
||||
|
||||
let done = '';
|
||||
|
||||
const countdown = new Countdown(2, common.mustCall(() => done = true));
|
||||
const countdown = new Countdown(2, () => done = true);
|
||||
assert.strictEqual(countdown.remaining, 2);
|
||||
countdown.dec();
|
||||
assert.strictEqual(countdown.remaining, 1);
|
||||
countdown.dec();
|
||||
assert.strictEqual(countdown.remaining, 0);
|
||||
assert.strictEqual(done, true);
|
||||
|
||||
const failFixtures = [
|
||||
[
|
||||
fixtures.path('failcounter.js'),
|
||||
'Mismatched <anonymous> function calls. Expected exactly 1, actual 0.',
|
||||
]
|
||||
];
|
||||
|
||||
for (const p of failFixtures) {
|
||||
const [file, expected] = p;
|
||||
execFile(process.argv[0], [file], common.mustCall((ex, stdout, stderr) => {
|
||||
assert.ok(ex);
|
||||
assert.strictEqual(stderr, '');
|
||||
const firstLine = stdout.split('\n').shift();
|
||||
assert.strictEqual(firstLine, expected);
|
||||
}));
|
||||
}
|
||||
|
@ -32,7 +32,7 @@ const server = http.createServer(common.mustCall((req, res) => {
|
||||
setTimeout(() => res.end(req.url), 50);
|
||||
}, 2));
|
||||
|
||||
const countdown = new Countdown(2, common.mustCall(() => server.close()));
|
||||
const countdown = new Countdown(2, () => server.close());
|
||||
|
||||
server.on('connect', common.mustCall((req, socket) => {
|
||||
socket.write('HTTP/1.1 200 Connection established\r\n\r\n');
|
||||
|
@ -80,7 +80,7 @@ const server = http.createServer(common.mustCall((req, res) => {
|
||||
assert(request1.socket.destroyed);
|
||||
// assert not reusing the same socket, since it was destroyed.
|
||||
assert.notStrictEqual(request1.socket, request2.socket);
|
||||
const countdown = new Countdown(2, common.mustCall(() => server.close()));
|
||||
const countdown = new Countdown(2, () => server.close());
|
||||
request2.socket.on('close', common.mustCall(() => countdown.dec()));
|
||||
response.on('end', common.mustCall(() => countdown.dec()));
|
||||
response.resume();
|
||||
|
@ -17,7 +17,7 @@ const server = http.createServer(common.mustCall((req, res) => {
|
||||
res.end('hello world');
|
||||
}, 6));
|
||||
|
||||
const countdown = new Countdown(6, common.mustCall(() => server.close()));
|
||||
const countdown = new Countdown(6, () => server.close());
|
||||
|
||||
function get(path, callback) {
|
||||
return http.get({
|
||||
|
@ -26,13 +26,13 @@ function get(path, callback) {
|
||||
}, callback);
|
||||
}
|
||||
|
||||
const countdown = new Countdown(2, common.mustCall(() => {
|
||||
const countdown = new Countdown(2, () => {
|
||||
const freepool = agent.freeSockets[Object.keys(agent.freeSockets)[0]];
|
||||
assert.strictEqual(freepool.length, 2,
|
||||
`expect keep 2 free sockets, but got ${freepool.length}`);
|
||||
agent.destroy();
|
||||
server.close();
|
||||
}));
|
||||
});
|
||||
|
||||
function dec() {
|
||||
process.nextTick(() => countdown.dec());
|
||||
|
@ -26,7 +26,7 @@ const Countdown = require('../common/countdown');
|
||||
|
||||
const N = 8;
|
||||
|
||||
const countdown = new Countdown(N, common.mustCall(() => server.close()));
|
||||
const countdown = new Countdown(N, () => server.close());
|
||||
|
||||
const server = http.Server(common.mustCall((req, res) => {
|
||||
res.writeHead(200);
|
||||
@ -37,9 +37,9 @@ const server = http.Server(common.mustCall((req, res) => {
|
||||
server.listen(0, common.mustCall(() => {
|
||||
|
||||
const requests = [];
|
||||
const reqCountdown = new Countdown(N, common.mustCall(() => {
|
||||
const reqCountdown = new Countdown(N, () => {
|
||||
requests.forEach((req) => req.abort());
|
||||
}));
|
||||
});
|
||||
|
||||
const options = { port: server.address().port };
|
||||
|
||||
|
@ -25,7 +25,7 @@ const http = require('http');
|
||||
const net = require('net');
|
||||
const Countdown = require('../common/countdown');
|
||||
|
||||
const countdown = new Countdown(2, common.mustCall(() => server.close()));
|
||||
const countdown = new Countdown(2, () => server.close());
|
||||
|
||||
const payloads = [
|
||||
'HTTP/1.1 302 Object Moved\r\nContent-Length: 0\r\n\r\nhi world',
|
||||
|
@ -21,7 +21,12 @@
|
||||
|
||||
'use strict';
|
||||
require('../common');
|
||||
const Countdown = require('../common/countdown');
|
||||
const http = require('http');
|
||||
const NUMBER_OF_EXCEPTIONS = 4;
|
||||
const countdown = new Countdown(NUMBER_OF_EXCEPTIONS, () => {
|
||||
process.exit(0);
|
||||
});
|
||||
|
||||
const server = http.createServer(function(req, res) {
|
||||
intentionally_not_defined(); // eslint-disable-line no-undef
|
||||
@ -30,16 +35,16 @@ const server = http.createServer(function(req, res) {
|
||||
res.end();
|
||||
});
|
||||
|
||||
function onUncaughtException(err) {
|
||||
console.log(`Caught an exception: ${err}`);
|
||||
if (err.name === 'AssertionError') throw err;
|
||||
countdown.dec();
|
||||
}
|
||||
|
||||
process.on('uncaughtException', onUncaughtException);
|
||||
|
||||
server.listen(0, function() {
|
||||
for (let i = 0; i < 4; i += 1) {
|
||||
for (let i = 0; i < NUMBER_OF_EXCEPTIONS; i += 1) {
|
||||
http.get({ port: this.address().port, path: `/busy/${i}` });
|
||||
}
|
||||
});
|
||||
|
||||
let exception_count = 0;
|
||||
|
||||
process.on('uncaughtException', function(err) {
|
||||
console.log(`Caught an exception: ${err}`);
|
||||
if (err.name === 'AssertionError') throw err;
|
||||
if (++exception_count === 4) process.exit(0);
|
||||
});
|
||||
|
@ -23,10 +23,10 @@ server.listen(0, common.mustCall(() => {
|
||||
|
||||
assert.strictEqual(client.state.nextStreamID, nextID);
|
||||
|
||||
const countdown = new Countdown(2, common.mustCall(() => {
|
||||
const countdown = new Countdown(2, () => {
|
||||
server.close();
|
||||
client.close();
|
||||
}));
|
||||
});
|
||||
|
||||
{
|
||||
// This one will be ok
|
||||
|
@ -32,10 +32,10 @@ server.on('stream', (stream, headers) => {
|
||||
server.listen(0, common.mustCall(() => {
|
||||
const client = http2.connect(`http://localhost:${server.address().port}`);
|
||||
|
||||
const countdown = new Countdown(tests.length, common.mustCall(() => {
|
||||
const countdown = new Countdown(tests.length, () => {
|
||||
client.close();
|
||||
server.close();
|
||||
}));
|
||||
});
|
||||
|
||||
tests.forEach((test) => {
|
||||
const req = client.request({
|
||||
|
@ -65,10 +65,10 @@ assert.strictEqual(counts[NODE_PERFORMANCE_ENTRY_TYPE_FUNCTION], 0);
|
||||
new PerformanceObserver(common.mustCall(callback, 3));
|
||||
|
||||
const countdown =
|
||||
new Countdown(3, common.mustCall(() => {
|
||||
new Countdown(3, () => {
|
||||
observer.disconnect();
|
||||
assert.strictEqual(counts[NODE_PERFORMANCE_ENTRY_TYPE_MARK], 1);
|
||||
}));
|
||||
});
|
||||
|
||||
function callback(list, obs) {
|
||||
assert.strictEqual(obs, observer);
|
||||
|
@ -33,7 +33,7 @@ const server = net.createServer(function onClient(client) {
|
||||
});
|
||||
|
||||
server.listen(0, common.localhostIPv4, common.mustCall(() => {
|
||||
const countdown = new Countdown(2, common.mustCall(() => server.close()));
|
||||
const countdown = new Countdown(2, () => server.close());
|
||||
|
||||
{
|
||||
const client = net.connect({ port: server.address().port });
|
||||
|
Loading…
Reference in New Issue
Block a user