#!/usr/share/ucs-test/runner python
## desc: sieve script
## tags: []
## exposure: dangerous
## packages: [univention-mail-server, sieve-connect]

from __future__ import print_function
from essential.mail import send_mail, check_delivery
from univention.config_registry import handler_set
import subprocess
import time
import univention.testing.strings as uts
import univention.testing.ucr as ucr_test
import univention.testing.udm as udm_test
import univention.testing.utils as utils


def sieve_test(mail, expected_output):
	"""Calls sieve-test
	"""
	cmd = [
		"sieve-connect",
		"--user", mail,
		"--server", "localhost",
		"--notlsverify", "--nosslverify",
		"--remotesieve", "default",
		"--list"
	]
	print('**', cmd)
	pop = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)
	out, err = pop.communicate(input=b'univention\n')
	if expected_output not in out:
		utils.fail(out, err)


def main():
	with udm_test.UCSTestUDM() as udm:
		with ucr_test.UCSTestConfigRegistry() as ucr:
			handler_set(['mail/dovecot/sieve/spam=true'])
			utils.restart_listener()
			domain = ucr.get('domainname')
			host = '%s.%s' % (ucr.get('hostname'), domain)
			password = 'univention'
			usermail = '%s@%s' % (uts.random_name(), domain)
			userdn, username = udm.create_user(
				set={
					'password': password,
					'mailHomeServer': host,
					'mailPrimaryAddress': usermail
				}
			)

			sieve_test(usermail, '"default" ACTIVE')
			token = str(time.time())
			send_mail(recipients=usermail, msg=token, gtube=True)
			check_delivery(token, recipient_email=usermail, should_be_delivered=True, spam=True)

			handler_set(['mail/dovecot/sieve/spam=false'])
			utils.restart_listener()
			usermail = '%s@%s' % (uts.random_name(), domain)
			userdn, username = udm.create_user(
				set={
					'password': password,
					'mailHomeServer': host,
					'mailPrimaryAddress': usermail
				}
			)
			sieve_test(usermail, '')
			token = str(time.time())
			send_mail(recipients=usermail, msg=token, gtube=True)
			check_delivery(token, recipient_email=usermail, should_be_delivered=False, spam=True)


if __name__ == '__main__':
	main()

# vim: set ft=python ts=4 sw=4 noet :
