diff --git a/tests/test_mail.py b/tests/test_mail.py index e0848fdd97fd7557c0b3068f217525a4be69b047..50a304329332b854208428afdcd837d0f44dcf7a 100755 --- a/tests/test_mail.py +++ b/tests/test_mail.py @@ -17,8 +17,11 @@ DEF = '\033[0m' os.chdir(os.path.dirname(__file__)) if not os.path.isfile('../utils.py'): - print('conf.sh not found') + print('The envsetup configuration was not found.') sys.exit(1) +else: + es_utils = imp.load_source('es_utils', '../utils.py') + conf = es_utils.load_conf() def print_color(txt, col): @@ -33,57 +36,65 @@ def print_green(txt): print_color(txt, GREEN) -all_ok = True +def check_listening_port(): + # check that postfix listens the port 25 correctly + status, out = subprocess.getstatusoutput('netstat -pant | grep master | grep 127.0.0.1:25') + if status != 0: + print_red('The port 25 is not listened by postfix "master" process.') + return False + else: + print_green('Postfix is listening port 25 correctly.') + return True -def get_configured_relay(): +def check_relay(): + print('Checking if SMTP relay conforms to conf.') status, out = subprocess.getstatusoutput('grep relayhost /etc/postfix/main.cf') if status == 0: - return out.split('relayhost = ')[1] - - -def check_relay(): - global all_ok - global conf - configured_relay = get_configured_relay() - print('Checking if SMTP relay conforms to conf') - es_utils = imp.load_source('es_utils', '../utils.py') - conf = es_utils.load_conf() + configured_relay = out[len('relayhost'):].strip(' \t=') + else: + print_red('Configured relay not found.') + return False conf_relay = conf.get('EMAIL_SMTP_SERVER') if conf_relay != configured_relay: - print_red('Configured STMP relay (%s) does not match the expected value (%s)' % (configured_relay, conf_relay)) - all_ok = False + print_red('Configured STMP relay (%s) does not match the expected value (%s).' % (configured_relay, conf_relay)) + return False else: - print_green('STMP relay is properly set') + print_green('STMP relay is properly set.') + return True def send_test_email(): - print('Sending test email') - global all_ok - email = "noreply+%s@ubicast.eu" % random.randint(0, 1000) + email = 'noreply+%s-%s@ubicast.eu' % (time.time(), random.randint(0, 1000)) + print('Sending test email to "%s".' % email) cmd = 'echo "This is a test email" | mail -s "Test email from `cat /etc/hostname`" %s' % email + subprocess.getstatusoutput(cmd) + time.sleep(3) + cmd = 'grep "%s" /var/log/mail.log' % email status, out = subprocess.getstatusoutput(cmd) - time.sleep(5) - status, out = subprocess.getstatusoutput('grep %s /var/log/mail.log | grep bounced' % email) - if status == 0: - print_red('Sending mail failed') - all_ok = False + if status != 0: + time.sleep(7) + status, out = subprocess.getstatusoutput(cmd) + if status != 0: + print_red('Failed to send email.') + print('No log entry found using command: %s' % cmd) + return False + if 'bounced' not in out or 'The email account that you tried to reach does not exist.' in out: + print_green('Email sent.') + return True else: - print_green('Email sent') + print_red('Failed to send email.') + print('Sending log line:\n%s' % out) + return False if not os.path.exists('/etc/postfix'): print_red('Postfix dir does not exists, please install postfix.') - all_ok = False -else: - # check that postfix listens the port 25 correctly - status, out = subprocess.getstatusoutput('netstat -pant | grep master | grep 127.0.0.1:25') - if status != 0: - print_red('The port 25 is not listened by any process.') - all_ok = False - else: - print_green('Postfix listening port: OK.') - check_relay() - send_test_email() + sys.exit(1) + +all_ok = check_listening_port() +if all_ok: + all_ok = all_ok and check_relay() + all_ok = all_ok and send_test_email() sys.exit(int(not all_ok))