Skip to content

Commit ce07810

Browse files
TrottMylesBorins
authored andcommitted
test: move tmpdir to submodule of common
Move tmpdir functionality to its own module (common/tmpdir). PR-URL: #17856 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Gibson Fahnestock <gibfahn@gmail.com> Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de> Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com>
1 parent 0d6476b commit ce07810

File tree

155 files changed

+645
-456
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

155 files changed

+645
-456
lines changed

benchmark/http/http_server_for_chunky_client.js

+3-10
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,15 @@
22

33
const assert = require('assert');
44
const http = require('http');
5-
const fs = require('fs');
65
const { fork } = require('child_process');
76
const common = require('../common.js');
8-
const { PIPE, tmpDir } = require('../../test/common');
7+
const { PIPE } = require('../../test/common');
8+
const tmpdir = require('../../test/common/tmpdir');
99
process.env.PIPE_NAME = PIPE;
1010

11-
try {
12-
fs.accessSync(tmpDir, fs.F_OK);
13-
} catch (e) {
14-
fs.mkdirSync(tmpDir);
15-
}
11+
tmpdir.refresh();
1612

1713
var server;
18-
try {
19-
fs.unlinkSync(process.env.PIPE_NAME);
20-
} catch (e) { /* ignore */ }
2114

2215
server = http.createServer(function(req, res) {
2316
const headers = {

benchmark/module/module-loader.js

+4-4
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ const fs = require('fs');
33
const path = require('path');
44
const common = require('../common.js');
55

6-
const { refreshTmpDir, tmpDir } = require('../../test/common');
7-
const benchmarkDirectory = path.join(tmpDir, 'nodejs-benchmark-module');
6+
const tmpdir = require('../../test/common/tmpdir');
7+
const benchmarkDirectory = path.join(tmpdir.path, 'nodejs-benchmark-module');
88

99
const bench = common.createBenchmark(main, {
1010
thousands: [50],
@@ -15,7 +15,7 @@ const bench = common.createBenchmark(main, {
1515
function main({ thousands, fullPath, useCache }) {
1616
const n = thousands * 1e3;
1717

18-
refreshTmpDir();
18+
tmpdir.refresh();
1919
try { fs.mkdirSync(benchmarkDirectory); } catch (e) {}
2020

2121
for (var i = 0; i <= n; i++) {
@@ -35,7 +35,7 @@ function main({ thousands, fullPath, useCache }) {
3535
else
3636
measureDir(n, useCache === 'true');
3737

38-
refreshTmpDir();
38+
tmpdir.refresh();
3939
}
4040

4141
function measureFull(n, useCache) {

test/addons/load-long-path/test.js

+3-2
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,13 @@ const fs = require('fs');
77
const path = require('path');
88
const assert = require('assert');
99

10-
common.refreshTmpDir();
10+
const tmpdir = require('../../common/tmpdir');
11+
tmpdir.refresh();
1112

1213
// make a path that is more than 260 chars long.
1314
// Any given folder cannot have a name longer than 260 characters,
1415
// so create 10 nested folders each with 30 character long names.
15-
let addonDestinationDir = path.resolve(common.tmpDir);
16+
let addonDestinationDir = path.resolve(tmpdir.path);
1617

1718
for (let i = 0; i < 10; i++) {
1819
addonDestinationDir = path.join(addonDestinationDir, 'x'.repeat(30));

test/addons/symlinked-module/test.js

+3-2
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,11 @@ const assert = require('assert');
1212
// This test should pass in Node.js v4 and v5. This test will pass in Node.js
1313
// with https://github.com/nodejs/node/pull/5950 reverted.
1414

15-
common.refreshTmpDir();
15+
const tmpdir = require('../../common/tmpdir');
16+
tmpdir.refresh();
1617

1718
const addonPath = path.join(__dirname, 'build', common.buildType);
18-
const addonLink = path.join(common.tmpDir, 'addon');
19+
const addonLink = path.join(tmpdir.path, 'addon');
1920

2021
try {
2122
fs.symlinkSync(addonPath, addonLink);

test/async-hooks/test-graph.pipeconnect.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@ const verifyGraph = require('./verify-graph');
66

77
const net = require('net');
88

9-
common.refreshTmpDir();
9+
const tmpdir = require('../common/tmpdir');
10+
tmpdir.refresh();
1011

1112
const hooks = initHooks();
1213
hooks.enable();

test/async-hooks/test-pipeconnectwrap.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@ const { checkInvocations } = require('./hook-checks');
88

99
const net = require('net');
1010

11-
common.refreshTmpDir();
11+
const tmpdir = require('../common/tmpdir');
12+
tmpdir.refresh();
1213

1314
const hooks = initHooks();
1415
hooks.enable();

test/common/README.md

+14-10
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ This directory contains modules used to test the Node.js implementation.
1212
* [Fixtures module](#fixtures-module)
1313
* [HTTP2 module](#http2-module)
1414
* [Internet module](#internet-module)
15+
* [tmpdir module](#tmpdir-module)
1516
* [WPT module](#wpt-module)
1617

1718
## Benchmark Module
@@ -332,11 +333,6 @@ A port number for tests to use if one is needed.
332333

333334
Logs '1..0 # Skipped: ' + `msg`
334335

335-
### refreshTmpDir()
336-
* return [&lt;String>]
337-
338-
Deletes the testing 'tmp' directory and recreates it.
339-
340336
### restoreStderr()
341337

342338
Restore the original `process.stderr.write`. Used to restore `stderr` to its
@@ -384,11 +380,6 @@ Platform normalizes the `pwd` command.
384380

385381
Synchronous version of `spawnPwd`.
386382

387-
### tmpDir
388-
* [&lt;String>]
389-
390-
The realpath of the 'tmp' directory.
391-
392383
## Countdown Module
393384

394385
The `Countdown` module provides a simple countdown mechanism for tests that
@@ -670,6 +661,19 @@ via `NODE_TEST_*` environment variables. For example, to configure
670661
`internet.addresses.INET_HOST`, set the environment
671662
variable `NODE_TEST_INET_HOST` to a specified host.
672663

664+
## tmpdir Module
665+
666+
The `tmpdir` module supports the use of a temporary directory for testing.
667+
668+
### path
669+
* [&lt;String>]
670+
671+
The realpath of the testing temporary directory.
672+
673+
### refresh()
674+
675+
Deletes and recreates the testing temporary directory.
676+
673677
## WPT Module
674678

675679
The wpt.js module is a port of parts of

test/common/index.js

+2-64
Original file line numberDiff line numberDiff line change
@@ -30,16 +30,10 @@ const stream = require('stream');
3030
const util = require('util');
3131
const Timer = process.binding('timer_wrap').Timer;
3232
const { fixturesDir } = require('./fixtures');
33-
34-
const testRoot = process.env.NODE_TEST_DIR ?
35-
fs.realpathSync(process.env.NODE_TEST_DIR) : path.resolve(__dirname, '..');
33+
const tmpdir = require('./tmpdir');
3634

3735
const noop = () => {};
3836

39-
// Using a `.` prefixed name, which is the convention for "hidden" on POSIX,
40-
// gets tools to ignore it by default or by simple rules, especially eslint.
41-
let tmpDirName = '.tmp';
42-
4337
Object.defineProperty(exports, 'PORT', {
4438
get: () => {
4539
if (+process.env.TEST_PARALLEL) {
@@ -120,62 +114,6 @@ if (process.env.NODE_TEST_WITH_ASYNC_HOOKS) {
120114
}).enable();
121115
}
122116

123-
function rimrafSync(p) {
124-
let st;
125-
try {
126-
st = fs.lstatSync(p);
127-
} catch (e) {
128-
if (e.code === 'ENOENT')
129-
return;
130-
}
131-
132-
try {
133-
if (st && st.isDirectory())
134-
rmdirSync(p, null);
135-
else
136-
fs.unlinkSync(p);
137-
} catch (e) {
138-
if (e.code === 'ENOENT')
139-
return;
140-
if (e.code === 'EPERM')
141-
return rmdirSync(p, e);
142-
if (e.code !== 'EISDIR')
143-
throw e;
144-
rmdirSync(p, e);
145-
}
146-
}
147-
148-
function rmdirSync(p, originalEr) {
149-
try {
150-
fs.rmdirSync(p);
151-
} catch (e) {
152-
if (e.code === 'ENOTDIR')
153-
throw originalEr;
154-
if (e.code === 'ENOTEMPTY' || e.code === 'EEXIST' || e.code === 'EPERM') {
155-
const enc = exports.isLinux ? 'buffer' : 'utf8';
156-
fs.readdirSync(p, enc).forEach((f) => {
157-
if (f instanceof Buffer) {
158-
const buf = Buffer.concat([Buffer.from(p), Buffer.from(path.sep), f]);
159-
rimrafSync(buf);
160-
} else {
161-
rimrafSync(path.join(p, f));
162-
}
163-
});
164-
fs.rmdirSync(p);
165-
}
166-
}
167-
}
168-
169-
exports.refreshTmpDir = function() {
170-
rimrafSync(exports.tmpDir);
171-
fs.mkdirSync(exports.tmpDir);
172-
};
173-
174-
if (process.env.TEST_THREAD_ID) {
175-
tmpDirName += `.${process.env.TEST_THREAD_ID}`;
176-
}
177-
exports.tmpDir = path.join(testRoot, tmpDirName);
178-
179117
let opensslCli = null;
180118
let inFreeBSDJail = null;
181119
let localhostIPv4 = null;
@@ -269,7 +207,7 @@ Object.defineProperty(exports, 'hasFipsCrypto', {
269207
});
270208

271209
{
272-
const localRelative = path.relative(process.cwd(), `${exports.tmpDir}/`);
210+
const localRelative = path.relative(process.cwd(), `${tmpdir.path}/`);
273211
const pipePrefix = exports.isWindows ? '\\\\.\\pipe\\' : localRelative;
274212
const pipeName = `node-test.${process.pid}.sock`;
275213
exports.PIPE = path.join(pipePrefix, pipeName);

test/common/tmpdir.js

+67
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
/* eslint-disable required-modules */
2+
'use strict';
3+
4+
const fs = require('fs');
5+
const path = require('path');
6+
7+
function rimrafSync(p) {
8+
let st;
9+
try {
10+
st = fs.lstatSync(p);
11+
} catch (e) {
12+
if (e.code === 'ENOENT')
13+
return;
14+
}
15+
16+
try {
17+
if (st && st.isDirectory())
18+
rmdirSync(p, null);
19+
else
20+
fs.unlinkSync(p);
21+
} catch (e) {
22+
if (e.code === 'ENOENT')
23+
return;
24+
if (e.code === 'EPERM')
25+
return rmdirSync(p, e);
26+
if (e.code !== 'EISDIR')
27+
throw e;
28+
rmdirSync(p, e);
29+
}
30+
}
31+
32+
function rmdirSync(p, originalEr) {
33+
try {
34+
fs.rmdirSync(p);
35+
} catch (e) {
36+
if (e.code === 'ENOTDIR')
37+
throw originalEr;
38+
if (e.code === 'ENOTEMPTY' || e.code === 'EEXIST' || e.code === 'EPERM') {
39+
const enc = process.platform === 'linux' ? 'buffer' : 'utf8';
40+
fs.readdirSync(p, enc).forEach((f) => {
41+
if (f instanceof Buffer) {
42+
const buf = Buffer.concat([Buffer.from(p), Buffer.from(path.sep), f]);
43+
rimrafSync(buf);
44+
} else {
45+
rimrafSync(path.join(p, f));
46+
}
47+
});
48+
fs.rmdirSync(p);
49+
}
50+
}
51+
}
52+
53+
const testRoot = process.env.NODE_TEST_DIR ?
54+
fs.realpathSync(process.env.NODE_TEST_DIR) : path.resolve(__dirname, '..');
55+
56+
// Using a `.` prefixed name, which is the convention for "hidden" on POSIX,
57+
// gets tools to ignore it by default or by simple rules, especially eslint.
58+
let tmpdirName = '.tmp';
59+
if (process.env.TEST_THREAD_ID) {
60+
tmpdirName += `.${process.env.TEST_THREAD_ID}`;
61+
}
62+
exports.path = path.join(testRoot, tmpdirName);
63+
64+
exports.refresh = () => {
65+
rimrafSync(exports.path);
66+
fs.mkdirSync(exports.path);
67+
};

test/es-module/test-esm-preserve-symlinks.js

+3-2
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,9 @@ const assert = require('assert');
77
const path = require('path');
88
const fs = require('fs');
99

10-
common.refreshTmpDir();
11-
const tmpDir = common.tmpDir;
10+
const tmpdir = require('../common/tmpdir');
11+
tmpdir.refresh();
12+
const tmpDir = tmpdir.path;
1213

1314
const entry = path.join(tmpDir, 'entry.js');
1415
const real = path.join(tmpDir, 'real.js');

test/es-module/test-esm-symlink.js

+3-2
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,9 @@ const assert = require('assert');
66
const path = require('path');
77
const fs = require('fs');
88

9-
common.refreshTmpDir();
10-
const tmpDir = common.tmpDir;
9+
const tmpdir = require('../common/tmpdir');
10+
tmpdir.refresh();
11+
const tmpDir = tmpdir.path;
1112

1213
const entry = path.join(tmpDir, 'entry.mjs');
1314
const real = path.join(tmpDir, 'index.mjs');

test/known_issues/test-cwd-enoent-file.js

+3-2
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,9 @@ const fs = require('fs');
1717
if (process.argv[2] === 'child') {
1818
// Do nothing.
1919
} else {
20-
common.refreshTmpDir();
21-
const dir = fs.mkdtempSync(`${common.tmpDir}/`);
20+
const tmpdir = require('../common/tmpdir');
21+
tmpdir.refresh();
22+
const dir = fs.mkdtempSync(`${tmpdir.path}/`);
2223
process.chdir(dir);
2324
fs.rmdirSync(dir);
2425
assert.throws(process.cwd,

test/known_issues/test-module-deleted-extensions.js

+4-3
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,15 @@ const common = require('../common');
44
const assert = require('assert');
55
const fs = require('fs');
66
const path = require('path');
7-
const file = path.join(common.tmpDir, 'test-extensions.foo.bar');
7+
const tmpdir = require('../common/tmpdir');
8+
const file = path.join(tmpdir.path, 'test-extensions.foo.bar');
89

9-
common.refreshTmpDir();
10+
tmpdir.refresh();
1011
fs.writeFileSync(file, '', 'utf8');
1112
require.extensions['.foo.bar'] = (module, path) => {};
1213
delete require.extensions['.foo.bar'];
1314
require.extensions['.bar'] = common.mustCall((module, path) => {
1415
assert.strictEqual(module.id, file);
1516
assert.strictEqual(path, file);
1617
});
17-
require(path.join(common.tmpDir, 'test-extensions'));
18+
require(path.join(tmpdir.path, 'test-extensions'));

test/parallel/test-benchmark-fs.js

+4-3
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
'use strict';
22

3-
const common = require('../common');
3+
require('../common');
44
const runBenchmark = require('../common/benchmark');
55

6-
common.refreshTmpDir();
6+
const tmpdir = require('../common/tmpdir');
7+
tmpdir.refresh();
78

89
runBenchmark('fs', [
910
'n=1',
@@ -16,4 +17,4 @@ runBenchmark('fs', [
1617
'statSyncType=fstatSync',
1718
'encodingType=buf',
1819
'filesize=1024'
19-
], { NODE_TMPDIR: common.tmpDir, NODEJS_BENCHMARK_ZERO_ALLOWED: 1 });
20+
], { NODE_TMPDIR: tmpdir.path, NODEJS_BENCHMARK_ZERO_ALLOWED: 1 });

0 commit comments

Comments
 (0)