diff --git a/tests/test_emails.py b/tests/test_emails.py index b87dbef..fd163f9 100644 --- a/tests/test_emails.py +++ b/tests/test_emails.py @@ -5,6 +5,7 @@ import dns.resolver from dns import name from dns.rdtypes.ANY import MX, TXT import mock +import random import smtplib import smtpd import socket @@ -21,13 +22,24 @@ from test_manager import login @pytest.fixture -def dns_resolver(monkeypatch): +def port_available(): + errno = 0 + while not errno: + port = random.randint(49152, 65534) + sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + errno = sock.connect_ex(('127.0.0.1', port)) + sock.close() + return port + + +@pytest.fixture +def dns_resolver(monkeypatch, port_available): def fn(value, kind): if kind == 'MX': mx = mock.create_autospec(MX) mx.exchange = mock.create_autospec(name.Name) mx.exchange.to_text = mock.MagicMock() - mx.exchange.to_text.return_value = 'localhost:10025' + mx.exchange.to_text.return_value = 'localhost:%s' % port_available mx.preference = mock.create_autospec(name.Name) mx.preference.to_text = mock.MagicMock() mx.preference.to_text.return_value = 10 @@ -47,7 +59,7 @@ def dns_resolver(monkeypatch): @pytest.fixture -def smtp_server(monkeypatch): +def smtp_server(monkeypatch, port_available): class RecipientValidatingSMTPChannel(smtpd.SMTPChannel): def smtp_RCPT(self, arg): if six.PY2: @@ -67,7 +79,7 @@ def smtp_server(monkeypatch): conn, addr = self.accept() channel = RecipientValidatingSMTPChannel(self, conn, addr) - server = MailServer(('localhost', 10025), None) + server = MailServer(('localhost', port_available), None) thread = threading.Thread(target=asyncore.loop, kwargs={'timeout': 1}) thread.start() yield