Merge branch 'feat-test-suite' into feat-setup

master
Tim Möhlmann 6 years ago
commit 928fbb372d
No known key found for this signature in database
GPG Key ID: AFABC30066A39335

@ -6,12 +6,17 @@ addons:
- docker-ce
env:
- VERSION=$TRAVIS_BRANCH
language: python
python:
- "3.6"
install:
- pip install -r tests/requirements.txt
script:
# Default to mailu for DOCKER_ORG
- if [ -z "$DOCKER_ORG" ]; then export DOCKER_ORG="mailu"; fi
- docker-compose -f tests/build.yml build
- tests/compose/test-script.sh
- python tests/compose/test.py
deploy:
provider: script

@ -0,0 +1,82 @@
# This file is auto-generated by the Mailu configuration wizard.
# Please read the documentation before attempting any change.
# Generated for compose flavor
version: '3.6'
services:
# External dependencies
redis:
image: redis:alpine
volumes:
- "/mailu/redis:/data"
# Core services
front:
image: mailu/nginx:master
env_file: mailu.env
ports:
- "127.0.0.1:80:80"
- "::1:80:80"
- "127.0.0.1:443:443"
- "::1:443:443"
- "127.0.0.1:25:25"
- "::1:25:25"
- "127.0.0.1:465:465"
- "::1:465:465"
- "127.0.0.1:587:587"
- "::1:587:587"
- "127.0.0.1:110:110"
- "::1:110:110"
- "127.0.0.1:995:995"
- "::1:995:995"
- "127.0.0.1:143:143"
- "::1:143:143"
- "127.0.0.1:993:993"
- "::1:993:993"
volumes:
- "/mailu/certs:/certs"
admin:
image: mailu/admin:master
env_file: mailu.env
volumes:
- "/mailu/data:/data"
- "/mailu/dkim:/dkim"
depends_on:
- redis
imap:
image: mailu/dovecot:master
env_file: mailu.env
volumes:
- "/mailu/mail:/mail"
- "/mailu/overrides:/overrides"
depends_on:
- front
smtp:
image: mailu/postfix:master
env_file: mailu.env
volumes:
- "/mailu/overrides:/overrides"
depends_on:
- front
# Optional services
antispam:
image: mailu/rspamd:master
env_file: mailu.env
volumes:
- "/mailu/filter:/var/lib/rspamd"
- "/mailu/dkim:/dkim"
- "/mailu/overrides/rspamd:/etc/rspamd/override.d"
depends_on:
- front
# Webmail

@ -0,0 +1,77 @@
# This file is auto-generated by the Mailu configuration wizard.
# Please read the documentation before attempting any change.
# Generated for compose flavor
version: '3.6'
services:
# External dependencies
redis:
image: redis:alpine
volumes:
- "/mailu/redis:/data"
# Core services
front:
image: mailu/nginx:master
env_file: mailu.env
ports:
- "127.0.0.1:80:80"
- "::1:80:80"
- "127.0.0.1:443:443"
- "::1:443:443"
- "127.0.0.1:25:25"
- "::1:25:25"
- "127.0.0.1:465:465"
- "::1:465:465"
- "127.0.0.1:587:587"
- "::1:587:587"
- "127.0.0.1:110:110"
- "::1:110:110"
- "127.0.0.1:995:995"
- "::1:995:995"
- "127.0.0.1:143:143"
- "::1:143:143"
- "127.0.0.1:993:993"
- "::1:993:993"
volumes:
- "/mailu/certs:/certs"
admin:
image: mailu/admin:master
env_file: mailu.env
volumes:
- "/mailu/data:/data"
- "/mailu/dkim:/dkim"
depends_on:
- redis
imap:
image: mailu/dovecot:master
env_file: mailu.env
volumes:
- "/mailu/mail:/mail"
- "/mailu/overrides:/overrides"
depends_on:
- front
smtp:
image: mailu/postfix:master
env_file: mailu.env
volumes:
- "/mailu/overrides:/overrides"
depends_on:
- front
# Optional services
fetchmail:
image: mailu/fetchmail:master
env_file: mailu.env
# Webmail

