From 9bcced6f29bb33fa5f85f27bade81906d0e16aa4 Mon Sep 17 00:00:00 2001 From: Thomas VIAL Date: Sun, 18 Oct 2015 21:02:46 +0200 Subject: [PATCH] Added integration testing - #28 --- .gitignore | 3 ++- .travis.yml | 6 ++++++ Dockerfile | 2 +- Makefile | 30 ++++++++++++++++++++++++++++++ postfix/main.cf | 2 +- test/accounts.cf | 2 ++ test/test.sh | 19 +++++++++++++++++++ test/virtual | 2 ++ 8 files changed, 63 insertions(+), 3 deletions(-) create mode 100644 .travis.yml create mode 100644 Makefile create mode 100644 test/accounts.cf create mode 100755 test/test.sh create mode 100644 test/virtual diff --git a/.gitignore b/.gitignore index 1c3101d7..97490340 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ .DS_Store docker-compose.yml -postfix/ssl/* \ No newline at end of file +postfix/ssl/* +assert.sh \ No newline at end of file diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 00000000..04835d1a --- /dev/null +++ b/.travis.yml @@ -0,0 +1,6 @@ +language: bash +sudo: required +services: + - docker +script: + - make all \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index e029caa4..ff1c1cb9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,7 +4,7 @@ MAINTAINER Thomas VIAL # Packages RUN apt-get update -q --fix-missing RUN apt-get -y upgrade -RUN DEBIAN_FRONTEND=noninteractive apt-get -y install vim postfix sasl2-bin courier-imap courier-imap-ssl courier-authdaemon supervisor gamin amavisd-new spamassassin clamav clamav-daemon libnet-dns-perl libmail-spf-perl pyzor razor arj bzip2 cabextract cpio file gzip nomarch p7zip pax unzip zip zoo rsyslog +RUN DEBIAN_FRONTEND=noninteractive apt-get -y install vim postfix sasl2-bin courier-imap courier-imap-ssl courier-authdaemon supervisor gamin amavisd-new spamassassin clamav clamav-daemon libnet-dns-perl libmail-spf-perl pyzor razor arj bzip2 cabextract cpio file gzip nomarch p7zip pax unzip zip zoo rsyslog mailutils RUN apt-get autoclean # Configures Saslauthd diff --git a/Makefile b/Makefile new file mode 100644 index 00000000..45ea6de8 --- /dev/null +++ b/Makefile @@ -0,0 +1,30 @@ +NAME = tvial/docker-mailserver +VERSION = travis + +all: build run prepare fixtures tests + +build: + docker build --no-cache -t $(NAME):$(VERSION) . + +run: + # Copy test files + cp test/accounts.cf postfix/ + cp test/virtual postfix/ + # Run container + docker run -d --name mail -v "`pwd`/postfix":/tmp/postfix -v "`pwd`/spamassassin":/tmp/spamassassin -h mail.my-domain.com -t $(NAME):$(VERSION) + sleep 15 + +prepare: + # Reinitialize logs + docker exec mail /bin/sh -c 'echo "" > /var/log/mail.log' + +fixtures: + docker exec mail /bin/sh -c 'echo "This is a test mail" | mail -s "TEST-001" user@localhost.localdomain' + docker exec mail /bin/sh -c 'echo "This is a test mail" | mail -s "TEST-002" nouser@localhost.localdomain' + docker exec mail /bin/sh -c 'echo "This is a test mail" | mail -s "TEST-003" alias1@localhost.localdomain' + docker exec mail /bin/sh -c 'echo "This is a test mail" | mail -s "TEST-004" alias2@localhost.localdomain' + +tests: + # Start tests + ./test/test.sh + diff --git a/postfix/main.cf b/postfix/main.cf index 7bedd2e8..87f23f8c 100644 --- a/postfix/main.cf +++ b/postfix/main.cf @@ -9,7 +9,7 @@ readme_directory = no # myhostname = alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases -mydestination = localhost.localdomain, localhost +mydestination = relayhost = mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 172.17.0.0/16 mailbox_size_limit = 0 diff --git a/test/accounts.cf b/test/accounts.cf new file mode 100644 index 00000000..8f209cc6 --- /dev/null +++ b/test/accounts.cf @@ -0,0 +1,2 @@ +user1@localhost.localdomain|mypassword +user2@otherdomain.tld|mypassword diff --git a/test/test.sh b/test/test.sh new file mode 100755 index 00000000..75575a6c --- /dev/null +++ b/test/test.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +# Set up test framework +# wget -q https://raw.github.com/lehmannro/assert.sh/master/assert.sh +source assert.sh + +# Testing user creation +assert "docker exec mail ls -A /var/mail/localhost.localdomain/user1" "cur\nnew\ntmp" +assert "docker exec mail ls /var/mail/otherdomain.tld/user2" "cur\nnew\ntmp" + +# Testing that mail is received for existing user +assert_raises "docker exec mail grep 'status=sent (delivered to maildir)' /var/log/mail.log" "false" +assert "docker exec mail ls -A /var/mail/localhost.localdomain/user1/new | wc -l" " 1" + +# Ending tests +assert_end + + + diff --git a/test/virtual b/test/virtual new file mode 100644 index 00000000..e93eb8fb --- /dev/null +++ b/test/virtual @@ -0,0 +1,2 @@ +alias1@localhost.localdomain user1@localhost.localdomain +alias2@localhost.localdomain external1@otherdomain.tld