diff --git a/integration-tests/test_bootstrap.py b/integration-tests/test_bootstrap.py index fa02b68..a48065a 100644 --- a/integration-tests/test_bootstrap.py +++ b/integration-tests/test_bootstrap.py @@ -1,10 +1,13 @@ """ Test running bootstrap script in different circumstances """ +import concurrent.futures +import requests import subprocess from textwrap import dedent +import time -def run_bootstrap(container_name, image): +def run_bootstrap(container_name, image, flags=None): # stop container if it is already running subprocess.run([ 'docker', 'rm', '-f', container_name @@ -12,7 +15,7 @@ def run_bootstrap(container_name, image): # Start a detached Ubuntu 16.04 container subprocess.check_call([ - 'docker', 'run', '--detach', '--name', container_name, image, + 'docker', 'run', '--detach', '--publish', '12000:80', '--name', container_name, image, '/bin/bash', '-c', 'sleep 1000s' ]) # Install python3 inside the ubuntu container @@ -20,9 +23,13 @@ def run_bootstrap(container_name, image): subprocess.check_output([ 'docker', 'exec', container_name, 'apt-get', 'update' ]) + if flags: + pkgs = ['python3', 'systemd', 'git'] + else: + pkgs = ['python3'] subprocess.check_output([ - 'docker', 'exec', container_name, 'apt-get', 'install', '--yes', 'python3' - ]) + 'docker', 'exec', container_name, 'apt-get', 'install', '--yes'] + pkgs + ) # Copy only the bootstrap script to container, so this is faster subprocess.check_call([ 'docker', @@ -34,7 +41,7 @@ def run_bootstrap(container_name, image): return subprocess.run([ 'docker', 'exec', '-i', container_name, 'python3', '/srv/bootstrap/bootstrap.py' - ], check=False, stdout=subprocess.PIPE, encoding='utf-8') + ] + flags, check=False, stdout=subprocess.PIPE, encoding='utf-8') def test_ubuntu_too_old(): """ @@ -54,3 +61,29 @@ def test_inside_no_systemd_docker(): For local development, see http://tljh.jupyter.org/en/latest/contributing/dev-setup.html """).strip() assert output.returncode == 1 + + +def verify_progress_page(expected_status_code): + progress_page_status = False + while True: + try: + r = requests.get('http://127.0.0.1:12000/index.html') + status = r.status_code + if status == expected_status_code: + progress_page_status = True + break; + except Exception as e: + time.sleep(5) + continue; + + return progress_page_status + +def test_progress_page(): + with concurrent.futures.ThreadPoolExecutor() as executor: + future = executor.submit(run_bootstrap, 'progress-page', 'ubuntu:18.04', ['--show-progress-page']) + + # Check if progress page started + started = verify_progress_page(200) + assert started + + return_value = future.result()