@ -0,0 +1,119 @@
# This file is auto-generated by the Mailu configuration wizard.
# Please read the documentation before attempting any change.
# Generated for compose flavor
version: '3.6'
services:
# External dependencies
redis:
image: redis:alpine
volumes:
- "/mailu/redis:/data"
# Core services
front:
image: mailu/nginx:master
env_file: mailu.env
ports:
- "127.0.0.1:80:80"
- "::1:80:80"
- "127.0.0.1:443:443"
- "::1:443:443"
- "127.0.0.1:25:25"
- "::1:25:25"
- "127.0.0.1:465:465"
- "::1:465:465"
- "127.0.0.1:587:587"
- "::1:587:587"
- "127.0.0.1:110:110"
- "::1:110:110"
- "127.0.0.1:995:995"
- "::1:995:995"
- "127.0.0.1:143:143"
- "::1:143:143"
- "127.0.0.1:993:993"
- "::1:993:993"
volumes:
- "/mailu/certs:/certs"
resolver:
image: mailu/unbound:master
env_file: mailu.env
restart: always
networks:
default:
ipv4_address: 192.168.0.254
admin:
image: mailu/admin:master
env_file: mailu.env
volumes:
- "/mailu/data:/data"
- "/mailu/dkim:/dkim"
depends_on:
- redis
imap:
image: mailu/dovecot:master
env_file: mailu.env
volumes:
- "/mailu/mail:/mail"
- "/mailu/overrides:/overrides"
depends_on:
- front
smtp:
image: mailu/postfix:master
env_file: mailu.env
volumes:
- "/mailu/overrides:/overrides"
depends_on:
- front
- resolver
dns:
- 192.168.0.254
# Optional services
antispam:
image: mailu/rspamd:master
env_file: mailu.env
volumes:
- "/mailu/filter:/var/lib/rspamd"
- "/mailu/dkim:/dkim"
- "/mailu/overrides/rspamd:/etc/rspamd/override.d"
depends_on:
- front
- resolver
dns:
- 192.168.0.254
antivirus:
image: mailu/clamav:master
env_file: mailu.env
volumes:
- "/mailu/filter:/data"
depends_on:
- resolver
dns:
- 192.168.0.254
# Webmail
webmail:
image: mailu/rainloop:master
env_file: mailu.env
volumes:
- "/mailu/webmail:/data"
depends_on:
- imap
networks:
default:
driver: bridge
ipam:
driver: default
config:
- subnet: 192.168.0.0/24

@ -1,31 +1,38 @@
# Mailu main configuration file
#
# Most configuration variables can be modified through the Web interface,
# these few settings must however be configured before starting the mail
# server and require a restart upon change.
# Generated for compose flavor
#
# This file is autogenerated by the configuration management wizard.
# For a detailed list of configuration variables, see the documentation at
# https://mailu.io
###################################
# Common configuration variables
###################################
# Set this to the path where Mailu data and configuration is stored
ROOT=/mailu
# This variable is now set directly in `docker-compose.yml by the setup utility
# ROOT=/mailu
# Mailu version to run (1.0, 1.1, etc. or master)
#VERSION=master
# Set to a randomly generated 16 bytes string
SECRET_KEY=ChangeMeChangeMe
SECRET_KEY=1DS36JPBRGPM5JUC
# Address where listening ports should bind
BIND_ADDRESS4=127.0.0.1
#BIND_ADDRESS6=::1
# This variables are now set directly in `docker-compose.yml by the setup utility
# PUBLIC_IPV4= 127.0.0.1 (default: 127.0.0.1)
# PUBLIC_IPV6= ::1 (default: ::1)
# Subnet
SUBNET=192.168.0.0/24
# Main mail domain
DOMAIN=mailu.io
# Hostnames for this server, separated with comas
HOSTNAMES=mail.mailu.io,alternative.mailu.io,yetanother.mailu.io
HOSTNAMES=mail.mailu.io
# Postmaster local part (will append the main mail domain)
POSTMASTER=admin
@ -34,7 +41,7 @@ POSTMASTER=admin
TLS_FLAVOR=cert
# Authentication rate limit (per source IP address)
AUTH_RATELIMIT=10/minute;1000/hour
AUTH_RATELIMIT=10/minute;1000/hour
# Opt-out of statistics, replace with "True" to opt out
DISABLE_STATISTICS=False
@ -44,7 +51,7 @@ DISABLE_STATISTICS=False
###################################
# Expose the admin interface (value: true, false)
ADMIN=false
ADMIN=true
# Choose which webmail to run if any (values: roundcube, rainloop, none)
WEBMAIL=none
@ -53,7 +60,10 @@ WEBMAIL=none
WEBDAV=none
# Antivirus solution (value: clamav, none)
ANTIVIRUS=none
#ANTIVIRUS=none
#Antispam solution
ANTISPAM=none
###################################
# Mail settings
@ -65,7 +75,7 @@ MESSAGE_SIZE_LIMIT=50000000
# Networks granted relay permissions, make sure that you include your Docker
# internal network (default to 172.17.0.0/16)
RELAYNETS=172.16.0.0/12
RELAYNETS=172.17.0.0/16
# Will relay all outgoing mails if configured
RELAYHOST=
@ -74,18 +84,12 @@ RELAYHOST=
FETCHMAIL_DELAY=600
# Recipient delimiter, character used to delimiter localpart from custom address part
# e.g. localpart+custom@domain;tld
RECIPIENT_DELIMITER=+
# DMARC rua and ruf email
DMARC_RUA=admin
DMARC_RUF=admin
# Welcome email, enable and set a topic and body if you wish to send welcome
# emails to all users.
WELCOME=false
WELCOME_SUBJECT=Welcome to your new email account
WELCOME_BODY=Welcome to your new email account, if you can read this, then it is configured properly!
# Maildir Compression
# choose compression-method, default: none (value: bz2, gz)
@ -109,12 +113,7 @@ SITENAME=Mailu
# Linked Website URL
WEBSITE=https://mailu.io
# Registration reCaptcha settings (warning, this has some privacy impact)
# RECAPTCHA_PUBLIC_KEY=
# RECAPTCHA_PRIVATE_KEY=
# Domain registration, uncomment to enable
# DOMAIN_REGISTRATION=true
###################################
# Advanced settings
@ -127,14 +126,17 @@ WEBSITE=https://mailu.io
LOG_DRIVER=json-file
# Docker-compose project name, this will prepended to containers names.
#COMPOSE_PROJECT_NAME=mailu
COMPOSE_PROJECT_NAME=mailu
# Default password scheme used for newly created accounts and changed passwords
# (value: SHA512-CRYPT, SHA256-CRYPT, MD5-CRYPT, CRYPT)
PASSWORD_SCHEME=SHA512-CRYPT
# (value: BLF-CRYPT, SHA512-CRYPT, SHA256-CRYPT, MD5-CRYPT, CRYPT)
PASSWORD_SCHEME=BLF-CRYPT
# Header to take the real ip from
REAL_IP_HEADER=
# IPs for nginx set_real_ip_from (CIDR list separated by commas)
REAL_IP_FROM=
# choose wether mailu bounces (no) or rejects (yes) mail when recipient is unknown (value: yes, no)
REJECT_UNLISTED_RECIPIENT=

