move nose tests to unittest (#22665)
	
		
	
				
					
				
			* move to unittest
* boardd loopback
* no more nose
* phone only
* fix panda decorator
old-commit-hash: b5960b9dc8
			
			
				vw-mqb-aeb
			
			
		
							parent
							
								
									fc4b12c05c
								
							
						
					
					
						commit
						c9ebc1c442
					
				
				 5 changed files with 155 additions and 142 deletions
			
			
		@ -0,0 +1,69 @@ | 
				
			|||||||
 | 
					#!/usr/bin/env python3 | 
				
			||||||
 | 
					import subprocess | 
				
			||||||
 | 
					import time | 
				
			||||||
 | 
					import unittest | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from cereal import log, car | 
				
			||||||
 | 
					import cereal.messaging as messaging | 
				
			||||||
 | 
					from selfdrive.test.helpers import phone_only, with_processes | 
				
			||||||
 | 
					# TODO: rewrite for unittest | 
				
			||||||
 | 
					from common.realtime import DT_CTRL | 
				
			||||||
 | 
					from selfdrive.hardware import HARDWARE | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					AudibleAlert = car.CarControl.HUDControl.AudibleAlert | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SOUNDS = { | 
				
			||||||
 | 
					  # sound: total writes | 
				
			||||||
 | 
					  AudibleAlert.none: 0, | 
				
			||||||
 | 
					  AudibleAlert.chimeEngage: 173, | 
				
			||||||
 | 
					  AudibleAlert.chimeDisengage: 173, | 
				
			||||||
 | 
					  AudibleAlert.chimeError: 173, | 
				
			||||||
 | 
					  AudibleAlert.chimePrompt: 173, | 
				
			||||||
 | 
					  AudibleAlert.chimeWarning1: 163, | 
				
			||||||
 | 
					  AudibleAlert.chimeWarning2: 216, | 
				
			||||||
 | 
					  AudibleAlert.chimeWarning2Repeat: 470, | 
				
			||||||
 | 
					  AudibleAlert.chimeWarningRepeat: 468, | 
				
			||||||
 | 
					} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def get_total_writes(): | 
				
			||||||
 | 
					  audio_flinger = subprocess.check_output('dumpsys media.audio_flinger', shell=True, encoding='utf-8').strip() | 
				
			||||||
 | 
					  write_lines = [l for l in audio_flinger.split('\n') if l.strip().startswith('Total writes')] | 
				
			||||||
 | 
					  return sum([int(l.split(':')[1]) for l in write_lines]) | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class TestSoundd(unittest.TestCase): | 
				
			||||||
 | 
					  def test_sound_card_init(self): | 
				
			||||||
 | 
					    assert HARDWARE.get_sound_card_online() | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  @phone_only | 
				
			||||||
 | 
					  @with_processes(['soundd']) | 
				
			||||||
 | 
					  def test_alert_sounds(self): | 
				
			||||||
 | 
					    pm = messaging.PubMaster(['controlsState']) | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # make sure they're all defined | 
				
			||||||
 | 
					    alert_sounds = {v: k for k, v in car.CarControl.HUDControl.AudibleAlert.schema.enumerants.items()} | 
				
			||||||
 | 
					    diff = set(SOUNDS.keys()).symmetric_difference(alert_sounds.keys()) | 
				
			||||||
 | 
					    assert len(diff) == 0, f"not all sounds defined in test: {diff}" | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # wait for procs to init | 
				
			||||||
 | 
					    time.sleep(1) | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for sound, expected_writes in SOUNDS.items(): | 
				
			||||||
 | 
					      print(f"testing {alert_sounds[sound]}") | 
				
			||||||
 | 
					      start_writes = get_total_writes() | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      for _ in range(int(9 / DT_CTRL)): | 
				
			||||||
 | 
					        msg = messaging.new_message('controlsState') | 
				
			||||||
 | 
					        msg.controlsState.alertSound = sound | 
				
			||||||
 | 
					        msg.controlsState.alertType = str(sound) | 
				
			||||||
 | 
					        msg.controlsState.alertText1 = "Testing Sounds" | 
				
			||||||
 | 
					        msg.controlsState.alertText2 = f"playing {alert_sounds[sound]}" | 
				
			||||||
 | 
					        msg.controlsState.alertSize = log.ControlsState.AlertSize.mid | 
				
			||||||
 | 
					        pm.send('controlsState', msg) | 
				
			||||||
 | 
					        time.sleep(DT_CTRL) | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      tolerance = (expected_writes % 100) * 2 | 
				
			||||||
 | 
					      actual_writes = get_total_writes() - start_writes | 
				
			||||||
 | 
					      assert abs(expected_writes - actual_writes) <= tolerance, f"{alert_sounds[sound]}: expected {expected_writes} writes, got {actual_writes}" | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if __name__ == "__main__": | 
				
			||||||
 | 
					  unittest.main() | 
				
			||||||
@ -1,65 +0,0 @@ | 
				
			|||||||
#!/usr/bin/env python3 | 
					 | 
				
			||||||
import time | 
					 | 
				
			||||||
import subprocess | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
from cereal import log, car | 
					 | 
				
			||||||
import cereal.messaging as messaging | 
					 | 
				
			||||||
from selfdrive.test.helpers import phone_only, with_processes | 
					 | 
				
			||||||
from common.realtime import DT_CTRL | 
					 | 
				
			||||||
from selfdrive.hardware import HARDWARE | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
AudibleAlert = car.CarControl.HUDControl.AudibleAlert | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
SOUNDS = { | 
					 | 
				
			||||||
  # sound: total writes | 
					 | 
				
			||||||
  AudibleAlert.none: 0, | 
					 | 
				
			||||||
  AudibleAlert.chimeEngage: 173, | 
					 | 
				
			||||||
  AudibleAlert.chimeDisengage: 173, | 
					 | 
				
			||||||
  AudibleAlert.chimeError: 173, | 
					 | 
				
			||||||
  AudibleAlert.chimePrompt: 173, | 
					 | 
				
			||||||
  AudibleAlert.chimeWarning1: 163, | 
					 | 
				
			||||||
  AudibleAlert.chimeWarning2: 216, | 
					 | 
				
			||||||
  AudibleAlert.chimeWarning2Repeat: 470, | 
					 | 
				
			||||||
  AudibleAlert.chimeWarningRepeat: 468, | 
					 | 
				
			||||||
} | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
def get_total_writes(): | 
					 | 
				
			||||||
  audio_flinger = subprocess.check_output('dumpsys media.audio_flinger', shell=True, encoding='utf-8').strip() | 
					 | 
				
			||||||
  write_lines = [l for l in audio_flinger.split('\n') if l.strip().startswith('Total writes')] | 
					 | 
				
			||||||
  return sum([int(l.split(':')[1]) for l in write_lines]) | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@phone_only | 
					 | 
				
			||||||
def test_sound_card_init(): | 
					 | 
				
			||||||
  assert HARDWARE.get_sound_card_online() | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@phone_only | 
					 | 
				
			||||||
@with_processes(['soundd']) | 
					 | 
				
			||||||
def test_alert_sounds(): | 
					 | 
				
			||||||
  pm = messaging.PubMaster(['controlsState']) | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # make sure they're all defined | 
					 | 
				
			||||||
  alert_sounds = {v: k for k, v in car.CarControl.HUDControl.AudibleAlert.schema.enumerants.items()} | 
					 | 
				
			||||||
  diff = set(SOUNDS.keys()).symmetric_difference(alert_sounds.keys()) | 
					 | 
				
			||||||
  assert len(diff) == 0, f"not all sounds defined in test: {diff}" | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # wait for procs to init | 
					 | 
				
			||||||
  time.sleep(1) | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  for sound, expected_writes in SOUNDS.items(): | 
					 | 
				
			||||||
    print(f"testing {alert_sounds[sound]}") | 
					 | 
				
			||||||
    start_writes = get_total_writes() | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    for _ in range(int(9 / DT_CTRL)): | 
					 | 
				
			||||||
      msg = messaging.new_message('controlsState') | 
					 | 
				
			||||||
      msg.controlsState.alertSound = sound | 
					 | 
				
			||||||
      msg.controlsState.alertType = str(sound) | 
					 | 
				
			||||||
      msg.controlsState.alertText1 = "Testing Sounds" | 
					 | 
				
			||||||
      msg.controlsState.alertText2 = f"playing {alert_sounds[sound]}" | 
					 | 
				
			||||||
      msg.controlsState.alertSize = log.ControlsState.AlertSize.mid | 
					 | 
				
			||||||
      pm.send('controlsState', msg) | 
					 | 
				
			||||||
      time.sleep(DT_CTRL) | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    tolerance = (expected_writes % 100) * 2 | 
					 | 
				
			||||||
    actual_writes = get_total_writes() - start_writes | 
					 | 
				
			||||||
    assert abs(expected_writes - actual_writes) <= tolerance, f"{alert_sounds[sound]}: expected {expected_writes} writes, got {actual_writes}" | 
					 | 
				
			||||||
					Loading…
					
					
				
		Reference in new issue