blob: 1724d6960a66ac7cd83595da72f3e9ea138634ff [file] [log] [blame]
---
# nginx molecule/default/verify.yml
#
# SPDX-FileCopyrightText: © 2020 Open Networking Foundation <support@opennetworking.org>
# SPDX-License-Identifier: Apache-2.0
- name: Verify
hosts: all
vars:
nginx_static_dir: "/srv/sites"
tasks:
# Static site tests
- name: Create a test file to be served for the static site
lineinfile:
path: "{{ nginx_static_dir }}/static.example.com/index.html"
line: "This file is served from static.example.com"
mode: 0644
create: true
- name: Test that static site is being served with index.yaml
uri:
url: http://127.0.0.1/
headers:
Host: "static.example.com"
status_code: 200
return_content: true
register: webpage
failed_when: "'This file is served from static.example.com' not in webpage.content"
- name: Test that bad user agents are blocked with 403
uri:
url: http://127.0.0.1/
headers:
Host: "static.example.com"
User-Agent: "Mozilla/5.0 (compatible; AhrefsBot/7.0; +http://ahrefs.com/robot/)"
status_code: 403
- name: Test that the static site is the default site
uri:
url: http://127.0.0.1/
status_code: 200
return_content: true
register: webpage
failed_when: "'This file is served from static.example.com' not in webpage.content"
- name: Delete static site test file
file:
path: "{{ nginx_static_dir }}/static.example.com/index.html"
mode: 0644
state: absent
- name: Verify that 403 is returned when no index.html file exists and autoindex is off
uri:
url: http://127.0.0.1/
headers:
Host: "static.example.com"
status_code: 403
- name: See if extra_config (teapot with code 418 at /teapot) is working
uri:
url: http://127.0.0.1/teapot
headers:
Host: "static.example.com"
status_code: 418
- name: Create a yaml file to check that MIME config is working
copy:
dest: "{{ nginx_static_dir }}/static.example.com/example.yaml"
mode: 0644
content: |
---
# example YAML file
- name: Retrieve YAML file
uri:
url: http://127.0.0.1/example.yaml
headers:
Host: "static.example.com"
status_code: 200
return_content: true
register: webpagey
- name: Assert that yaml file uses text/yaml MIME type
assert:
that:
- webpagey['content_type'] == 'text/yaml'
- name: Delete yaml test file
file:
path: "{{ nginx_static_dir }}/static.example.com/example.yaml"
state: absent
# Test nginx autoindex
- name: Create a test dir to be served for the autoindex site
file:
path: "{{ nginx_static_dir }}/autoindex.example.com/autoindex_example_dir"
mode: 0755
state: directory
- name: Test that autoindex is created and lists directory
uri:
url: http://127.0.0.1/
headers:
Host: "autoindex.example.com"
status_code: 200
return_content: true
register: webpageai
failed_when: "'autoindex_example_dir' not in webpageai.content"
- name: Delete test dir for autoindex site
file:
path: "{{ nginx_static_dir }}/autoindex.example.com/autoindex_example_dir"
state: absent
# HTTP Basic Authentication tests
- name: Create a test file to be served for the authenticated site
lineinfile:
path: "{{ nginx_static_dir }}/authenticated.example.com/index.html"
line: "This file is served from authenticated.example.com"
mode: 0644
create: true
- name: Test that the authenticated file can't be accessed without authentication
uri:
url: http://127.0.0.1/
headers:
Host: "authenticated.example.com"
status_code: 401
- name: Test that the authenticated file can be accessed by authorized user
uri:
url: http://127.0.0.1/
url_username: "ghopper"
url_password: "verysecurepassword"
headers:
Host: "authenticated.example.com"
status_code: 200
return_content: true
register: webpage
failed_when: "'authenticated.example.com' not in webpage.content"
- name: Test that the authenticated file can't be accessed by unauthorized user
uri:
url: http://127.0.0.1/
url_username: "aturing"
url_password: "yetanotherpw"
headers:
Host: "authenticated.example.com"
status_code: 401
- name: Delete authenticated site test file
file:
path: "{{ nginx_static_dir }}/authenticated.example.com/index.html"
state: absent
# Proxy tests
- name: Verify that when proxy isn't running, NGINX returns a 502 "Bad Gateway" error
uri:
url: http://127.0.0.1/
headers:
Host: "proxy.example.com"
status_code: 502
- name: Create a test file to be served by the proxy
lineinfile:
path: "/tmp/index.html"
line: "This file is served from proxy.example.com"
mode: 0644
create: true
- name: Run a python http.server as proxy target for 30 seconds in the background
become: true
shell: >-
( cd /tmp;
python3 -m http.server -b 127.0.0.1 8000 2> /tmp/pyhttp.log & PY_PID=$!;
echo "server running: $PY_PID";
sleep 30;
kill $PY_PID) &
tags:
- skip_ansible_lint
- name: Wait 10 seconds for Python http.server to start
pause:
seconds: 10
- name: Test that the proxy site is being served
uri:
url: http://127.0.0.1/index.html
headers:
Host: "proxy.example.com"
status_code: 200
return_content: true
register: webpage
failed_when: "'proxy.example.com' not in webpage.content"
- name: Clean up proxy site testing files
become: true
file:
path: "/tmp/{{ item }}"
state: absent
with_items:
- "index.html"
- "pyhttp.log"
# Redirect tests
- name: Check that 301 redirect is being served
uri:
url: http://127.0.0.1
headers:
Host: "redirect.example.com"
follow_redirects: "none"
status_code: 301
return_content: true
register: webpage
failed_when: "webpage.location != 'https://destination.example.com'"