@ -0,0 +1,84 @@
# This file is auto-generated by the Mailu configuration wizard.
# Please read the documentation before attempting any change.
# Generated for compose flavor
version: '3.6'
services:
# External dependencies
redis:
image: redis:alpine
volumes:
- "/mailu/redis:/data"
# Core services
front:
image: mailu/nginx:master
env_file: mailu.env
ports:
- "127.0.0.1:80:80"
- "::1:80:80"
- "127.0.0.1:443:443"
- "::1:443:443"
- "127.0.0.1:25:25"
- "::1:25:25"
- "127.0.0.1:465:465"
- "::1:465:465"
- "127.0.0.1:587:587"
- "::1:587:587"
- "127.0.0.1:110:110"
- "::1:110:110"
- "127.0.0.1:995:995"
- "::1:995:995"
- "127.0.0.1:143:143"
- "::1:143:143"
- "127.0.0.1:993:993"
- "::1:993:993"
volumes:
- "/mailu/certs:/certs"
admin:
image: mailu/admin:master
env_file: mailu.env
volumes:
- "/mailu/data:/data"
- "/mailu/dkim:/dkim"
depends_on:
- redis
imap:
image: mailu/dovecot:master
env_file: mailu.env
volumes:
- "/mailu/mail:/mail"
- "/mailu/overrides:/overrides"
depends_on:
- front
smtp:
image: mailu/postfix:master
env_file: mailu.env
volumes:
- "/mailu/overrides:/overrides"
depends_on:
- front
# Optional services
# Webmail
webmail:
image: mailu/rainloop:master
env_file: mailu.env
volumes:
- "/mailu/webmail:/data"
depends_on:
- imap
- resolver
dns:
- 192.168.0.254

