mirror of
https://github.com/nodejs/node.git
synced 2024-11-21 10:59:27 +00:00
test: test crypto.setEngine()
using an actual engine
Signed-off-by: Darshan Sen <darshan.sen@postman.com> PR-URL: https://github.com/nodejs/node/pull/40481 Reviewed-By: James M Snell <jasnell@gmail.com>
This commit is contained in:
parent
babd73ce25
commit
ff536fa13e
1
Makefile
1
Makefile
@ -1327,6 +1327,7 @@ LINT_CPP_FILES = $(filter-out $(LINT_CPP_EXCLUDE), $(wildcard \
|
||||
test/cctest/*.h \
|
||||
test/embedding/*.cc \
|
||||
test/embedding/*.h \
|
||||
test/fixtures/*.c \
|
||||
test/js-native-api/*/*.cc \
|
||||
test/js-native-api/*/*.h \
|
||||
test/node-api/*/*.cc \
|
||||
|
26
node.gyp
26
node.gyp
@ -1473,5 +1473,31 @@
|
||||
},
|
||||
]
|
||||
}], # end aix section
|
||||
# TODO(RaisinTen): Enable this to build on other platforms as well.
|
||||
['(OS=="mac" or (OS=="linux" and target_arch=="x64")) and \
|
||||
node_use_openssl=="true"', {
|
||||
'targets': [
|
||||
{
|
||||
'target_name': 'test_crypto_engine',
|
||||
'type': 'shared_library',
|
||||
'include_dirs': ['deps/openssl/openssl/include'],
|
||||
'sources': ['test/fixtures/test_crypto_engine.c'],
|
||||
'conditions': [
|
||||
['OS=="mac"', {
|
||||
'dependencies': ['deps/openssl/openssl.gyp:openssl'],
|
||||
'xcode_settings': {
|
||||
'OTHER_CFLAGS': ['-Wno-deprecated-declarations'],
|
||||
},
|
||||
}],
|
||||
['OS=="linux" and target_arch=="x64"', {
|
||||
'cflags': [
|
||||
'-Wno-deprecated-declarations',
|
||||
'-fPIC',
|
||||
],
|
||||
}],
|
||||
],
|
||||
}, # test_crypto_engine
|
||||
], # end targets
|
||||
}], # end node_use_openssl section
|
||||
], # end conditions block
|
||||
}
|
||||
|
20
test/fixtures/test_crypto_engine.c
vendored
Normal file
20
test/fixtures/test_crypto_engine.c
vendored
Normal file
@ -0,0 +1,20 @@
|
||||
#include <openssl/engine.h>
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
int bind(ENGINE* e, const char* id) {
|
||||
if (ENGINE_set_id(e, "libtest_crypto_engine") == 0) {
|
||||
fprintf(stderr, "ENGINE_set_id() failed.\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (ENGINE_set_name(e, "A test crypto engine") == 0) {
|
||||
fprintf(stderr, "ENGINE_set_name() failed.\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
IMPLEMENT_DYNAMIC_BIND_FN(bind)
|
||||
IMPLEMENT_DYNAMIC_CHECK_FN()
|
@ -1,43 +1,60 @@
|
||||
'use strict';
|
||||
const common = require('../common');
|
||||
if (!common.hasCrypto) common.skip('missing crypto');
|
||||
|
||||
if (!common.hasCrypto)
|
||||
common.skip('missing crypto');
|
||||
// This tests crypto.setEngine().
|
||||
|
||||
const assert = require('assert');
|
||||
const crypto = require('crypto');
|
||||
const invalidEngineName = 'xxx';
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
|
||||
assert.throws(
|
||||
() => crypto.setEngine(true),
|
||||
{
|
||||
code: 'ERR_INVALID_ARG_TYPE',
|
||||
name: 'TypeError',
|
||||
message: 'The "id" argument must be of type string. Received type boolean' +
|
||||
' (true)'
|
||||
});
|
||||
assert.throws(() => crypto.setEngine(true), /ERR_INVALID_ARG_TYPE/);
|
||||
assert.throws(() => crypto.setEngine('/path/to/engine', 'notANumber'),
|
||||
/ERR_INVALID_ARG_TYPE/);
|
||||
|
||||
assert.throws(
|
||||
() => crypto.setEngine('/path/to/engine', 'notANumber'),
|
||||
{
|
||||
code: 'ERR_INVALID_ARG_TYPE',
|
||||
name: 'TypeError',
|
||||
message: 'The "flags" argument must be of type number. Received type' +
|
||||
" string ('notANumber')"
|
||||
});
|
||||
{
|
||||
const invalidEngineName = 'xxx';
|
||||
assert.throws(() => crypto.setEngine(invalidEngineName),
|
||||
/ERR_CRYPTO_ENGINE_UNKNOWN/);
|
||||
assert.throws(() => crypto.setEngine(invalidEngineName,
|
||||
crypto.constants.ENGINE_METHOD_RSA),
|
||||
/ERR_CRYPTO_ENGINE_UNKNOWN/);
|
||||
}
|
||||
|
||||
assert.throws(
|
||||
() => crypto.setEngine(invalidEngineName),
|
||||
{
|
||||
code: 'ERR_CRYPTO_ENGINE_UNKNOWN',
|
||||
name: 'Error',
|
||||
message: `Engine "${invalidEngineName}" was not found`
|
||||
});
|
||||
crypto.setEngine('dynamic');
|
||||
crypto.setEngine('dynamic');
|
||||
|
||||
assert.throws(
|
||||
() => crypto.setEngine(invalidEngineName, crypto.constants.ENGINE_METHOD_RSA),
|
||||
{
|
||||
code: 'ERR_CRYPTO_ENGINE_UNKNOWN',
|
||||
name: 'Error',
|
||||
message: `Engine "${invalidEngineName}" was not found`
|
||||
});
|
||||
crypto.setEngine('dynamic', crypto.constants.ENGINE_METHOD_RSA);
|
||||
crypto.setEngine('dynamic', crypto.constants.ENGINE_METHOD_RSA);
|
||||
|
||||
{
|
||||
const engineName = 'test_crypto_engine';
|
||||
let engineLib;
|
||||
if (common.isOSX)
|
||||
engineLib = `lib${engineName}.dylib`;
|
||||
else if (common.isLinux && process.arch === 'x64')
|
||||
engineLib = `lib${engineName}.so`;
|
||||
|
||||
if (engineLib !== undefined) {
|
||||
const execDir = path.dirname(process.execPath);
|
||||
const enginePath = path.join(execDir, engineLib);
|
||||
const engineId = path.parse(engineLib).name;
|
||||
|
||||
fs.accessSync(enginePath);
|
||||
|
||||
crypto.setEngine(enginePath);
|
||||
crypto.setEngine(enginePath);
|
||||
|
||||
crypto.setEngine(enginePath, crypto.constants.ENGINE_METHOD_RSA);
|
||||
crypto.setEngine(enginePath, crypto.constants.ENGINE_METHOD_RSA);
|
||||
|
||||
process.env.OPENSSL_ENGINES = execDir;
|
||||
|
||||
crypto.setEngine(engineId);
|
||||
crypto.setEngine(engineId);
|
||||
|
||||
crypto.setEngine(engineId, crypto.constants.ENGINE_METHOD_RSA);
|
||||
crypto.setEngine(engineId, crypto.constants.ENGINE_METHOD_RSA);
|
||||
}
|
||||
}
|
||||
|
@ -5,7 +5,7 @@ if (typeof require === 'undefined') {
|
||||
}
|
||||
|
||||
const path = require('path');
|
||||
const { Worker } = require('worker_threads');
|
||||
const { Worker, SHARE_ENV } = require('worker_threads');
|
||||
|
||||
new Worker(path.resolve(process.cwd(), process.argv[2]))
|
||||
new Worker(path.resolve(process.cwd(), process.argv[2]), { env: SHARE_ENV })
|
||||
.on('exit', (code) => process.exitCode = code);
|
||||
|
Loading…
Reference in New Issue
Block a user