@ -1,21 +1,26 @@
#!/usr/bin/env python3
import os
import time
import unit test
import py test
import cereal . messaging as messaging
from cereal import log
from openpilot . common . gpio import gpio_set , gpio_init
from panda import Panda , PandaDFU , PandaProtocolMismatch
from openpilot . selfdrive . test . helpers import phone_only
from openpilot . selfdrive . manager . process_config import managed_processes
from openpilot . system . hardware import HARDWARE
from openpilot . system . hardware import HARDWARE , PC
from openpilot . system . hardware . tici . pins import GPIO
HERE = os . path . dirname ( os . path . realpath ( __file__ ) )
class TestPandad ( unittest . TestCase ) :
@pytest . mark . skipif ( PC , reason = " needs a panda " )
class TestPandad :
def setUp ( self ) :
# ensure panda is up
if len ( Panda . list ( ) ) == 0 :
self . _run_test ( 60 )
def tearDown ( self ) :
managed_processes [ ' pandad ' ] . stop ( )
@ -54,7 +59,7 @@ class TestPandad(unittest.TestCase):
assert Panda . wait_for_panda ( None , 10 )
if expect_mismatch :
with self . assertR aises( PandaProtocolMismatch ) :
with pytest . r aises( PandaProtocolMismatch ) :
Panda ( )
else :
with Panda ( ) as p :
@ -62,19 +67,16 @@ class TestPandad(unittest.TestCase):
self . _run_test ( 45 )
@phone_only
def test_in_dfu ( self ) :
HARDWARE . recover_internal_panda ( )
self . _run_test ( 60 )
@phone_only
def test_in_bootstub ( self ) :
with Panda ( ) as p :
p . reset ( enter_bootstub = True )
assert p . bootstub
self . _run_test ( )
@phone_only
def test_internal_panda_reset ( self ) :
gpio_init ( GPIO . STM_RST_N , True )
gpio_set ( GPIO . STM_RST_N , 1 )
@ -84,28 +86,22 @@ class TestPandad(unittest.TestCase):
assert any ( Panda ( s ) . is_internal ( ) for s in Panda . list ( ) )
@phone_only
def test_best_case_startup_time ( self ) :
# run once so we're setup
self . _run_test ( )
self . _run_test ( 60 )
# should be fast this time
self . _run_test ( 8 )
@phone_only
@pytest . mark . skipif ( HARDWARE . get_device_type ( ) == ' tici ' , reason = " SPI test " )
def test_protocol_version_check ( self ) :
if HARDWARE . get_device_type ( ) == ' tici ' :
self . skipTest ( " " )
# flash old fw
fn = os . path . join ( HERE , " bootstub.panda_h7_spiv0.bin " )
self . _flash_bootstub_and_test ( fn , expect_mismatch = True )
@phone_only
def test_release_to_devel_bootstub ( self ) :
self . _flash_bootstub_and_test ( None )
@phone_only
def test_recover_from_bad_bootstub ( self ) :
self . _go_to_dfu ( )
with PandaDFU ( None ) as pd :
@ -115,7 +111,3 @@ class TestPandad(unittest.TestCase):
self . _assert_no_panda ( )
self . _run_test ( 60 )
if __name__ == " __main__ " :
unittest . main ( )