@@ -2,6 +2,7 @@ var path = require('path');
22var fs = require ( 'fs' ) ;
33var assert = require ( 'assert' ) ;
44var os = require ( 'os' ) ;
5+ var child_process = require ( 'child_process' ) ;
56
67exports . testDir = path . dirname ( __filename ) ;
78exports . fixturesDir = path . join ( exports . testDir , 'fixtures' ) ;
@@ -18,10 +19,33 @@ if (process.env.TEST_THREAD_ID) {
1819}
1920exports . tmpDir = path . join ( exports . testDir , exports . tmpDirName ) ;
2021
21- exports . opensslCli = path . join ( path . dirname ( process . execPath ) , 'openssl-cli' ) ;
22+ var opensslCli = null ;
23+
24+ // opensslCli defined lazily to reduce overhead of spawnSync
25+ Object . defineProperty ( exports , 'opensslCli' , { get : function ( ) {
26+ if ( opensslCli !== null ) return opensslCli ;
27+
28+ if ( process . config . variables . node_shared_openssl ) {
29+ // use external command
30+ opensslCli = 'openssl' ;
31+ } else {
32+ // use command built from sources included in io.js repository
33+ opensslCli = path . join ( path . dirname ( process . execPath ) , 'openssl-cli' ) ;
34+ }
35+
36+ if ( process . platform === 'win32' ) opensslCli += '.exe' ;
37+
38+ var openssl_cmd = child_process . spawnSync ( opensslCli , [ 'version' ] ) ;
39+ if ( openssl_cmd . status !== 0 || openssl_cmd . error !== undefined ) {
40+ // openssl command cannot be executed
41+ opensslCli = false ;
42+ }
43+ return opensslCli ;
44+ } , enumerable : true } ) ;
45+
46+
2247if ( process . platform === 'win32' ) {
2348 exports . PIPE = '\\\\.\\pipe\\libuv-test' ;
24- exports . opensslCli += '.exe' ;
2549} else {
2650 exports . PIPE = exports . tmpDir + '/test.sock' ;
2751}
@@ -37,12 +61,6 @@ if (process.env.NODE_COMMON_PIPE) {
3761 }
3862}
3963
40- try {
41- fs . accessSync ( exports . opensslCli ) ;
42- } catch ( err ) {
43- exports . opensslCli = false ;
44- }
45-
4664if ( process . platform === 'win32' ) {
4765 exports . faketimeCli = false ;
4866} else {
0 commit comments