Changeset - 372e9ba1763f
[Not reviewed]
0 3 0
Branko Majic (branko) - 4 years ago 2020-05-06 00:19:26
branko@majic.rs
MAR-152: Refactor tests for mail_forwader relay testing:

- Mark the helper machines in the Ansible inventory.
- Parametrise the tests to make adding future servers easier (e.g. do
not use specific hostnames in tests).
- Break-up relay test to be more specific (also to be able to
parametrise properly).
3 files changed with 47 insertions and 26 deletions:
0 comments (0 inline, 0 general)
roles/mail_forwarder/molecule/default/molecule.yml
Show inline comments
 
@@ -17,6 +17,7 @@ platforms:
 
  - name: mail-server
 
    groups:
 
      - mail-servers
 
      - helper
 
    box: debian/contrib-stretch64
 
    memory: 256
 
    cpus: 1
 
@@ -29,6 +30,7 @@ platforms:
 
  - name: client1
 
    groups:
 
      - clients
 
      - helper
 
    box: debian/contrib-stretch64
 
    memory: 256
 
    cpus: 1
roles/mail_forwarder/molecule/default/tests/test_connectivity_from_client.py
Show inline comments
 
import os
 

	
 
import pytest
 
import testinfra.utils.ansible_runner
 

	
 

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

	
 
ansible_runner = testinfra.utils.ansible_runner.AnsibleRunner(
 
    os.environ['MOLECULE_INVENTORY_FILE'])
 

	
 
def test_connectivity_from_client(host):
 

	
 
@pytest.mark.parametrize("server",
 
                         sorted(
 
                             set(ansible_runner.get_hosts('all')) -
 
                             set(ansible_runner.get_hosts('helper'))))
 
def test_connectivity_from_client(host, server):
 
    """
 
    Tests connectivity towards mail forwarder servers from client
 
    (non-relay). Connectivity should fail for both.
 
@@ -15,14 +23,6 @@ def test_connectivity_from_client(host):
 

	
 
    with host.sudo():
 

	
 
        ping = host.run('hping3 -S -p 25 -c 1 parameters-mandatory-stretch64')
 
        assert ping.rc != 0
 
        assert "100% packet loss" in ping.stderr
 

	
 
        ping = host.run('hping3 -S -p 25 -c 1 parameters-optional-stretch64')
 
        ping = host.run('hping3 -S -p 25 -c 1 %s' % server)
 
        assert ping.rc != 0
 
        assert "100% packet loss" in ping.stderr
 

	
 
        ping = host.run('hping3 -S -p 25 -c 1 parameters-no-incoming-stretch64')
 
        assert "100% packet loss" in ping.stderr
 
        assert ping.rc != 0
roles/mail_forwarder/molecule/default/tests/test_connectivity_from_relay.py
Show inline comments
 
import os
 

	
 
import pytest
 
import testinfra.utils.ansible_runner
 

	
 

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

	
 
ansible_runner = testinfra.utils.ansible_runner.AnsibleRunner(
 
    os.environ['MOLECULE_INVENTORY_FILE'])
 

	
 
def test_connectivity_from_relay(host):
 

	
 
@pytest.mark.parametrize("server",
 
                         ansible_runner.get_hosts('parameters-optional'))
 
def test_connectivity_from_authorised_relay(host, server):
 
    """
 
    Tests connectivity towards mail forwarder servers from relay. Connection
 
    towards parameters-mandatory should fail.
 
    Tests connectivity towards mail forwarder servers from authorised
 
    relay.
 
    """
 

	
 
    with host.sudo():
 

	
 
        ping = host.run('hping3 -S -p 25 -c 1 parameters-mandatory-stretch64')
 
        assert ping.rc != 0
 
        assert "100% packet loss" in ping.stderr
 

	
 
        ping = host.run('hping3 -S -p 25 -c 1 parameters-optional-stretch64')
 
        ping = host.run('hping3 -S -p 25 -c 1 %s' % server)
 
        assert ping.rc == 0
 

	
 
        ping = host.run('hping3 -S -p 25 -c 1 parameters-no-incoming-stretch64')
 
        assert "100% packet loss" in ping.stderr
 

	
 
@pytest.mark.parametrize("server",
 
                         sorted(
 
                             set(ansible_runner.get_hosts('parameters-mandatory')) |
 
                             set(ansible_runner.get_hosts('parameters-no-incoming'))))
 
def test_connectivity_from_unauthorised_relay(host, server):
 
    """
 
    Tests connectivity towards mail forwarder servers from unauthorised
 
    relay.
 
    """
 

	
 
    with host.sudo():
 

	
 
        ping = host.run('hping3 -S -p 25 -c 1 %s' % server)
 
        assert ping.rc != 0
 
        assert "100% packet loss" in ping.stderr
 

	
 

	
 
def test_mail_reception_from_relay(host):
 
@pytest.mark.parametrize("server",
 
                         ansible_runner.get_hosts('parameters-optional'))
 
def test_mail_reception_from_authorised_relay(host, server):
 
    """
 
    Tests if mails can be sent from relay to servers configured to use the
 
    relay.
 
    """
 

	
 
    send = host.run('swaks --suppress-data --to root@parameters-optional-stretch64 --server parameters-optional-stretch64')
 
    send = host.run('swaks --suppress-data --to root@{server} --server {server}'.format(server=server))
 
    assert send.rc == 0
 

	
 

	
 
def test_open_relay(host):
 
@pytest.mark.parametrize("server",
 
                         ansible_runner.get_hosts('parameters-optional'))
 
def test_open_relay(host, server):
 
    """
 
    Tests if mail forwarder behaves as open relay.
 
    """
 

	
 
    no_recipients_accepted = 24
 
    no_recipients_accepted_error_code = 24
 

	
 
    send = host.run('swaks --suppress-data --to root@client1 --server parameters-optional-stretch64')
 
    assert send.rc == no_recipients_accepted
 
    send = host.run('swaks --suppress-data --to root@client1 --server %s' % server)
 
    assert send.rc == no_recipients_accepted_error_code
 
    assert "Relay access denied" in send.stdout
0 comments (0 inline, 0 general)