Files @ f073c9637d47
Branch filter:

Location: majic-ansible-roles/roles/wsgi_website/molecule/default/tests/test_parameters_optional.py

branko
MAR-162: Make the https_tls_certificate and https_tls_key parameters mandatory in php_website role:

- Dropped the defaults from php_server role.
- Updated group variables in role tests.
- Changed the key/certificate file extensions to be more descriptive.
- Updated role reference documentation.
- Updated usage instructions to include the mandatory parameters.
import os

import testinfra.utils.ansible_runner


testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner(
    os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('parameters-optional')


def test_installed_packages(host):
    """
    Tests if additional packages are installed.
    """

    assert host.package('libmariadbclient-dev-compat').is_installed
    assert host.package('global').is_installed


def test_https_enforcement(host):
    """
    Tests if HTTPS is (not) being enforced.
    """

    https_enforcement = host.run('curl -I http://parameters-optional.local/')

    assert https_enforcement.rc == 0
    assert 'HTTP/1.1 200 OK' in https_enforcement.stdout
    assert 'HTTP/1.1 301 Moved Permanently' not in https_enforcement.stdout
    assert 'Location: https://parameters-optional/' not in https_enforcement.stdout

    https_enforcement = host.run('curl -I https://parameters-optional.local/')

    assert https_enforcement.rc == 0
    assert 'Strict-Transport-Security' not in https_enforcement.stdout


def test_index_page(host):
    """
    Tests if index page is served correctly. This covers:

    - Basic WSGI application operation.
    - Handling of environment variables.
    - Handling of proxy headers.
    """

    page = host.run('curl -H "Accept-Encoding: plain" https://parameters-optional.local/')

    assert page.rc == 0
    assert "This is the WSGI application at parameters-optional.local." in page.stdout
    assert "Requested URL was: https://parameters-optional.local/" in page.stdout
    assert "MY_ENV_VAR: My environment variable" in page.stdout
    assert "Accept-Encoding: None" in page.stdout
    assert "Python version: 3." in page.stdout


def test_static_file_serving(host):
    """
    Tests serving of static files.
    """

    page = host.run('curl https://parameters-optional.local/static/static_file.txt')
    assert page.rc == 0
    assert page.stdout == open("tests/data/static_file.txt", 'r').read()

    page = host.run('curl https://parameters-optional.local/media/media_file.txt')
    assert page.rc == 0
    assert page.stdout == open("tests/data/media_file.txt", 'r').read()


def test_additional_nginx_config(host):
    """
    Tests if additional Nginx configuration directives are properly deployed.
    """

    page = host.run('curl https://parameters-optional.local/static/missing_static_file.txt')
    assert page.rc == 0
    assert "Requested URL was: https://parameters-optional.local/my/own/error/page"


def test_environment_indicator(host):
    """
    Tests if environment indicator is applied correctly.
    """

    page = host.run('curl https://parameters-optional.local/')

    assert page.rc == 0
    assert "<div id='website-environment' style='background-color: #ff0000; width: 100%; text-align: center; position: fixed; bottom: 5px; color: #00ff00; " \
        "font-weight: bold; z-index: 999999;'>parameters-optional</div></body>" in page.stdout


def test_nginx_rewrite_config(host):
    """
    Tests if Nginx rewrite configuration is deployed correctly.
    """

    page = host.run('curl https://parameters-optional.local/rewrite1/some/path')
    assert page.rc == 0
    assert "Requested URL was: https://parameters-optional.local/rewritten1/" in page.stdout

    page = host.run('curl https://parameters-optional.local/rewrite2/some/other/path')
    assert page.rc == 0
    assert "Requested URL was: https://parameters-optional.local/rewritten2/some/other/path" in page.stdout