Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

test: fix test-debug-port-numbers on OS X #7046

Merged
merged 1 commit into from
May 30, 2016

Conversation

santigimeno
Copy link
Member

@santigimeno santigimeno commented May 29, 2016

Checklist
  • tests and code linting passes
  • the commit message follows commit guidelines
Affected core subsystem(s)

test

Description of change

According to kill(2), kill returns EPERM error if when signalling a
process group any of the members could not be signaled.

Refs: #7037

@nodejs-github-bot nodejs-github-bot added the test Issues and PRs related to the tests. label May 29, 2016
@santigimeno
Copy link
Member Author

This test was failing in OS X https://ci.nodejs.org/job/node-test-commit-osx/3581/nodes=osx1010/:

not ok 191 parallel/test-debug-port-numbers
# 
# assert.js:90
#   throw new assert.AssertionError({
#   ^
# AssertionError: 'EPERM' === 'ESRCH'
#     at kill (/Users/iojs/build/workspace/node-test-commit-osx/nodes/osx1010/test/parallel/test-debug-port-numbers.js:47:12)
#     at update (/Users/iojs/build/workspace/node-test-commit-osx/nodes/osx1010/test/parallel/test-debug-port-numbers.js:37:7)
#     at Socket.<anonymous> (/Users/iojs/build/workspace/node-test-commit-osx/nodes/osx1010/test/parallel/test-debug-port-numbers.js:21:65)
#     at emitOne (events.js:101:20)
#     at Socket.emit (events.js:188:7)
#     at readableAddChunk (_stream_readable.js:172:18)
#     at Socket.Readable.push (_stream_readable.js:130:10)
#     at Pipe.onread (net.js:542:20)
# debug> debug> debug> debug> �< Debugger listening on port 12347
# debug> �connecting to 127.0.0.1:12347 ... ok
# debug> �< Debugger listening on port 12348
# debug> �connecting to 127.0.0.1:12348 ...�< Debugger listening on port 12346
# debug> �connecting to 127.0.0.1:12346 ...�< Debugger listening on port 12349
# debug> �connecting to 127.0.0.1:12349 ... ok
# debug>  ok
# debug>  ok
# debug> �break in test/parallel/test-debug-port-numbers.js:1
# �> 1 'use strict';
# �  2 
# �  3 const common = require('../common');
# debug> �break in test/parallel/test-debug-port-numbers.js:1
# �> 1 'use strict';
# �  2 
# �  3 const common = require('../common');
# debug> �break in test/parallel/test-debug-port-numbers.js:1
# �> 1 'use strict';
# �  2 
# �  3 const common = require('../common');
# �break in test/parallel/test-debug-port-numbers.js:1

@santigimeno
Copy link
Member Author

Stress test without this change fails: https://ci.nodejs.org/job/node-stress-single-test/749.
Stress test with this change passes: https://ci.nodejs.org/job/node-stress-single-test/750.

if (process.platform === 'darwin')
assert.strictEqual(e.code, 'EPERM'); // Already gone.
else
assert.strictEqual(e.code, 'ESRCH'); // Already gone.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think the logic should be ESRCH || EPERM iff OS X, and you might as well drop the 'iff OS X' part in that case because the BSDs probably exhibit the same behavior.

I checked the xnu and libc sources and the error code seems to depend on whether POSIX compatibility mode is enabled in the libc wrapper: it returns EPERM if it is, ESRCH otherwise. That would explain why I don't see EPERM with 10.8.

@cjihrig
Copy link
Contributor

cjihrig commented May 29, 2016

LGTM. I think @bnoordhuis suggestion makes sense. One question though:

According to kill(2), kill returns EPERM error if when signalling a process group any of the members could not be signaled.

Does that mean that processes may be left behind?

@bnoordhuis
Copy link
Member

@cjihrig My reading of the xnu sources is that EPERM or ESRCH are only returned when the process group is gone (i.e., empty.)

@santigimeno
Copy link
Member Author

@bnoordhuis, from the FreeBSD 10.3 man: [EPERM] The sending process does not have permission to send sig to the receiving process. So I'm not sure if it applies to FreeBSD. I can add it anyway.

@bnoordhuis
Copy link
Member

I think xnu inherits most of its signal handling logic from FreeBSD but it's possible that the POSIX compatibility stuff is a later addition. I don't think allowing EPERM on other platforms will hurt, at any rate.

