mirror of https://github.com/progval/irctest.git
Make port wait lazy. This way, we don't want for the server to start if the test is skipped immediately.
This commit is contained in:
parent
53f916991f
commit
d3617b7012
|
@ -58,16 +58,16 @@ class BaseClientController(_BaseController):
|
||||||
|
|
||||||
class BaseServerController(_BaseController):
|
class BaseServerController(_BaseController):
|
||||||
"""Base controller for IRC server."""
|
"""Base controller for IRC server."""
|
||||||
|
port_open = False
|
||||||
def run(self, hostname, port, password,
|
def run(self, hostname, port, password,
|
||||||
valid_metadata_keys, invalid_metadata_keys):
|
valid_metadata_keys, invalid_metadata_keys):
|
||||||
raise NotImplementedError()
|
raise NotImplementedError()
|
||||||
def registerUser(self, case, username, password=None):
|
def registerUser(self, case, username, password=None):
|
||||||
raise NotImplementedByController('registration')
|
raise NotImplementedByController('registration')
|
||||||
def wait_for_port(self, proc, port):
|
def wait_for_port(self):
|
||||||
port_open = False
|
while not self.port_open:
|
||||||
while not port_open:
|
|
||||||
time.sleep(0.1)
|
time.sleep(0.1)
|
||||||
for conn in psutil.Process(proc.pid).connections():
|
for conn in psutil.Process(self.proc.pid).connections():
|
||||||
if conn.laddr[1] == port:
|
if conn.laddr[1] == self.port:
|
||||||
port_open = True
|
self.port_open = True
|
||||||
|
|
||||||
|
|
|
@ -235,6 +235,7 @@ class BaseServerTestCase(_IrcTestCase):
|
||||||
def addClient(self, name=None, show_io=None):
|
def addClient(self, name=None, show_io=None):
|
||||||
"""Connects a client to the server and adds it to the dict.
|
"""Connects a client to the server and adds it to the dict.
|
||||||
If 'name' is not given, uses the lowest unused non-negative integer."""
|
If 'name' is not given, uses the lowest unused non-negative integer."""
|
||||||
|
self.controller.wait_for_port()
|
||||||
if not name:
|
if not name:
|
||||||
name = max(map(int, list(self.clients)+[0]))+1
|
name = max(map(int, list(self.clients)+[0]))+1
|
||||||
show_io = show_io if show_io is not None else self.show_io
|
show_io = show_io if show_io is not None else self.show_io
|
||||||
|
|
|
@ -47,6 +47,7 @@ class CharybdisController(BaseServerController, DirectoryBasedController):
|
||||||
'Defining valid and invalid METADATA keys.')
|
'Defining valid and invalid METADATA keys.')
|
||||||
assert self.proc is None
|
assert self.proc is None
|
||||||
self.create_config()
|
self.create_config()
|
||||||
|
self.port = port
|
||||||
password_field = 'password = "{}";'.format(password) if password else ''
|
password_field = 'password = "{}";'.format(password) if password else ''
|
||||||
with self.open_file('server.conf') as fd:
|
with self.open_file('server.conf') as fd:
|
||||||
fd.write(TEMPLATE_CONFIG.format(
|
fd.write(TEMPLATE_CONFIG.format(
|
||||||
|
@ -60,7 +61,6 @@ class CharybdisController(BaseServerController, DirectoryBasedController):
|
||||||
],
|
],
|
||||||
stderr=subprocess.DEVNULL
|
stderr=subprocess.DEVNULL
|
||||||
)
|
)
|
||||||
self.wait_for_port(self.proc, port)
|
|
||||||
|
|
||||||
|
|
||||||
def get_irctest_controller_class():
|
def get_irctest_controller_class():
|
||||||
|
|
|
@ -5,6 +5,7 @@ import tempfile
|
||||||
import subprocess
|
import subprocess
|
||||||
|
|
||||||
from irctest import authentication
|
from irctest import authentication
|
||||||
|
from irctest.basecontrollers import NotImplementedByController
|
||||||
from irctest.basecontrollers import BaseServerController, DirectoryBasedController
|
from irctest.basecontrollers import BaseServerController, DirectoryBasedController
|
||||||
|
|
||||||
TEMPLATE_CONFIG = """
|
TEMPLATE_CONFIG = """
|
||||||
|
@ -33,6 +34,7 @@ class InspircdController(BaseServerController, DirectoryBasedController):
|
||||||
raise NotImplementedByController(
|
raise NotImplementedByController(
|
||||||
'Defining valid and invalid METADATA keys.')
|
'Defining valid and invalid METADATA keys.')
|
||||||
assert self.proc is None
|
assert self.proc is None
|
||||||
|
self.port = port
|
||||||
self.create_config()
|
self.create_config()
|
||||||
password_field = 'password="{}"'.format(password) if password else ''
|
password_field = 'password="{}"'.format(password) if password else ''
|
||||||
with self.open_file('server.conf') as fd:
|
with self.open_file('server.conf') as fd:
|
||||||
|
@ -45,7 +47,6 @@ class InspircdController(BaseServerController, DirectoryBasedController):
|
||||||
os.path.join(self.directory, 'server.conf')],
|
os.path.join(self.directory, 'server.conf')],
|
||||||
stdout=subprocess.DEVNULL
|
stdout=subprocess.DEVNULL
|
||||||
)
|
)
|
||||||
self.wait_for_port(self.proc, port)
|
|
||||||
|
|
||||||
def get_irctest_controller_class():
|
def get_irctest_controller_class():
|
||||||
return InspircdController
|
return InspircdController
|
||||||
|
|
|
@ -80,6 +80,7 @@ class MammonController(BaseServerController, DirectoryBasedController):
|
||||||
if password is not None:
|
if password is not None:
|
||||||
raise NotImplementedByController('PASS command')
|
raise NotImplementedByController('PASS command')
|
||||||
assert self.proc is None
|
assert self.proc is None
|
||||||
|
self.port = port
|
||||||
self.create_config()
|
self.create_config()
|
||||||
with self.open_file('server.yml') as fd:
|
with self.open_file('server.yml') as fd:
|
||||||
fd.write(TEMPLATE_CONFIG.format(
|
fd.write(TEMPLATE_CONFIG.format(
|
||||||
|
@ -93,7 +94,6 @@ class MammonController(BaseServerController, DirectoryBasedController):
|
||||||
# print(fd.read())
|
# print(fd.read())
|
||||||
self.proc = subprocess.Popen(['mammond', '--nofork', #'--debug',
|
self.proc = subprocess.Popen(['mammond', '--nofork', #'--debug',
|
||||||
'--config', os.path.join(self.directory, 'server.yml')])
|
'--config', os.path.join(self.directory, 'server.yml')])
|
||||||
self.wait_for_port(self.proc, port)
|
|
||||||
|
|
||||||
def registerUser(self, case, username, password=None):
|
def registerUser(self, case, username, password=None):
|
||||||
# XXX: Move this somewhere else when
|
# XXX: Move this somewhere else when
|
||||||
|
|
Loading…
Reference in New Issue