changeset 1863:b550845e500b

Use venv for test_aslr Otherwise we can't find the psutil dependency
author Matt Johnston <matt@ucc.asn.au>
date Sun, 30 Jan 2022 13:37:20 +0800
parents 6f265a35159a
children 49ce974c3215
files test/Makefile.in test/test_aslr.py test/test_dropbear.py
diffstat 3 files changed, 23 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/test/Makefile.in	Sun Jan 30 10:23:06 2022 +0800
+++ b/test/Makefile.in	Sun Jan 30 13:37:20 2022 +0800
@@ -1,12 +1,14 @@
 [email protected]@
 
+SHELL=bash
+
 all: test
 
 test: venv/bin/pytest fakekey
-	./venv/bin/pytest --hostkey=fakekey --dbclient=../dbclient --dropbear=../dropbear $(srcdir)
+	(source ./venv/bin/activate; pytest --hostkey=fakekey --dbclient=../dbclient --dropbear=../dropbear $(srcdir) )
 
 one: venv/bin/pytest fakekey
-	./venv/bin/pytest --hostkey=fakekey --dbclient=../dbclient --dropbear=../dropbear $(srcdir) -k exit
+	(source ./venv/bin/activate; pytest --hostkey=fakekey --dbclient=../dbclient --dropbear=../dropbear $(srcdir) -k exit)
 
 fakekey:
 	../dropbearkey -t ecdsa -f [email protected]
--- a/test/test_aslr.py	Sun Jan 30 10:23:06 2022 +0800
+++ b/test/test_aslr.py	Sun Jan 30 13:37:20 2022 +0800
@@ -8,7 +8,11 @@
 	Tests that two consecutive connections have different address layouts.
 	This indicates that re-exec makes ASLR work
 	"""
-	cmd = (Path(request.node.fspath).parent / "parent_dropbear_map.py").resolve()
+	map_script = (Path(request.node.fspath).parent / "parent_dropbear_map.py").resolve()
+	# run within the same venv, for python deps
+	activate = own_venv_command()
+	cmd = f"{activate}; {map_script}"
+	print(cmd)
 	r = dbclient(request, cmd, capture_output=True, text=True)
 	map1 = r.stdout.rstrip()
 	print(r.stderr, file=sys.stderr)
--- a/test/test_dropbear.py	Sun Jan 30 10:23:06 2022 +0800
+++ b/test/test_dropbear.py	Sun Jan 30 13:37:20 2022 +0800
@@ -57,6 +57,20 @@
 		# wait for response
 		return subprocess.run(full_args, **kwargs)
 
+def own_venv_command():
+	""" Returns a command to run as a prefix to get the same venv
+	as the current running Python. Returns '' on not a virtualenv
+	"""
+	try:
+		print(os.environ)
+		venv = os.environ['VIRTUAL_ENV']
+		print(venv)
+	except KeyError:
+		return ""
+
+	# note: bash/zsh unix specific
+	return f"source {venv}/bin/activate"
+
 class HandleTcp(socketserver.ThreadingMixIn, socketserver.TCPServer):
 	""" Listens for a single incoming request, sends a response if given,
 	and returns the inbound data.