server: tests: ci ensure the server is stopped before scenario, and do not quit while the server is listening
This commit is contained in:
parent
8b96bdaf08
commit
f820e10fa7
1 changed files with 33 additions and 3 deletions
|
@ -1,8 +1,38 @@
|
||||||
|
import multiprocessing
|
||||||
|
import os
|
||||||
|
import socket
|
||||||
|
import subprocess
|
||||||
import time
|
import time
|
||||||
|
from contextlib import closing
|
||||||
|
from signal import SIGKILL
|
||||||
|
|
||||||
|
|
||||||
|
def before_scenario(context, scenario):
|
||||||
|
if is_server_listening("localhost", 8080):
|
||||||
|
assert False, "Server already started"
|
||||||
|
|
||||||
|
|
||||||
def after_scenario(context, scenario):
|
def after_scenario(context, scenario):
|
||||||
print("stopping server...")
|
print(f"stopping server pid={context.server_process.pid} ...")
|
||||||
context.server_process.kill()
|
context.server_process.kill()
|
||||||
# Wait few for socket to be free up
|
# Wait few for socket to free up
|
||||||
time.sleep(0.05)
|
time.sleep(0.1)
|
||||||
|
|
||||||
|
attempts = 0
|
||||||
|
while is_server_listening(context.server_fqdn, context.server_port):
|
||||||
|
print(f"stopping server pid={context.server_process.pid} ...")
|
||||||
|
os.kill(context.server_process.pid, SIGKILL)
|
||||||
|
time.sleep(0.5)
|
||||||
|
attempts += 1
|
||||||
|
if attempts > 1:
|
||||||
|
print(f"Server dandling exits, killing all {context.server_path} ...")
|
||||||
|
process = subprocess.run(['killall', '-9', context.server_path],
|
||||||
|
stderr=subprocess.PIPE,
|
||||||
|
universal_newlines=True)
|
||||||
|
print(process)
|
||||||
|
|
||||||
|
|
||||||
|
def is_server_listening(server_fqdn, server_port):
|
||||||
|
with closing(socket.socket(socket.AF_INET, socket.SOCK_STREAM)) as sock:
|
||||||
|
result = sock.connect_ex((server_fqdn, server_port))
|
||||||
|
return result == 0
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue