|  |  |  | from cereal import car
 | 
					
						
							|  |  |  | from cereal import messaging
 | 
					
						
							|  |  |  | from cereal.messaging import SubMaster, PubMaster
 | 
					
						
							|  |  |  | from openpilot.selfdrive.ui.soundd import CONTROLS_TIMEOUT, check_controls_timeout_alert
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import time
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | AudibleAlert = car.CarControl.HUDControl.AudibleAlert
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class TestSoundd:
 | 
					
						
							|  |  |  |   def test_check_controls_timeout_alert(self):
 | 
					
						
							|  |  |  |     sm = SubMaster(['controlsState'])
 | 
					
						
							|  |  |  |     pm = PubMaster(['controlsState'])
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     for _ in range(100):
 | 
					
						
							|  |  |  |       cs = messaging.new_message('controlsState')
 | 
					
						
							|  |  |  |       cs.controlsState.enabled = True
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       pm.send("controlsState", cs)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       time.sleep(0.01)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       sm.update(0)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       assert not check_controls_timeout_alert(sm)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     for _ in range(CONTROLS_TIMEOUT * 110):
 | 
					
						
							|  |  |  |       sm.update(0)
 | 
					
						
							|  |  |  |       time.sleep(0.01)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     assert check_controls_timeout_alert(sm)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   # TODO: add test with micd for checking that soundd actually outputs sounds
 | 
					
						
							|  |  |  | 
 |