Not working, fixing replay_learning.py

pull/2217/head
Gregor Kikelj 5 years ago
parent 7878673284
commit 9c8e911ed2
  1. 15
      .pre-commit-config.yaml
  2. 8
      selfdrive/locationd/ubloxd_main.cc
  3. 3
      selfdrive/loggerd/tests/test_loggerd.py
  4. 27
      selfdrive/manager.py
  5. 1
      selfdrive/test/process_replay/process_replay.py
  6. 5
      selfdrive/test/process_replay/test_processes.py
  7. 46
      selfdrive/test/valgrind_testing.py

@ -31,17 +31,4 @@ repos:
language: system language: system
types: [python] types: [python]
exclude: '^(pyextra)|(external)|(cereal)|(rednose)|(panda)|(laika)|(laika_repo)|(rednose_repo)/' exclude: '^(pyextra)|(external)|(cereal)|(rednose)|(panda)|(laika)|(laika_repo)|(rednose_repo)/'
- repo: local
hooks:
- id: cppcheck
name: cppcheck
entry: cppcheck
language: system
types: [c++]
exclude: '^(phonelibs)|(external)|(cereal)|(opendbc)|(panda)|(tools)|(selfdrive/modeld/thneed/debug)|(selfdrive/modeld/test)|(selfdrive/camerad/test)/|(installer)'
args:
- --error-exitcode=1
- --language=c++
- --quiet
- --force
- -j8

