ci: tests: fix behavior on windows
This commit is contained in:
parent
b24f30fdad
commit
fcf327f0e6
3 changed files with 64 additions and 65 deletions
|
@ -1,10 +1,12 @@
|
||||||
import errno
|
|
||||||
import os
|
import os
|
||||||
import socket
|
|
||||||
import subprocess
|
|
||||||
import time
|
|
||||||
from contextlib import closing
|
|
||||||
import signal
|
import signal
|
||||||
|
import socket
|
||||||
|
import sys
|
||||||
|
import time
|
||||||
|
import traceback
|
||||||
|
from contextlib import closing
|
||||||
|
|
||||||
|
import psutil
|
||||||
|
|
||||||
|
|
||||||
def before_scenario(context, scenario):
|
def before_scenario(context, scenario):
|
||||||
|
@ -20,7 +22,8 @@ def before_scenario(context, scenario):
|
||||||
|
|
||||||
|
|
||||||
def after_scenario(context, scenario):
|
def after_scenario(context, scenario):
|
||||||
if context.server_process is None:
|
try:
|
||||||
|
if 'server_process' not in context or context.server_process is None:
|
||||||
return
|
return
|
||||||
if scenario.status == "failed":
|
if scenario.status == "failed":
|
||||||
if 'GITHUB_ACTIONS' in os.environ:
|
if 'GITHUB_ACTIONS' in os.environ:
|
||||||
|
@ -33,7 +36,6 @@ def after_scenario(context, scenario):
|
||||||
print("\x1b[33;101mERROR: Server stopped listening\x1b[0m\n")
|
print("\x1b[33;101mERROR: Server stopped listening\x1b[0m\n")
|
||||||
|
|
||||||
if not pid_exists(context.server_process.pid):
|
if not pid_exists(context.server_process.pid):
|
||||||
print_server_logs(context)
|
|
||||||
assert False, f"Server not running pid={context.server_process.pid} ..."
|
assert False, f"Server not running pid={context.server_process.pid} ..."
|
||||||
|
|
||||||
server_graceful_shutdown(context)
|
server_graceful_shutdown(context)
|
||||||
|
@ -48,9 +50,12 @@ def after_scenario(context, scenario):
|
||||||
attempts += 1
|
attempts += 1
|
||||||
if attempts > 5:
|
if attempts > 5:
|
||||||
server_kill_hard(context)
|
server_kill_hard(context)
|
||||||
|
except:
|
||||||
if scenario.status == "failed" or context.debug:
|
exc = sys.exception()
|
||||||
print_server_logs(context)
|
print("error in after scenario: \n")
|
||||||
|
print(exc)
|
||||||
|
print("*** print_tb: \n")
|
||||||
|
traceback.print_tb(exc.__traceback__, file=sys.stdout)
|
||||||
|
|
||||||
|
|
||||||
def server_graceful_shutdown(context):
|
def server_graceful_shutdown(context):
|
||||||
|
@ -71,11 +76,11 @@ def server_kill_hard(context):
|
||||||
path = context.server_path
|
path = context.server_path
|
||||||
|
|
||||||
print(f"Server dangling exits, hard killing force {pid}={path}...\n")
|
print(f"Server dangling exits, hard killing force {pid}={path}...\n")
|
||||||
if os.name == 'nt':
|
try:
|
||||||
process = subprocess.check_output(['taskkill', '/F', '/pid', str(pid)]).decode()
|
psutil.Process(pid).kill()
|
||||||
print(process)
|
except psutil.NoSuchProcess:
|
||||||
else:
|
return False
|
||||||
os.kill(-pid, signal.SIGKILL)
|
return True
|
||||||
|
|
||||||
|
|
||||||
def is_server_listening(server_fqdn, server_port):
|
def is_server_listening(server_fqdn, server_port):
|
||||||
|
@ -88,31 +93,9 @@ def is_server_listening(server_fqdn, server_port):
|
||||||
|
|
||||||
|
|
||||||
def pid_exists(pid):
|
def pid_exists(pid):
|
||||||
"""Check whether pid exists in the current process table."""
|
|
||||||
if pid < 0:
|
|
||||||
return False
|
|
||||||
if os.name == 'nt':
|
|
||||||
output = subprocess.check_output(['TASKLIST', '/FI', f'pid eq {pid}']).decode()
|
|
||||||
print(output)
|
|
||||||
return "No tasks are running" not in output
|
|
||||||
else:
|
|
||||||
try:
|
try:
|
||||||
os.kill(pid, 0)
|
psutil.Process(pid)
|
||||||
except OSError as e:
|
except psutil.NoSuchProcess:
|
||||||
return e.errno == errno.EPERM
|
return False
|
||||||
else:
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
def print_server_logs(context):
|
|
||||||
print("Trying to find server logs:")
|
|
||||||
out, err = context.server_process.communicate()
|
|
||||||
if out:
|
|
||||||
print("Server stdout:\n")
|
|
||||||
print(out.decode('utf-8'))
|
|
||||||
print("\n")
|
|
||||||
if err:
|
|
||||||
print("Server stderr:\n")
|
|
||||||
print(err.decode('utf-8'))
|
|
||||||
print("\n")
|
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,8 @@ import os
|
||||||
import re
|
import re
|
||||||
import socket
|
import socket
|
||||||
import subprocess
|
import subprocess
|
||||||
|
import sys
|
||||||
|
import threading
|
||||||
import time
|
import time
|
||||||
from contextlib import closing
|
from contextlib import closing
|
||||||
from re import RegexFlag
|
from re import RegexFlag
|
||||||
|
@ -1095,10 +1097,23 @@ def start_server_background(context):
|
||||||
|
|
||||||
pkwargs = {
|
pkwargs = {
|
||||||
'creationflags': flags,
|
'creationflags': flags,
|
||||||
'stderr': subprocess.PIPE,
|
'stdout': subprocess.PIPE,
|
||||||
'stdout': subprocess.PIPE
|
'stderr': subprocess.PIPE
|
||||||
}
|
}
|
||||||
context.server_process = subprocess.Popen(
|
context.server_process = subprocess.Popen(
|
||||||
[str(arg) for arg in [context.server_path, *server_args]],
|
[str(arg) for arg in [context.server_path, *server_args]],
|
||||||
**pkwargs)
|
**pkwargs)
|
||||||
|
|
||||||
|
def log_stdout(process):
|
||||||
|
for line in iter(process.stdout.readline, b''):
|
||||||
|
print(line.decode('utf-8'), end='')
|
||||||
|
thread_stdout = threading.Thread(target=log_stdout, args=(context.server_process,))
|
||||||
|
thread_stdout.start()
|
||||||
|
|
||||||
|
def log_stderr(process):
|
||||||
|
for line in iter(process.stderr.readline, b''):
|
||||||
|
print(line.decode('utf-8'), end='', file=sys.stderr)
|
||||||
|
thread_stderr = threading.Thread(target=log_stderr, args=(context.server_process,))
|
||||||
|
thread_stderr.start()
|
||||||
|
|
||||||
print(f"server pid={context.server_process.pid}, behave pid={os.getpid()}")
|
print(f"server pid={context.server_process.pid}, behave pid={os.getpid()}")
|
||||||
|
|
|
@ -3,4 +3,5 @@ behave~=1.2.6
|
||||||
huggingface_hub~=0.20.3
|
huggingface_hub~=0.20.3
|
||||||
numpy~=1.24.4
|
numpy~=1.24.4
|
||||||
openai~=0.25.0
|
openai~=0.25.0
|
||||||
|
psutil~=5.9.8
|
||||||
prometheus-client~=0.20.0
|
prometheus-client~=0.20.0
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue