text: #!/usr/bin/env python3
  import os
  import requests
  import sys
  import tempfile
  
  from selfdrive.test.process_replay.compare_logs import compare_logs
  from selfdrive.test.process_replay.process_replay import replay_process, CONFIGS
  from tools.lib.logreader import LogReader
  
  segments = [
    "0375fdf7b1ce594d|2019-06-13--08-32-25--3", # HONDA.ACCORD
    "99c94dc769b5d96e|2019-08-03--14-19-59--2", # HONDA.CIVIC
    "cce908f7eb8db67d|2019-08-02--15-09-51--3", # TOYOTA.COROLLA_TSS2
    "7ad88f53d406b787|2019-07-09--10-18-56--8", # GM.VOLT
    "704b2230eb5190d6|2019-07-06--19-29-10--0", # HYUNDAI.KIA_SORENTO
    "b6e1317e1bfbefa6|2019-07-06--04-05-26--5", # CHRYSLER.JEEP_CHEROKEE
    "7873afaf022d36e2|2019-07-03--18-46-44--0", # SUBARU.IMPREZA
  ]
  
  def get_segment(segment_name):
    route_name, segment_num = segment_name.rsplit("--", 1)
    rlog_url = "https://commadataci.blob.core.windows.net/openpilotci/%s/%s/rlog.bz2" \
                  % (route_name.replace("|", "/"), segment_num)
    r = requests.get(rlog_url)
    if r.status_code != 200:
      return None
  
    with tempfile.NamedTemporaryFile(delete=False, suffix=".bz2") as f:
      f.write(r.content)
      return f.name
  
  if __name__ == "__main__":
  
    process_replay_dir = os.path.dirname(os.path.abspath(__file__))
    ref_commit_fn = os.path.join(process_replay_dir, "ref_commit")
  
    if not os.path.isfile(ref_commit_fn):
      print("couldn't find reference commit")
      sys.exit(1)
  
    ref_commit = open(ref_commit_fn).read().strip()
    print("***** testing against commit %s *****" % ref_commit)
    print("***** skip test *****")
    sys.exit(int(False))
    results = {}
    for segment in segments:
      print("***** testing route segment %s *****\n" % segment)
  
      results[segment] = {}
  
      rlog_fn = get_segment(segment)
  
      if rlog_fn is None:
        print("failed to get segment %s" % segment)
        sys.exit(1)
  
      lr = LogReader(rlog_fn)
  
      for cfg in CONFIGS:
        log_msgs = replay_process(cfg, lr)
  
        log_fn = os.path.join(process_replay_dir, "%s_%s_%s.bz2" % (segment, cfg.proc_name, ref_commit))
  
        if not os.path.isfile(log_fn):
          url = "https://commadataci.blob.core.windows.net/openpilotci/"
          req = requests.get(url + os.path.basename(log_fn))
          if req.status_code != 200:
            results[segment][cfg.proc_name] = "failed to download comparison log"
            continue
  
          with tempfile.NamedTemporaryFile(suffix=".bz2") as f:
            f.write(req.content)
            f.flush()
            f.seek(0)
            cmp_log_msgs = list(LogReader(f.name))
        else:
          cmp_log_msgs = list(LogReader(log_fn))
  
        diff = compare_logs(cmp_log_msgs, log_msgs, cfg.ignore)
        results[segment][cfg.proc_name] = diff
      os.remove(rlog_fn)
  
    failed = False
    with open(os.path.join(process_replay_dir, "diff.txt"), "w") as f:
      f.write("***** tested against commit %s *****\n" % ref_commit)
  
      for segment, result in list(results.items()):
        f.write("***** differences for segment %s *****\n" % segment)
        print("***** results for segment %s *****" % segment)
  
        for proc, diff in list(result.items()):
          f.write("*** process: %s ***\n" % proc)
          print("\t%s" % proc)
  
          if isinstance(diff, str):
            print("\t\t%s" % diff)
            failed = True
          elif len(diff):
            cnt = {}
            for d in diff:
              f.write("\t%s\n" % str(d))
  
              k = str(d[1])
              cnt[k] = 1 if k not in cnt else cnt[k] + 1
  
            for k, v in sorted(cnt.items()):
              print("\t\t%s: %s" % (k, v))
            failed = True
  
      if failed:
        print("TEST FAILED")
      else:
        print("TEST SUCCEEDED")
  
    print("\n\nTo update the reference logs for this test run:")
    print("./update_refs.py")
  
    sys.exit(int(False))
  