From 832dcf15ef6ceba6bdcbff874573a3e22128778e Mon Sep 17 00:00:00 2001 From: Jakub Klama Date: Mon, 26 Sep 2016 12:12:39 +0200 Subject: [PATCH] Further improvements in the test runner. --- tests/freenas/main.py | 20 ++------------------ tests/freenas/run.py | 6 ++++-- tests/freenas/vm.py | 23 +++++++++++++++++++++++ 3 files changed, 29 insertions(+), 20 deletions(-) diff --git a/tests/freenas/main.py b/tests/freenas/main.py index ad3023f..9a8421b 100755 --- a/tests/freenas/main.py +++ b/tests/freenas/main.py @@ -36,19 +36,10 @@ from distutils.core import run_setup from xml.dom import minidom -PYTHON_DEPS = [ - 'Cython', - 'paramiko', - 'nose2', - e('${BE_ROOT}/py-freenas.utils'), - e('${BE_ROOT}/dispatcher-client/python') -] - - EXCLUDES = ['os', 'objs', 'ports', 'release', 'release.build.log', 'repo-manifest'] -venv_root = objdir('test-venv') +venvdir = objdir('tests/venv') output_root = objdir('test-output') @@ -79,7 +70,7 @@ class Main(object): start_time = time.time() manifest = self.load_manifest(s) os.chdir(s) - args = [e('${venv_root}/bin/python3.4'), os.path.join(s, 'run.py'), '-x'] + args = [e('${venvdir}/bin/python'), os.path.join(s, 'run.py'), '-x'] test = None if manifest['pass_target']: args.extend([ @@ -161,12 +152,6 @@ class Main(object): reparsed = minidom.parseString(rough_string) return reparsed.toprettyxml(indent=" ") - def build_virtualenv(self): - info('Preparing test runtime environment') - sh('virtualenv ${venv_root}') - for i in PYTHON_DEPS: - sh('${venv_root}/bin/pip install ${i}') - def main(self): parser = argparse.ArgumentParser() parser.add_argument('-a', metavar='ADDRESS', required=True, help='FreeNAS box address') @@ -178,7 +163,6 @@ class Main(object): self.username = args.u self.password = args.p - self.build_virtualenv() self.find_tests() diff --git a/tests/freenas/run.py b/tests/freenas/run.py index 67d2501..0916166 100644 --- a/tests/freenas/run.py +++ b/tests/freenas/run.py @@ -41,12 +41,14 @@ def cleanup(): def setup_venv(): sh('virtualenv ${venvdir}') - sh('${venvdir}/bin/pip install -U cython six') + sh('${venvdir}/bin/pip install -U cython six paramiko nose2') sh('${venvdir}/bin/pip install -U ${BE_ROOT}/py-bsd') sh('${venvdir}/bin/pip install -U ${BE_ROOT}/py-netif') sh('${venvdir}/bin/pip install -U ${BE_ROOT}/py-dhcp') + sh('${venvdir}/bin/pip install -U ${BE_ROOT}/py-freenas.utils') + sh('${venvdir}/bin/pip install -U ${BE_ROOT}/dispatcher-client/python') sh('${venvdir}/bin/python ${BUILD_ROOT}/tests/freenas/vm.py') - + if __name__ == '__main__': info('Setting up test environment') diff --git a/tests/freenas/vm.py b/tests/freenas/vm.py index 7edc617..944daf3 100644 --- a/tests/freenas/vm.py +++ b/tests/freenas/vm.py @@ -28,6 +28,7 @@ import os import ipaddress import subprocess import threading +import time from dhcp.server import Server from dhcp.lease import Lease from dsl import load_file, load_profile_config @@ -37,9 +38,11 @@ from utils import sh, sh_str, sh_spawn, info, objdir, e load_profile_config() load_file(e('${BUILD_ROOT}/tests/freenas/config.pyd'), os.environ) destdir = objdir('tests') +venvdir = objdir('tests/venv') isopath = objdir('${NAME}.iso') tapdev = None dhcp_server = None +ready = threading.Event() def cleanup(): @@ -65,6 +68,10 @@ def setup_network(): sh('ifconfig ${tapdev} inet ${HOST_IP} ${NETMASK} up') +def cleanup_network(): + sh('ifconfig ${tapdev} destroy') + + def setup_dhcp_server(): global dhcp_server @@ -74,6 +81,7 @@ def setup_dhcp_server(): lease.client_mac = mac lease.client_ip = ipaddress.ip_address(e('${FREENAS_IP}')) lease.client_mask = ipaddress.ip_address(e('${NETMASK}')) + ready.set() return lease dhcp_server = Server() @@ -118,6 +126,20 @@ def do_run(): '${VM_NAME}' ) + ready.wait() + time.sleep(60) + info('VM middleware is ready') + + output = sh_str( + '${venvdir}/bin/python ${BUILD_ROOT}/tests/freenas/main.py ' + '-a ${FREENAS_IP} ' + '-u root ' + '-p abcd1234' + ) + + info('Test results:\n {0}'.format(output)) + + vm_proc.terminate() vm_proc.wait() @@ -131,3 +153,4 @@ if __name__ == '__main__': do_install() setup_network() do_run() + cleanup_network()