parent
d5c6e4a205
commit
e8b1e69ac1
2 changed files with 0 additions and 136 deletions
@ -1,135 +0,0 @@ |
||||
#!/usr/bin/env python3 |
||||
import json |
||||
import os |
||||
import signal |
||||
import subprocess |
||||
import time |
||||
|
||||
import requests |
||||
|
||||
from selfdrive.manager.process_config import managed_processes |
||||
from common.params import Params |
||||
from common.realtime import sec_since_boot |
||||
from selfdrive.test.helpers import with_processes |
||||
|
||||
os.environ['FAKEUPLOAD'] = "1" |
||||
|
||||
|
||||
def test_athena(): |
||||
start = sec_since_boot() |
||||
managed_processes['manage_athenad'].start() |
||||
|
||||
params = Params() |
||||
manage_athenad_pid = params.get("AthenadPid") |
||||
assert manage_athenad_pid is not None |
||||
try: |
||||
os.kill(int(manage_athenad_pid), 0) |
||||
# process is running |
||||
except OSError: |
||||
assert False, "manage_athenad is dead" |
||||
|
||||
def expect_athena_starts(timeout=30): |
||||
now = time.monotonic() |
||||
athenad_pid = None |
||||
while athenad_pid is None: |
||||
try: |
||||
athenad_pid = subprocess.check_output(["pgrep", "-P", manage_athenad_pid], encoding="utf-8").strip() |
||||
return athenad_pid |
||||
except subprocess.CalledProcessError: |
||||
if time.monotonic() - now > timeout: |
||||
assert False, f"Athena did not start within {timeout} seconds" |
||||
time.sleep(0.5) |
||||
|
||||
def athena_post(payload, max_retries=5, wait=5): |
||||
tries = 0 |
||||
while 1: |
||||
try: |
||||
resp = requests.post( |
||||
"https://athena.comma.ai/" + params.get("DongleId", encoding="utf-8"), |
||||
headers={ |
||||
"Authorization": "JWT thisisnotajwt", |
||||
"Content-Type": "application/json" |
||||
}, |
||||
data=json.dumps(payload), |
||||
timeout=30 |
||||
) |
||||
resp_json = resp.json() |
||||
if resp_json.get('error'): |
||||
raise Exception(resp_json['error']) |
||||
return resp_json |
||||
except Exception as e: |
||||
time.sleep(wait) |
||||
tries += 1 |
||||
if tries == max_retries: |
||||
raise |
||||
else: |
||||
print(f'athena_post failed {e}. retrying...') |
||||
|
||||
def expect_athena_registers(test_t0): |
||||
resp = athena_post({ |
||||
"method": "echo", |
||||
"params": ["hello"], |
||||
"id": 0, |
||||
"jsonrpc": "2.0" |
||||
}, max_retries=12, wait=5) |
||||
assert resp.get('result') == "hello", f'Athena failed to register ({resp})' |
||||
|
||||
last_pingtime = params.get("LastAthenaPingTime", encoding='utf8') |
||||
assert last_pingtime, last_pingtime |
||||
assert ((int(last_pingtime)/1e9) - test_t0) < (sec_since_boot() - test_t0) |
||||
|
||||
try: |
||||
athenad_pid = expect_athena_starts() |
||||
# kill athenad and ensure it is restarted (check_output will throw if it is not) |
||||
os.kill(int(athenad_pid), signal.SIGINT) |
||||
expect_athena_starts() |
||||
|
||||
if not os.getenv('COMMA_JWT'): |
||||
print('WARNING: COMMA_JWT env not set, will not test requests to athena.comma.ai') |
||||
return |
||||
|
||||
expect_athena_registers(start) |
||||
|
||||
print("ATHENA: getSimInfo") |
||||
resp = athena_post({ |
||||
"method": "getSimInfo", |
||||
"id": 0, |
||||
"jsonrpc": "2.0" |
||||
}) |
||||
assert resp.get('result'), resp |
||||
assert 'sim_id' in resp['result'], resp['result'] |
||||
|
||||
print("ATHENA: takeSnapshot") |
||||
resp = athena_post({ |
||||
"method": "takeSnapshot", |
||||
"id": 0, |
||||
"jsonrpc": "2.0" |
||||
}) |
||||
assert resp.get('result'), resp |
||||
assert resp['result']['jpegBack'], resp['result'] |
||||
|
||||
@with_processes(["deviceStated"]) |
||||
def test_athena_deviceState(): |
||||
print("ATHENA: getMessage(deviceState)") |
||||
resp = athena_post({ |
||||
"method": "getMessage", |
||||
"params": {"service": "deviceState", "timeout": 5000}, |
||||
"id": 0, |
||||
"jsonrpc": "2.0" |
||||
}) |
||||
assert resp.get('result'), resp |
||||
assert resp['result']['deviceState'], resp['result'] |
||||
test_athena_deviceState() |
||||
finally: |
||||
try: |
||||
athenad_pid = subprocess.check_output(["pgrep", "-P", manage_athenad_pid], encoding="utf-8").strip() |
||||
except subprocess.CalledProcessError: |
||||
athenad_pid = None |
||||
|
||||
try: |
||||
os.kill(int(manage_athenad_pid), signal.SIGINT) |
||||
os.kill(int(athenad_pid), signal.SIGINT) |
||||
except (OSError, TypeError): |
||||
pass |
||||
|
||||
|
Loading…
Reference in new issue