@ -12,6 +12,7 @@
#include <math.h> #include <math.h>
#include <ctime> #include <ctime>
#include <chrono> #include <chrono>
// #include <iostream>
#include "messaging.hpp" #include "messaging.hpp"
#include "common/util.h" #include "common/util.h"
@ -29,6 +30,7 @@ void set_do_exit(int sig) {
using namespace ublox; using namespace ublox;
int ubloxd_main(poll_ubloxraw_msg_func poll_func, send_gps_event_func send_func) { int ubloxd_main(poll_ubloxraw_msg_func poll_func, send_gps_event_func send_func) {
// std::cout<<"Runnning ublox_main"<<std::endl;
LOGW("starting ubloxd"); LOGW("starting ubloxd");
signal(SIGINT, (sighandler_t) set_do_exit); signal(SIGINT, (sighandler_t) set_do_exit);
signal(SIGTERM, (sighandler_t) set_do_exit); signal(SIGTERM, (sighandler_t) set_do_exit);
@ -41,8 +43,9 @@ int ubloxd_main(poll_ubloxraw_msg_func poll_func, send_gps_event_func send_func)
subscriber->setTimeout(100); subscriber->setTimeout(100);
PubMaster pm({"ubloxGnss", "gpsLocationExternal"}); PubMaster pm({"ubloxGnss", "gpsLocationExternal"});
// int t=0;
while (!do_exit) { while (!do_exit) {
// std::cout<<"Got to here on round "<<t++<<std::endl;
Message * msg = subscriber->receive(); Message * msg = subscriber->receive();
if (!msg){ if (!msg){
if (errno == EINTR) { if (errno == EINTR) {
@ -53,7 +56,8 @@ int ubloxd_main(poll_ubloxraw_msg_func poll_func, send_gps_event_func send_func)
auto amsg = kj::heapArray<capnp::word>((msg->getSize() / sizeof(capnp::word)) + 1); auto amsg = kj::heapArray<capnp::word>((msg->getSize() / sizeof(capnp::word)) + 1);
memcpy(amsg.begin(), msg->getData(), msg->getSize()); memcpy(amsg.begin(), msg->getData(), msg->getSize());
// std::cout<<"Message is :"<<std::endl;
// std::cout<<amsg.begin()<<std::endl;
capnp::FlatArrayMessageReader cmsg(amsg); capnp::FlatArrayMessageReader cmsg(amsg);
cereal::Event::Reader event = cmsg.getRoot<cereal::Event>(); cereal::Event::Reader event = cmsg.getRoot<cereal::Event>();
auto ubloxRaw = event.getUbloxRaw(); auto ubloxRaw = event.getUbloxRaw();

@ -40,7 +40,8 @@ class TestLoggerd(unittest.TestCase):
@classmethod @classmethod
def setUpClass(cls): def setUpClass(cls):
if not (EON or TICI): if not (EON or TICI):
raise unittest.SkipTest pass
# raise unittest.SkipTest
def setUp(self): def setUp(self):
self._clear_logs() self._clear_logs()

@ -22,6 +22,7 @@ os.environ['BASEDIR'] = BASEDIR
TOTAL_SCONS_NODES = 1005 TOTAL_SCONS_NODES = 1005
prebuilt = os.path.exists(os.path.join(BASEDIR, 'prebuilt')) prebuilt = os.path.exists(os.path.join(BASEDIR, 'prebuilt'))
VALGRIND = os.getenv("VALGRIND") is not None
# Create folders needed for msgq # Create folders needed for msgq
try: try:
os.mkdir("/dev/shm") os.mkdir("/dev/shm")
@ -169,14 +170,14 @@ managed_processes = {
"plannerd": "selfdrive.controls.plannerd", "plannerd": "selfdrive.controls.plannerd",
"radard": "selfdrive.controls.radard", "radard": "selfdrive.controls.radard",
"dmonitoringd": "selfdrive.monitoring.dmonitoringd", "dmonitoringd": "selfdrive.monitoring.dmonitoringd",
"ubloxd": ("selfdrive/locationd", ["./ubloxd"]), "ubloxd": ("selfdrive/locationd", ["./ubloxd"]), # 0
"loggerd": ("selfdrive/loggerd", ["./loggerd"]), "loggerd": ("selfdrive/loggerd", ["./loggerd"]), # 1
"logmessaged": "selfdrive.logmessaged", "logmessaged": "selfdrive.logmessaged",
"locationd": "selfdrive.locationd.locationd", "locationd": "selfdrive.locationd.locationd",
"tombstoned": "selfdrive.tombstoned", "tombstoned": "selfdrive.tombstoned",
"logcatd": ("selfdrive/logcatd", ["./logcatd"]), "logcatd": ("selfdrive/logcatd", ["./logcatd"]),
"proclogd": ("selfdrive/proclogd", ["./proclogd"]), "proclogd": ("selfdrive/proclogd", ["./proclogd"]),
"boardd": ("selfdrive/boardd", ["./boardd"]), # not used directly "boardd": ("selfdrive/boardd", ["./boardd"]),
"pandad": "selfdrive.pandad", "pandad": "selfdrive.pandad",
"ui": ("selfdrive/ui", ["./ui"]), "ui": ("selfdrive/ui", ["./ui"]),
"calibrationd": "selfdrive.locationd.calibrationd", "calibrationd": "selfdrive.locationd.calibrationd",
@ -291,6 +292,18 @@ def nativelauncher(pargs, cwd):
os.chmod(pargs[0], 0o700) os.chmod(pargs[0], 0o700)
os.execvp(pargs[0], pargs) os.execvp(pargs[0], pargs)
def valgrindlauncher(pargs, cwd):
# exec the process
os.chdir(cwd)
# Run valgrind on a process
command = "valgrind --leak-check=full " + pargs[0]
output = os.popen(command)
while True:
s = output.read()
if s == "":
break
# print(s)
def start_managed_process(name): def start_managed_process(name):
if name in running or name not in managed_processes: if name in running or name not in managed_processes:
@ -302,7 +315,15 @@ def start_managed_process(name):
else: else:
pdir, pargs = proc pdir, pargs = proc
cwd = os.path.join(BASEDIR, pdir) cwd = os.path.join(BASEDIR, pdir)
if VALGRIND:
print("\nVALGRIND" * 5)
print(pargs)
print(cwd)
running[name] = Process(name=name, target=valgrindlauncher, args=(pargs, cwd))
else:
cloudlog.info("starting process %s" % name) cloudlog.info("starting process %s" % name)
print(pargs)
print(cwd)
running[name] = Process(name=name, target=nativelauncher, args=(pargs, cwd)) running[name] = Process(name=name, target=nativelauncher, args=(pargs, cwd))
running[name].start() running[name].start()

@ -288,6 +288,7 @@ CONFIGS = [
] ]
def replay_process(cfg, lr): def replay_process(cfg, lr):
print("Running replay on inputs " + str(cfg) + " " + str(lr))
sub_sockets = [s for _, sub in cfg.pub_sub.items() for s in sub] sub_sockets = [s for _, sub in cfg.pub_sub.items() for s in sub]
pub_sockets = [s for s in cfg.pub_sub.keys() if s != 'can'] pub_sockets = [s for s in cfg.pub_sub.keys() if s != 'can']

@ -105,6 +105,7 @@ def format_diff(results, ref_commit):
return diff1, diff2, failed return diff1, diff2, failed
if __name__ == "__main__": if __name__ == "__main__":
# os.environ["VALGRIND"] = "1"
parser = argparse.ArgumentParser(description="Regression test to identify changes in a process's output") parser = argparse.ArgumentParser(description="Regression test to identify changes in a process's output")
@ -140,9 +141,8 @@ if __name__ == "__main__":
tested_cars = set(c.lower() for c, _ in segments) tested_cars = set(c.lower() for c, _ in segments)
untested = (set(interface_names) - set(excluded_interfaces)) - tested_cars untested = (set(interface_names) - set(excluded_interfaces)) - tested_cars
assert len(untested) == 0, "Cars missing routes: %s" % (str(untested)) assert len(untested) == 0, "Cars missing routes: %s" % (str(untested))
results: Any = {} results: Any = {}
for car_brand, segment in segments: for car_brand, segment in segments: # Runs all tests, can focus on inside of the loop :)
if (cars_whitelisted and car_brand.upper() not in args.whitelist_cars) or \ if (cars_whitelisted and car_brand.upper() not in args.whitelist_cars) or \
(not cars_whitelisted and car_brand.upper() in args.blacklist_cars): (not cars_whitelisted and car_brand.upper() in args.blacklist_cars):
continue continue
@ -152,6 +152,7 @@ if __name__ == "__main__":
results[segment] = {} results[segment] = {}
rlog_fn = get_segment(segment) rlog_fn = get_segment(segment)
print(rlog_fn)
lr = LogReader(rlog_fn) lr = LogReader(rlog_fn)
for cfg in CONFIGS: for cfg in CONFIGS:

@ -1,15 +1,45 @@
import os import os
import time import time
import subprocess from multiprocessing import Process
import cereal.messaging as messaging
import random
def valgrindlauncher(arg, cwd):
os.chdir(cwd)
# Run valgrind on a process
command = "valgrind " + arg
print(command)
output = os.popen(command)
while True:
s = output.read()
if s == "":
break
print(s)
def test_ubloxd(): def test_ubloxd():
# unlogger_command = '~/openpilot/tools/replay/unlogger.py "202fc0c905c39dd8|2020-09-09--10-50-37"' running = Process(name="ublox", target=valgrindlauncher, args=("./ubloxd & sleep 10; kill $!", "../locationd"))
subprocess.Popen(["python", "~/openpilot/tools/replay/unlogger.py", "202fc0c905c39dd8|2020-09-09--10-50-37"]) running.start()
def random_carstate():
fields = ["vEgo", "aEgo", "gas", "steeringAngle"]
msg = messaging.new_message("carState")
cs = msg.carState
for f in fields:
setattr(cs, f, random.random() * 10)
return msg
def send_gps():
pub_sock = messaging.pub_sock("ubloxRaw")
time.sleep(3)
time.sleep(5) msg = random_carstate()
pub_sock.send(msg.to_bytes())
output = os.popen("valgrind --leak-check=full ~/openpilot/selfdrive/locationd/ubloxd & sleep 10; kill $!") # python test_loggerd in tests kind of works, with VALGRIND=1 in ENV
print("\n\n\n\n") def test_loggerd():
output = os.popen("valgrind --leak-check=full ~/openpilot/selfdrive/loggerd/loggerd & sleep 30; kill $!")
print(2 * "\n")
while True: while True:
s = output.read() s = output.read()
if s == "": if s == "":
@ -19,4 +49,6 @@ def test_ubloxd():
if __name__ == "__main__": if __name__ == "__main__":
test_ubloxd() # pm = messaging.PubMaster(['ubloxRaw'])
send_gps()
# test_ubloxd()

Loading…
Cancel
Save