@santigimeno
Copy link
Member Author

Yes, it makes sense. So just to be sure... ESRCH || EPERM on OS X and FreeBSD right?

@bnoordhuis
Copy link
Member

I'd do it unconditionally, i.e., no platform-specific checks.

@santigimeno
Copy link
Member Author

PR updated per your comments. Thanks!

@santigimeno
Copy link
Member Author

assert.strictEqual(e.code, 'ESRCH'); // Already gone.
// Generally ESRCH is returned when the process group is already gone. On
// some platforms such as OS X it may be EPERM though.
assert.ok(e.code, 'EPERM' || 'ESRCH');
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think this is right. 'EPERM' || 'ESRCH' will always evaluate to EPERM

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also, assert.ok() just asserts that e.code is truthy.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You're right. I was fixing that :(

@santigimeno
Copy link
Member Author

Updated

@cjihrig
Copy link
Contributor

cjihrig commented May 29, 2016

LGTM

@santigimeno
Copy link
Member Author

@bnoordhuis
Copy link
Member

LGTM

@mscdex mscdex added the macos Issues and PRs related to the macOS platform / OSX. label May 29, 2016
According to kill(2), kill returns `EPERM` error if when signalling a
process group any of the members could not be signalled.

PR-URL: nodejs#7046
Reviewed-By: Colin Ihrig <[email protected]>
Reviewed-By: Ben Noordhuis <[email protected]>
@santigimeno
Copy link
Member Author

CI: https://ci.nodejs.org/job/node-test-commit/3579/. All green except some unrelated failures in some ARM bots. Landing

@santigimeno santigimeno merged commit 6e148a3 into nodejs:master May 30, 2016
@santigimeno santigimeno deleted the debug_port branch May 30, 2016 08:21
@santigimeno
Copy link
Member Author

Landed in 6e148a3. Thanks!

Fishrock123 pushed a commit to Fishrock123/node that referenced this pull request May 30, 2016
According to kill(2), kill returns `EPERM` error if when signalling a
process group any of the members could not be signalled.

PR-URL: nodejs#7046
Reviewed-By: Colin Ihrig <[email protected]>
Reviewed-By: Ben Noordhuis <[email protected]>
rvagg pushed a commit that referenced this pull request Jun 2, 2016
According to kill(2), kill returns `EPERM` error if when signalling a
process group any of the members could not be signalled.

PR-URL: #7046
Reviewed-By: Colin Ihrig <[email protected]>
Reviewed-By: Ben Noordhuis <[email protected]>
MylesBorins pushed a commit that referenced this pull request Jul 11, 2016
According to kill(2), kill returns `EPERM` error if when signalling a
process group any of the members could not be signalled.

PR-URL: #7046
Reviewed-By: Colin Ihrig <[email protected]>
Reviewed-By: Ben Noordhuis <[email protected]>
MylesBorins pushed a commit that referenced this pull request Jul 12, 2016
According to kill(2), kill returns `EPERM` error if when signalling a
process group any of the members could not be signalled.

PR-URL: #7046
Reviewed-By: Colin Ihrig <[email protected]>
Reviewed-By: Ben Noordhuis <[email protected]>
MylesBorins pushed a commit that referenced this pull request Jul 12, 2016
According to kill(2), kill returns `EPERM` error if when signalling a
process group any of the members could not be signalled.

PR-URL: #7046
Reviewed-By: Colin Ihrig <[email protected]>
Reviewed-By: Ben Noordhuis <[email protected]>
@MylesBorins MylesBorins mentioned this pull request Jul 12, 2016
MylesBorins pushed a commit that referenced this pull request Jul 14, 2016
According to kill(2), kill returns `EPERM` error if when signalling a
process group any of the members could not be signalled.

PR-URL: #7046
Reviewed-By: Colin Ihrig <[email protected]>
Reviewed-By: Ben Noordhuis <[email protected]>
MylesBorins pushed a commit that referenced this pull request Jul 14, 2016
According to kill(2), kill returns `EPERM` error if when signalling a
process group any of the members could not be signalled.

PR-URL: #7046
Reviewed-By: Colin Ihrig <[email protected]>
Reviewed-By: Ben Noordhuis <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
macos Issues and PRs related to the macOS platform / OSX. test Issues and PRs related to the tests.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants