Add to CI, cannot fail though

pull/2245/head
Gregor Kikelj 5 years ago
parent d6914cea23
commit 72cb298e6c
  1. 48
      selfdrive/test/test_valgrind_replay.py

@ -1,6 +1,7 @@
import os import os
import threading import threading
import time import time
import unittest
if "CI" in os.environ: if "CI" in os.environ:
def tqdm(x): def tqdm(x):
@ -14,17 +15,7 @@ from tools.lib.logreader import LogReader
ProcessConfig = namedtuple('ProcessConfig', ['proc_name', 'pub_sub', 'ignore', 'command', 'path']) ProcessConfig = namedtuple('ProcessConfig', ['proc_name', 'pub_sub', 'ignore', 'command', 'path'])
class SimplePubMaster(): BASE_URL = "https://commadataci.blob.core.windows.net/openpilotci/"
def __init__(self, services): # pylint: disable=super-init-not-called
self.sock = {}
for s in services:
self.sock[s] = messaging.pub_sock(s)
def send(self, s, dat):
# print(dat)
self.sock[s].send(dat.to_bytes())
CONFIGS = [ CONFIGS = [
ProcessConfig( ProcessConfig(
proc_name="ubloxd", proc_name="ubloxd",
@ -37,20 +28,32 @@ CONFIGS = [
), ),
] ]
def valgrindlauncher(arg, cwd): class SimplePubMaster():
def __init__(self, services): # pylint: disable=super-init-not-called
self.sock = {}
for s in services:
self.sock[s] = messaging.pub_sock(s)
def send(self, s, dat):
# print(dat)
self.sock[s].send(dat.to_bytes())
class TestValgrind(unittest.TestCase):
def valgrindlauncher(self, arg, cwd):
os.chdir(cwd) os.chdir(cwd)
# Run valgrind on a process # Run valgrind on a process
command = "valgrind --leak-check=full " + arg command = "valgrind --leak-check=full " + arg
print(command) # print(command)
output = os.popen(command) output = os.popen(command)
while True: while True:
s = output.read() s = output.read()
print(s)
if s == "": if s == "":
break break
print(s)
def replay_process(cfg, lr): def replay_process(self, cfg, lr):
pub_sockets = [s for s in cfg.pub_sub.keys() if s != 'can'] # We dump data from logs here pub_sockets = [s for s in cfg.pub_sub.keys() if s != 'can'] # We dump data from logs here
pm = SimplePubMaster(pub_sockets) pm = SimplePubMaster(pub_sockets)
@ -58,16 +61,14 @@ def replay_process(cfg, lr):
all_msgs = sorted(lr, key=lambda msg: msg.logMonoTime) all_msgs = sorted(lr, key=lambda msg: msg.logMonoTime)
pub_msgs = [msg for msg in all_msgs if msg.which() in list(cfg.pub_sub.keys())] pub_msgs = [msg for msg in all_msgs if msg.which() in list(cfg.pub_sub.keys())]
print(len(pub_msgs)) print(len(pub_msgs))
thread = threading.Thread(target=valgrindlauncher, args=(cfg.command, cfg.path)) thread = threading.Thread(target=self.valgrindlauncher, args=(cfg.command, cfg.path))
thread.daemon = True thread.daemon = True
thread.start() thread.start()
time.sleep(5) # We give the process time to start time.sleep(5) # We give the process time to start
for msg in tqdm(pub_msgs): for msg in tqdm(pub_msgs):
pm.send(msg.which(), msg.as_builder()) pm.send(msg.which(), msg.as_builder())
BASE_URL = "https://commadataci.blob.core.windows.net/openpilotci/" def get_segment(self, segment_name, original=True):
def get_segment(segment_name, original=True):
route_name, segment_num = segment_name.rsplit("--", 1) route_name, segment_num = segment_name.rsplit("--", 1)
if original: if original:
rlog_url = BASE_URL + "%s/%s/rlog.bz2" % (route_name.replace("|", "/"), segment_num) rlog_url = BASE_URL + "%s/%s/rlog.bz2" % (route_name.replace("|", "/"), segment_num)
@ -78,12 +79,15 @@ def get_segment(segment_name, original=True):
return rlog_url return rlog_url
if __name__ == "__main__": def test_config_0(self):
cfg = CONFIGS[0] cfg = CONFIGS[0]
URL = get_segment("0375fdf7b1ce594d|2019-06-13--08-32-25--3") URL = self.get_segment("0375fdf7b1ce594d|2019-06-13--08-32-25--3")
print(URL) print(URL)
lr = LogReader(URL) lr = LogReader(URL)
print(str(cfg)) print(str(cfg))
replay_process(cfg, lr) self.replay_process(cfg, lr)
time.sleep(30) time.sleep(30)
if __name__ == "__main__":
unittest.main()

Loading…
Cancel
Save