Skip to content

Commit

Permalink
test: move test-crypto-engine to addon
Browse files Browse the repository at this point in the history
Fixes: nodejs#41633
Fixes: nodejs#40958

- move test-crypto-engine so that dummy engine
  is only built if tests are run

Signed-off-by: Michael Dawson <mdawson@devrus.com>

PR-URL: nodejs#41830
Reviewed-By: Tobias Nießen <tniessen@tnie.de>
Reviewed-By: Darshan Sen <raisinten@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Richard Lau <rlau@redhat.com>
  • Loading branch information
mhdawson authored and bengl committed Feb 21, 2022
1 parent 182e6b9 commit 76f0f1c
Show file tree
Hide file tree
Showing 7 changed files with 143 additions and 111 deletions.
26 changes: 0 additions & 26 deletions node.gyp
Original file line number Diff line number Diff line change
Expand Up @@ -1475,31 +1475,5 @@
},
]
}], # 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
}
37 changes: 37 additions & 0 deletions test/addons/openssl-test-engine/binding.gyp
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
{
'targets': [
{
'target_name': 'testsetengine',
'type': 'none',
'includes': ['../common.gypi'],
'conditions': [
['(OS=="mac" or OS=="linux") and '
'node_use_openssl=="true" and '
'node_shared=="false" and '
'node_shared_openssl=="false"', {
'type': 'shared_library',
'sources': [ 'testsetengine.cc' ],
'product_extension': 'engine',
'include_dirs': ['../../../deps/openssl/openssl/include'],
'conditions': [
['OS=="mac"', {
'xcode_settings': {
'OTHER_CFLAGS': ['-Wno-deprecated-declarations'],
},
'link_settings': {
'libraries': [
'../../../../out/<(PRODUCT_DIR)/<(openssl_product)'
]
},
}],
['OS=="linux"', {
'cflags': [
'-Wno-deprecated-declarations',
],
}],
],
}],
],
}
]
}
60 changes: 60 additions & 0 deletions test/addons/openssl-test-engine/test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
'use strict';
const common = require('../../common');

// This tests crypto.setEngine().

if (!common.hasCrypto)
common.skip('missing crypto');

const assert = require('assert');
const crypto = require('crypto');
const fs = require('fs');
const path = require('path');


assert.throws(() => crypto.setEngine(true), /ERR_INVALID_ARG_TYPE/);
assert.throws(() => crypto.setEngine('/path/to/engine', 'notANumber'),
/ERR_INVALID_ARG_TYPE/);

{
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/);
}

crypto.setEngine('dynamic');
crypto.setEngine('dynamic');

crypto.setEngine('dynamic', crypto.constants.ENGINE_METHOD_RSA);
crypto.setEngine('dynamic', crypto.constants.ENGINE_METHOD_RSA);

const engine = path.join(__dirname,
`/build/${common.buildType}/testsetengine.engine`);

if (!fs.existsSync(engine))
common.skip('no engine');

{
const engineId = path.parse(engine).name;
const execDir = path.parse(engine).dir;

crypto.setEngine(engine);
// OpenSSL 3.0.1 and 1.1.1m now throw errors if an engine is loaded again
// with a duplicate absolute path.
// TODO(richardlau): figure out why this fails on macOS but not Linux.
// crypto.setEngine(engine);

// crypto.setEngine(engine, crypto.constants.ENGINE_METHOD_RSA);
// crypto.setEngine(engine, 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);
}
44 changes: 44 additions & 0 deletions test/addons/openssl-test-engine/testsetengine.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
#include <openssl/engine.h>

#ifndef ENGINE_CMD_BASE
# error did not get engine.h
#endif

#define TEST_ENGINE_ID "testsetengine"
#define TEST_ENGINE_NAME "dummy test engine"

#ifdef _WIN32
# define DEFAULT_VISIBILITY __declspec(dllexport)
#else
# define DEFAULT_VISIBILITY __attribute__((visibility("default")))
#endif

namespace {

int EngineInit(ENGINE* engine) {
return 1;
}

int EngineFinish(ENGINE* engine) {
return 1;
}

int EngineDestroy(ENGINE* engine) {
return 1;
}

int bind_fn(ENGINE* engine, const char* id) {
ENGINE_set_id(engine, TEST_ENGINE_ID);
ENGINE_set_name(engine, TEST_ENGINE_NAME);
ENGINE_set_init_function(engine, EngineInit);
ENGINE_set_finish_function(engine, EngineFinish);
ENGINE_set_destroy_function(engine, EngineDestroy);
return 1;
}

extern "C" {
DEFAULT_VISIBILITY IMPLEMENT_DYNAMIC_CHECK_FN();
DEFAULT_VISIBILITY IMPLEMENT_DYNAMIC_BIND_FN(bind_fn);
}

} // anonymous namespace
20 changes: 0 additions & 20 deletions test/fixtures/test_crypto_engine.c

This file was deleted.

63 changes: 0 additions & 63 deletions test/parallel/test-crypto-engine.js

This file was deleted.

4 changes: 2 additions & 2 deletions tools/run-worker.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ if (typeof require === 'undefined') {
}

const path = require('path');
const { Worker, SHARE_ENV } = require('worker_threads');
const { Worker } = require('worker_threads');

new Worker(path.resolve(process.cwd(), process.argv[2]), { env: SHARE_ENV })
new Worker(path.resolve(process.cwd(), process.argv[2]))
.on('exit', (code) => process.exitCode = code);

0 comments on commit 76f0f1c

Please sign in to comment.