test: try to stabalize test-child-process-fork-exec-path.js · nodejs/node@4f8b497 (original) (raw)

`@@ -21,45 +21,41 @@

`

21

21

``

22

22

`'use strict';

`

23

23

`const common = require('../common');

`

``

24

+

``

25

`` +

// Test that fork() respects the execPath option.

``

``

26

+

``

27

`+

const tmpdir = require('../common/tmpdir');

`

``

28

`+

const { addLibraryPath } = require('../common/shared-lib-util');

`

24

29

`const assert = require('assert');

`

25

``

`-

const fs = require('fs');

`

26

``

`-

const { COPYFILE_FICLONE } = fs.constants;

`

27

30

`const path = require('path');

`

28

``

`-

const tmpdir = require('../common/tmpdir');

`

``

31

`+

const fs = require('fs');

`

``

32

`+

const { fork } = require('child_process');

`

``

33

+

29

34

`const msg = { test: 'this' };

`

30

35

`const nodePath = process.execPath;

`

31

36

`const copyPath = path.join(tmpdir.path, 'node-copy.exe');

`

32

``

`-

const { addLibraryPath } = require('../common/shared-lib-util');

`

33

37

``

34

38

`addLibraryPath(process.env);

`

35

39

``

``

40

`+

// Child

`

36

41

`if (process.env.FORK) {

`

37

``

`-

assert(process.send);

`

38

``

`-

assert.strictEqual(process.argv[0], copyPath);

`

``

42

`+

assert.strictEqual(process.execPath, copyPath);

`

``

43

`+

assert.ok(process.send);

`

39

44

`process.send(msg);

`

40

``

`-

process.exit();

`

41

``

`-

} else {

`

42

``

`-

tmpdir.refresh();

`

43

``

`-

try {

`

44

``

`-

fs.unlinkSync(copyPath);

`

45

``

`-

} catch (e) {

`

46

``

`-

if (e.code !== 'ENOENT') throw e;

`

47

``

`-

}

`

48

``

`-

fs.copyFileSync(nodePath, copyPath, COPYFILE_FICLONE);

`

49

``

`-

fs.chmodSync(copyPath, '0755');

`

50

``

-

51

``

`-

// slow but simple

`

52

``

`-

const envCopy = JSON.parse(JSON.stringify(process.env));

`

53

``

`-

envCopy.FORK = 'true';

`

54

``

`-

const child = require('child_process').fork(__filename, {

`

55

``

`-

execPath: copyPath,

`

56

``

`-

env: envCopy

`

57

``

`-

});

`

58

``

`-

child.on('message', common.mustCall(function(recv) {

`

59

``

`-

assert.deepStrictEqual(msg, recv);

`

60

``

`-

}));

`

61

``

`-

child.on('exit', common.mustCall(function(code) {

`

62

``

`-

fs.unlinkSync(copyPath);

`

63

``

`-

assert.strictEqual(code, 0);

`

64

``

`-

}));

`

``

45

`+

return process.exit();

`

65

46

`}

`

``

47

+

``

48

`+

// Parent

`

``

49

`+

tmpdir.refresh();

`

``

50

`+

assert.strictEqual(fs.existsSync(copyPath), false);

`

``

51

`+

fs.copyFileSync(nodePath, copyPath, fs.constants.COPYFILE_FICLONE);

`

``

52

`+

fs.chmodSync(copyPath, '0755');

`

``

53

+

``

54

`+

const envCopy = Object.assign({}, process.env, { 'FORK': 'true' });

`

``

55

`+

const child = fork(__filename, { execPath: copyPath, env: envCopy });

`

``

56

`+

child.on('message', common.mustCall(function(recv) {

`

``

57

`+

assert.deepStrictEqual(recv, msg);

`

``

58

`+

}));

`

``

59

`+

child.on('exit', common.mustCall(function(code) {

`

``

60

`+

assert.strictEqual(code, 0);

`

``

61

`+

}));

`