tests: use a random free port for smtp server (#44890)
This commit is contained in:
parent
eb22673ee5
commit
3d632d370c
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue