Skip to content

Instantly share code, notes, and snippets.

@FFY00
Created September 20, 2019 14:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save FFY00/1d5bf1c1b720cd7e7d941eeec3604084 to your computer and use it in GitHub Desktop.
Save FFY00/1d5bf1c1b720cd7e7d941eeec3604084 to your computer and use it in GitHub Desktop.
ratbag-emu server fixture with random port
@pytest.fixture(autouse=True, scope='session')
@pytest.mark.first
def server(self, port_range=[9000, 9999]):
p = port = None
try:
stdout = open('ratbag-emu-log-stdout.txt', 'w')
stderr = open('ratbag-emu-log-stderr.txt', 'w')
def try_port(port):
ret = False
try:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind(('0.0.0.0', port))
ret = True
finally:
sock.close()
return ret
tries = 0
found = False
while not found:
port = random.randint(port_range[0], port_range[1])
found = try_port(port)
tries += 1
assert tries < 100, 'Reached max tries when trying to find a port'
p = subprocess.Popen(['/usr/bin/env', 'python3', '-m', 'ratbag_emu', '-p', str(port)],
stdout=stdout, stderr=stderr)
sleep(2)
yield port
finally:
if p:
p.kill()
if stdout:
stdout.close()
if stderr:
stderr.close()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment