-
Notifications
You must be signed in to change notification settings - Fork 30k
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
tools: add eslint rule for hasCrypto checking #13813
Conversation
I love the idea! |
Seems like a good idea to me. Is it possible to tighten up the check though? For example, could it only check |
tools/eslint-rules/crypto-check.js
Outdated
// Rule Definition | ||
//------------------------------------------------------------------------------ | ||
const msg = 'Please add a hasCrypto check to allow this test to be skippped ' + | ||
'when Node is built \'--without-ssl\'.'; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Any reason not to:
\'
-> "
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
No reason, let me fix that too. Thanks!
tools/eslint-rules/crypto-check.js
Outdated
//------------------------------------------------------------------------------ | ||
// Rule Definition | ||
//------------------------------------------------------------------------------ | ||
const msg = 'Please add a hasCrypto check to allow this test to be skippped ' + |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
skippped
-> skipped
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can't believe I missed that, will fix.
I can't take credit for the idea as it was @gibfahn's |
I'll take a look, but one issue is that there are places in tests where the check is not used to skip the test but instead only run part of a test, for example in test-async-wrap-getasyncid.js. |
If those cases are the exception, we could disable the rule for a line. Or, if it makes sense, refactor the test(s). |
tools/eslint-rules/crypto-check.js
Outdated
} | ||
} | ||
|
||
function testHasCryptoCheck(context, node) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nitpick: It seems like this function closes over context
anyway, so I don't think the context
parameter here is needed.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Good point, I'll fix that. Thanks
I'll take a closer look at the usages of it and see if it makes sense to disable or refactor. Thanks |
aae61ff
to
7e03560
Compare
Rebased and refactored CI: https://ci.nodejs.org/job/node-test-pull-request/8843/ |
test/windows-fanned failure looks unrelatedgyp: c:\workspace\node-test-binary-windows\RUN_SUBSET\2\VS_VERSION\vs2015-x86\label\win2008r2\common.gypi not found (cwd: c:\workspace\node-test-binary-windows\RUN_SUBSET\2\VS_VERSION\vs2015-x86\label\win2008r2\test\addons\06_passing_wrapped_objects_around) while reading includes of binding.gyp while trying to load binding.gyp
gyp ERR! configure error
gyp ERR! stack Error: `gyp` failed with exit code: 1
gyp ERR! stack at ChildProcess.onCpExit (c:\workspace\node-test-binary-windows\RUN_SUBSET\2\VS_VERSION\vs2015-x86\label\win2008r2\deps\npm\node_modules\node-gyp\lib\configure.js:336:16)
gyp ERR! stack at emitTwo (events.js:125:13)
gyp ERR! stack at ChildProcess.emit (events.js:213:7)
gyp ERR! stack at Process.ChildProcess._handle.onexit (internal/child_process.js:198:12)
gyp ERR! System Windows_NT 6.1.7601
gyp ERR! command "c:\\workspace\\node-test-binary-windows\\RUN_SUBSET\\2\\VS_VERSION\\vs2015-x86\\label\\win2008r2\\Release\\node.exe" "c:\\workspace\\node-test-binary-windows\\RUN_SUBSET\\2\\VS_VERSION\\vs2015-x86\\label\\win2008r2\\deps\\npm\\node_modules\\node-gyp\\bin\\node-gyp" "rebuild" "--directory=test\\addons\\06_passing_wrapped_objects_around" "--nodedir=c:\\workspace\\node-test-binary-windows\\RUN_SUBSET\\2\\VS_VERSION\\vs2015-x86\\label\\win2008r2"
gyp ERR! cwd c:\workspace\node-test-binary-windows\RUN_SUBSET\2\VS_VERSION\vs2015-x86\label\win2008r2\test\addons\06_passing_wrapped_objects_around
gyp ERR! node -v v9.0.0-pre
gyp ERR! node-gyp -v v3.6.2
gyp ERR! not ok
c:\workspace\node-test-binary-windows\RUN_SUBSET\2\VS_VERSION\vs2015-x86\label\win2008r2>TASKKILL /F /IM node.exe /T || TRUE
ERROR: The process "node.exe" not found.
c:\workspace\node-test-binary-windows\RUN_SUBSET\2\VS_VERSION\vs2015-x86\label\win2008r2>TASKKILL /F /IM cctest.exe /T || TRUE
ERROR: The process "cctest.exe" not found.
c:\workspace\node-test-binary-windows\RUN_SUBSET\2\VS_VERSION\vs2015-x86\label\win2008r2>TASKKILL /F /IM run-tests.exe /T || TRUE
ERROR: The process "run-tests.exe" not found.
c:\workspace\node-test-binary-windows\RUN_SUBSET\2\VS_VERSION\vs2015-x86\label\win2008r2>TASKKILL /F /IM yes.exe /T || TRUE
ERROR: The process "yes.exe" not found.
c:\workspace\node-test-binary-windows\RUN_SUBSET\2\VS_VERSION\vs2015-x86\label\win2008r2>rm -rfv test/tmp* || true
c:\workspace\node-test-binary-windows\RUN_SUBSET\2\VS_VERSION\vs2015-x86\label\win2008r2>rm -vf ../test.tap || true
c:\workspace\node-test-binary-windows\RUN_SUBSET\2\VS_VERSION\vs2015-x86\label\win2008r2>mv test.tap ../test.tap || true
mv: cannot stat 'test.tap': No such file or directory
c:\workspace\node-test-binary-windows\RUN_SUBSET\2\VS_VERSION\vs2015-x86\label\win2008r2>git clean -fdx || true
fatal: Not a git repository (or any of the parent directories): .git
c:\workspace\node-test-binary-windows\RUN_SUBSET\2\VS_VERSION\vs2015-x86\label\win2008r2>git reset --hard || true
fatal: Not a git repository (or any of the parent directories): .git
c:\workspace\node-test-binary-windows\RUN_SUBSET\2\VS_VERSION\vs2015-x86\label\win2008r2>mv ../test.tap test.tap || true
mv: cannot stat '../test.tap': No such file or directory
c:\workspace\node-test-binary-windows\RUN_SUBSET\2\VS_VERSION\vs2015-x86\label\win2008r2>exit /b 1
Build step 'Execute Windows batch command' marked build as failure
TAP Reports Processing: START
Looking for TAP results report in workspace using pattern: test.tap
Did not find any matching files. Setting build result to FAILURE.
Checking ^not ok
Jenkins Text Finder: File set 'test.tap' is empty
Notifying upstream projects of job completion
Finished: FAILURE |
@cjihrig I've updated this now with your suggestions. Would you be able to take a look and see if this is what you had in mind? |
This is getting closer. Ideally, I was hoping to have a single rule that could be parameterized, and it seems like you're really close there. I'm also curious why a test like |
Ah good point, let me double check that. |
7e03560
to
d48b968
Compare
I'll take another look. I see some similarity between the inspector and crypto rule but not enough to be parameterized fully. For crypto we can check and verify that we are doing it in an if statement and that it contains a skip as you suggested. But for inspector this would simply be a call to |
d48b968
to
c12d6d4
Compare
After reviewing #14021 I saw there is allot of |
There are a few cases where requiring crypto but not skipping the whole test might be appropriate. One example is a test that checks command line options and I think it makes sense for it to skip only the crypto related options and test the others. |
So we could have an equivalent to |
215d463
to
3c2db1a
Compare
test/freebsd failure looks unrelatednot ok 680 parallel/test-http-server-keep-alive-timeout-slow-client-headers
---
duration_ms: 1.464
severity: fail
stack: |-
events.js:182
throw er; // Unhandled 'error' event
^
Error: This socket has been ended by the other party
at Socket.writeAfterFIN [as write] (net.js:356:12)
at Timeout.setTimeout [as _onTimeout] (/usr/home/iojs/build/workspace/node-test-commit-freebsd/nodes/freebsd10-64/test/parallel/test-http-server-keep-alive-timeout-slow-client-headers.js:39:14)
at ontimeout (timers.js:488:11)
at tryOnTimeout (timers.js:323:5)
at Timer.listOnTimeout (timers.js:283:5) |
3c2db1a
to
733e3d8
Compare
CI: https://ci.nodejs.org/job/node-test-pull-request/9542/ (expecting the linter to fail) |
733e3d8
to
66a5501
Compare
The motivation for this commit is to pick up early on missing checks for crypto support (when Node is built --without-ssl).
There are currently usages of common.hasCrypto which are not just for detecting if crypto support is available and then skip the test in question. For these case we still want to have a lint error generated which can then be disabled using an ESLint comment.
The motivation for this commit is to pick up early on missing checks for inspector support (when Node is built --without-inspector).
66a5501
to
11dc3d0
Compare
Could @jasnell and @not-an-aardvark approve again? I think this could land right after. |
Still LGTM but a fresh CI before landing would be appreciated |
LGTM |
The motivation for this commit is to pick up early on missing checks for crypto support (when Node is built --without-ssl). There are currently usages of common.hasCrypto which are not just for detecting if crypto support is available and then skip the test in question. For these case we still want to have a lint error generated which can then be disabled using an ESLint comment. PR-URL: #13813 Reviewed-By: James M Snell <[email protected]> Reviewed-By: Teddy Katz <[email protected]>
The motivation for this commit is to pick up early on missing checks for inspector support (when Node is built --without-inspector). PR-URL: #13813 Reviewed-By: James M Snell <[email protected]> Reviewed-By: Teddy Katz <[email protected]>
Thanks everyone! |
The motivation for this commit is to pick up early on missing checks for crypto support (when Node is built --without-ssl). There are currently usages of common.hasCrypto which are not just for detecting if crypto support is available and then skip the test in question. For these case we still want to have a lint error generated which can then be disabled using an ESLint comment. PR-URL: nodejs/node#13813 Reviewed-By: James M Snell <[email protected]> Reviewed-By: Teddy Katz <[email protected]>
The motivation for this commit is to pick up early on missing checks for inspector support (when Node is built --without-inspector). PR-URL: nodejs/node#13813 Reviewed-By: James M Snell <[email protected]> Reviewed-By: Teddy Katz <[email protected]>
The motivation for this commit is to pick up early on missing checks for crypto support (when Node is built --without-ssl). There are currently usages of common.hasCrypto which are not just for detecting if crypto support is available and then skip the test in question. For these case we still want to have a lint error generated which can then be disabled using an ESLint comment. PR-URL: #13813 Reviewed-By: James M Snell <[email protected]> Reviewed-By: Teddy Katz <[email protected]>
The motivation for this commit is to pick up early on missing checks for inspector support (when Node is built --without-inspector). PR-URL: #13813 Reviewed-By: James M Snell <[email protected]> Reviewed-By: Teddy Katz <[email protected]>
The motivation for this commit is to pick up early on missing checks for crypto support (when Node is built --without-ssl). There are currently usages of common.hasCrypto which are not just for detecting if crypto support is available and then skip the test in question. For these case we still want to have a lint error generated which can then be disabled using an ESLint comment. PR-URL: #13813 Reviewed-By: James M Snell <[email protected]> Reviewed-By: Teddy Katz <[email protected]>
The motivation for this commit is to pick up early on missing checks for inspector support (when Node is built --without-inspector). PR-URL: #13813 Reviewed-By: James M Snell <[email protected]> Reviewed-By: Teddy Katz <[email protected]>
Should this be backported to |
The motivation for this commit is to pick up early on missing checks for
crypto support (when Node is built --without-ssl).
Checklist
make -j4 test
(UNIX), orvcbuild test
(Windows) passesAffected core subsystem(s)
tools