summaryrefslogtreecommitdiffhomepage
path: root/test/unit
diff options
context:
space:
mode:
authorOisin Canty <o.canty@f5.com>2021-05-12 09:26:55 +0000
committerOisin Canty <o.canty@f5.com>2021-05-12 09:26:55 +0000
commita0c083af208cd9f676bb56762b4e27a3174a773d (patch)
tree77542c99f13352ea9317a27e456ddde8f50ae5ef /test/unit
parent07c6bf165d0e414da3827c7b2aebf5044a7e6093 (diff)
downloadunit-a0c083af208cd9f676bb56762b4e27a3174a773d.tar.gz
unit-a0c083af208cd9f676bb56762b4e27a3174a773d.tar.bz2
Node.js: a shim for overriding "http" and "websocket" modules.
Also added stubs for Server.address() This was done to prevent crashes in some popular frameworks like express Supports both CommonJS and the new ES Modules system syntax e.g: app.js: const http = require('http') app.mjs: import http from "http" Usage on Node 14.16.x and higher: { "type": "external", "processes": {"spare": 0}, "working_directory": '/project', "executable": "/usr/bin/env", "arguments": [ "node", "--loader", "unit-http/require_shim.mjs" "--require", "unit-http/require_shim", "app.js" ] } Usage on Node 14.15.x and lower: { "type": "external", "processes": {"spare": 0}, "working_directory": '/project', "executable": "/usr/bin/env", "arguments": [ "node", "--require", "unit-http/require_shim", "app.js" ] }
Diffstat (limited to 'test/unit')
-rw-r--r--test/unit/applications/lang/node.py21
-rw-r--r--test/unit/check/node.py13
2 files changed, 29 insertions, 5 deletions
diff --git a/test/unit/applications/lang/node.py b/test/unit/applications/lang/node.py
index cc6d06ef..3254f3d4 100644
--- a/test/unit/applications/lang/node.py
+++ b/test/unit/applications/lang/node.py
@@ -7,15 +7,16 @@ from unit.utils import public_dir
class TestApplicationNode(TestApplicationProto):
+ application_type = "node"
+ es_modules = False
+
def prepare_env(self, script):
# copy application
-
shutil.copytree(
option.test_dir + '/node/' + script, option.temp_dir + '/node'
)
# copy modules
-
shutil.copytree(
option.current_dir + '/node/node_modules',
option.temp_dir + '/node/node_modules',
@@ -26,6 +27,19 @@ class TestApplicationNode(TestApplicationProto):
def load(self, script, name='app.js', **kwargs):
self.prepare_env(script)
+ if self.es_modules:
+ arguments = [
+ "node",
+ "--loader",
+ "unit-http/require_shim.mjs",
+ "--require",
+ "unit-http/require_shim",
+ name,
+ ]
+
+ else:
+ arguments = ["node", "--require", "unit-http/require_shim", name]
+
self._load_conf(
{
"listeners": {
@@ -36,7 +50,8 @@ class TestApplicationNode(TestApplicationProto):
"type": "external",
"processes": {"spare": 0},
"working_directory": option.temp_dir + '/node',
- "executable": name,
+ "executable": '/usr/bin/env',
+ "arguments": arguments,
}
},
},
diff --git a/test/unit/check/node.py b/test/unit/check/node.py
index 236ba7b5..e053a749 100644
--- a/test/unit/check/node.py
+++ b/test/unit/check/node.py
@@ -1,6 +1,15 @@
import os
+import subprocess
def check_node(current_dir):
- if os.path.exists(current_dir + '/node/node_modules'):
- return True
+ if not os.path.exists(current_dir + '/node/node_modules'):
+ return None
+
+ try:
+ v_bytes = subprocess.check_output(['/usr/bin/env', 'node', '-v'])
+
+ return [str(v_bytes, 'utf-8').lstrip('v').rstrip()]
+
+ except subprocess.CalledProcessError:
+ return None