"""
Test running bootstrap script in different circumstances
"""
import subprocess


def test_ubuntu_too_old():
    """
    Error with a useful message when running in older Ubuntu
    """
    container_name = 'old-distro-test'

    # stop container if it is already running
    subprocess.run([
        'docker', 'rm', '-f', container_name
    ])

    # Start a detached Ubuntu 16.04 container
    subprocess.check_call([
        'docker', 'run', '--detach', '--name', container_name, 'ubuntu:16.04',
        '/bin/bash', '-c', 'sleep 1000s'
    ])
    # Install python3 inside the ubuntu container
    # There is no trusted Ubuntu+Python3 container we can use
    subprocess.check_output([
        'docker', 'exec', container_name, 'apt-get', 'update'
    ])
    subprocess.check_output([
        'docker', 'exec', container_name, 'apt-get', 'install', '--yes', 'python3'
    ])
    # Copy only the bootstrap script  to container, so this is faster
    subprocess.check_call([
        'docker',
        'cp',
        'bootstrap/', '{container_name}:/srv'.format(container_name=container_name)
    ])

    # Run bootstrap script, validate that it fails appropriately
    output = subprocess.run([
        'docker', 'exec', '-i', container_name,
        'python3', '/srv/bootstrap/bootstrap.py'
    ], check=False, stdout=subprocess.PIPE, encoding='utf-8')
    assert output.stdout == 'The Littlest JupyterHub requires Ubuntu 18.04 or higher\n'
    assert output.returncode == 1