@ -0,0 +1,84 @@
# This file is auto-generated by the Mailu configuration wizard.
# Please read the documentation before attempting any change.
# Generated for compose flavor
version: '3.6'
services:
# External dependencies
redis:
image: redis:alpine
volumes:
- "/mailu/redis:/data"
# Core services
front:
image: mailu/nginx:master
env_file: mailu.env
ports:
- "127.0.0.1:80:80"
- "::1:80:80"
- "127.0.0.1:443:443"
- "::1:443:443"
- "127.0.0.1:25:25"
- "::1:25:25"
- "127.0.0.1:465:465"
- "::1:465:465"
- "127.0.0.1:587:587"
- "::1:587:587"
- "127.0.0.1:110:110"
- "::1:110:110"
- "127.0.0.1:995:995"
- "::1:995:995"
- "127.0.0.1:143:143"
- "::1:143:143"
- "127.0.0.1:993:993"
- "::1:993:993"
volumes:
- "/mailu/certs:/certs"
admin:
image: mailu/admin:master
env_file: mailu.env
volumes:
- "/mailu/data:/data"
- "/mailu/dkim:/dkim"
depends_on:
- redis
imap:
image: mailu/dovecot:master
env_file: mailu.env
volumes:
- "/mailu/mail:/mail"
- "/mailu/overrides:/overrides"
depends_on:
- front
smtp:
image: mailu/postfix:master
env_file: mailu.env
volumes:
- "/mailu/overrides:/overrides"
depends_on:
- front
# Optional services
# Webmail
webmail:
image: mailu/roundcube:master
env_file: mailu.env
volumes:
- "/mailu/webmail:/data"
depends_on:
- imap
- resolver
dns:
- 192.168.0.254

@ -1,101 +0,0 @@
version: '2'
services:
front:
image: $DOCKER_ORG/nginx:$VERSION
restart: 'no'
env_file: $PWD/.env
logging:
driver: $LOG_DRIVER
ports:
- "$BIND_ADDRESS4:80:80"
- "$BIND_ADDRESS4:443:443"
- "$BIND_ADDRESS4:110:110"
- "$BIND_ADDRESS4:143:143"
- "$BIND_ADDRESS4:993:993"
- "$BIND_ADDRESS4:995:995"
- "$BIND_ADDRESS4:25:25"
- "$BIND_ADDRESS4:465:465"
- "$BIND_ADDRESS4:587:587"
volumes:
- "$ROOT/certs:/certs"
redis:
image: redis:alpine
restart: 'no'
volumes:
- "$ROOT/redis:/data"
imap:
image: $DOCKER_ORG/dovecot:$VERSION
restart: 'no'
env_file: $PWD/.env
volumes:
- "$ROOT/data:/data"
- "$ROOT/mail:/mail"
- "$ROOT/overrides:/overrides"
depends_on:
- front
smtp:
image: $DOCKER_ORG/postfix:$VERSION
restart: 'no'
env_file: $PWD/.env
volumes:
- "$ROOT/data:/data"
- "$ROOT/overrides:/overrides"
depends_on:
- front
antispam:
image: $DOCKER_ORG/rspamd:$VERSION
restart: 'no'
env_file: $PWD/.env
volumes:
- "$ROOT/filter:/var/lib/rspamd"
- "$ROOT/dkim:/dkim"
- "$ROOT/overrides/rspamd:/etc/rspamd/override.d"
depends_on:
- front
antivirus:
image: $DOCKER_ORG/$ANTIVIRUS:$VERSION
restart: 'no'
env_file: $PWD/.env
volumes:
- "$ROOT/filter:/data"
webdav:
image: $DOCKER_ORG/$WEBDAV:$VERSION
restart: 'no'
env_file: $PWD/.env
volumes:
- "$ROOT/dav:/data"
admin:
image: $DOCKER_ORG/admin:$VERSION
restart: 'no'
env_file: $PWD/.env
volumes:
- "$ROOT/data:/data"
- "$ROOT/dkim:/dkim"
- /var/run/docker.sock:/var/run/docker.sock:ro
depends_on:
- redis
webmail:
image: "$DOCKER_ORG/$WEBMAIL:$VERSION"
restart: 'no'
env_file: $PWD/.env
volumes:
- "$ROOT/webmail:/data"
depends_on:
- imap
fetchmail:
image: $DOCKER_ORG/fetchmail:$VERSION
restart: 'no'
env_file: $PWD/.env
volumes:
- "$ROOT/data:/data"

@ -0,0 +1,92 @@
import sys
import os
import time
import docker
from colorama import Fore, Style
# Declare variables for service name and sleep time
test_name=sys.argv[1]
timeout=int(sys.argv[2])
client = docker.APIClient(base_url='unix://var/run/docker.sock')
containers = []
# Start up containers
def start():
os.system("cp mailu.env " + test_name + "/")
os.system("docker-compose -f " + test_name + "/" + test_name + ".yml -p $DOCKER_ORG up -d ")
# Stop containers
def stop(exit_code):
print_logs()
os.system("docker-compose -f " + test_name + "/" + test_name + ".yml -p $DOCKER_ORG down")
os.system("rm " + test_name +"/mailu.env")
sys.exit(exit_code)
# Sleep for a defined amount of time
def sleep():
print(Fore.LIGHTMAGENTA_EX + "Sleeping for " + str(timeout) + "m" + Style.RESET_ALL)
time.sleep(timeout*60)
def health_checks():
exit_code = 0
#Iterating trough all containers dictionary
for container in client.containers(all=True):
#Perform "docker container inspect" on container based on container ID and save output to a dictionary
container_inspect = client.inspect_container(container['Id']) #Dict
if "Health" in container_inspect['State'].keys():
if container_inspect['State']['Health']['Status'] == "healthy":
print(Fore.GREEN + "Health status for " + container_inspect['Name'].replace("/", "") + " : " + Fore.CYAN + container_inspect['State']['Health']['Status'] + Style.RESET_ALL)
if container_inspect['State']['Health']['Status'] != "healthy":
print(Fore.RED + "Container " + container_inspect['Name'].replace("/", "") + " is " + Fore.YELLOW + container_inspect['State']['Health']['Status']
+ Fore.RED + ", FailingStreak: " + Fore.YELLOW + str(container_inspect['State']['Health']['FailingStreak'])
+ Fore.RED + ", Log: " + Fore.YELLOW + str(container_inspect['State']['Health']['Log']) + Style.RESET_ALL)
exit_code = 1
else:
if container_inspect['State']['Status'] == "running":
print(Fore.GREEN + "Running status for " + container_inspect['Name'].replace("/", "") + " : " + Fore.BLUE + container_inspect['State']['Status'] + Style.RESET_ALL)
if container_inspect['State']['Status'] != "running":
print(Fore.RED + "Container " + container_inspect['Name'].replace("/", "") + " state is: " + Fore.YELLOW + container_inspect['State']['Status'] + Style.RESET_ALL)
exit_code = 1
#Saving Id, Name and state to a new dictionary
containers_dict = {}
containers_dict['Name'] = container_inspect['Name'].replace("/", "")
containers_dict['Id'] = container_inspect['Id']
containers_dict['State'] = container_inspect['State']
#Adding the generated dictionary to a list
containers.append(containers_dict)
if exit_code != 0:
stop(exit_code)
def print_logs():
print("Printing logs ...")
#Iterating through docker container inspect list and print logs
for container in containers:
print(Fore.LIGHTMAGENTA_EX + "Printing logs for: " + Fore.GREEN + container['Name'] + Style.RESET_ALL)
os.system('docker container logs ' + container['Name'])
#Iterating over hooks in test folder and running them
def hooks():
print("Running hooks")
for test_file in sorted(os.listdir(test_name + "/")):
if test_file.endswith(".py"):
os.system("python3 " + test_name + "/" + test_file)
elif test_file.endswith(".sh"):
os.system("./" + test_name + "/" + test_file)
start()
print()
sleep()
print()
os.system("docker ps -a")
print()
health_checks()
print()
hooks()
print()
stop(0)

@ -0,0 +1,79 @@
# This file is auto-generated by the Mailu configuration wizard.
# Please read the documentation before attempting any change.
# Generated for compose flavor
version: '3.6'
services:
# External dependencies
redis:
image: redis:alpine
volumes:
- "/mailu/redis:/data"
# Core services
front:
image: mailu/nginx:master
env_file: mailu.env
ports:
- "127.0.0.1:80:80"
- "::1:80:80"
- "127.0.0.1:443:443"
- "::1:443:443"
- "127.0.0.1:25:25"
- "::1:25:25"
- "127.0.0.1:465:465"
- "::1:465:465"
- "127.0.0.1:587:587"
- "::1:587:587"
- "127.0.0.1:110:110"
- "::1:110:110"
- "127.0.0.1:995:995"
- "::1:995:995"
- "127.0.0.1:143:143"
- "::1:143:143"
- "127.0.0.1:993:993"
- "::1:993:993"
volumes:
- "/mailu/certs:/certs"
admin:
image: mailu/admin:master
env_file: mailu.env
volumes:
- "/mailu/data:/data"
- "/mailu/dkim:/dkim"
depends_on:
- redis
imap:
image: mailu/dovecot:master
env_file: mailu.env
volumes:
- "/mailu/mail:/mail"
- "/mailu/overrides:/overrides"
depends_on:
- front
smtp:
image: mailu/postfix:master
env_file: mailu.env
volumes:
- "/mailu/overrides:/overrides"
depends_on:
- front
# Optional services
webdav:
image: mailu/radicale:master
env_file: mailu.env
volumes:
- "/mailu/dav:/data"
# Webmail

@ -0,0 +1,2 @@
docker
colorama
Loading…
Cancel
Save