| 
						
						
							
								
							
						
						
					 | 
					 | 
					@ -11,8 +11,15 @@ from openpilot.system.webrtc.webrtcd import get_stream | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					import aiortc | 
					 | 
					 | 
					 | 
					import aiortc | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					from teleoprtc import WebRTCOfferBuilder | 
					 | 
					 | 
					 | 
					from teleoprtc import WebRTCOfferBuilder | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					from parameterized import parameterized_class | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					@parameterized_class(("in_services", "out_services"), [ | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  (["testJoystick"], ["carState"]), | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  ([], ["carState"]), | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  (["testJoystick"], []), | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  ([], []), | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					]) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					class TestWebrtcdProc(unittest.IsolatedAsyncioTestCase): | 
					 | 
					 | 
					 | 
					class TestWebrtcdProc(unittest.IsolatedAsyncioTestCase): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  async def assertCompletesWithTimeout(self, awaitable, timeout=1): | 
					 | 
					 | 
					 | 
					  async def assertCompletesWithTimeout(self, awaitable, timeout=1): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    try: | 
					 | 
					 | 
					 | 
					    try: | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -24,7 +31,7 @@ class TestWebrtcdProc(unittest.IsolatedAsyncioTestCase): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  async def test_webrtcd(self): | 
					 | 
					 | 
					 | 
					  async def test_webrtcd(self): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    mock_request = MagicMock() | 
					 | 
					 | 
					 | 
					    mock_request = MagicMock() | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    async def connect(offer): | 
					 | 
					 | 
					 | 
					    async def connect(offer): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      body = {'sdp': offer.sdp, 'cameras': offer.video, 'bridge_services_in': [], 'bridge_services_out': ['carState']} | 
					 | 
					 | 
					 | 
					      body = {'sdp': offer.sdp, 'cameras': offer.video, 'bridge_services_in': self.in_services, 'bridge_services_out': self.out_services} | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      mock_request.json.side_effect = AsyncMock(return_value=body) | 
					 | 
					 | 
					 | 
					      mock_request.json.side_effect = AsyncMock(return_value=body) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      response = await get_stream(mock_request) | 
					 | 
					 | 
					 | 
					      response = await get_stream(mock_request) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      response_json = json.loads(response.text) | 
					 | 
					 | 
					 | 
					      response_json = json.loads(response.text) | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -33,6 +40,7 @@ class TestWebrtcdProc(unittest.IsolatedAsyncioTestCase): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    builder = WebRTCOfferBuilder(connect) | 
					 | 
					 | 
					 | 
					    builder = WebRTCOfferBuilder(connect) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    builder.offer_to_receive_video_stream("road") | 
					 | 
					 | 
					 | 
					    builder.offer_to_receive_video_stream("road") | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    builder.offer_to_receive_audio_stream() | 
					 | 
					 | 
					 | 
					    builder.offer_to_receive_audio_stream() | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    if len(self.in_services) > 0 or len(self.out_services) > 0: | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      builder.add_messaging() | 
					 | 
					 | 
					 | 
					      builder.add_messaging() | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    stream = builder.stream() | 
					 | 
					 | 
					 | 
					    stream = builder.stream() | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -42,7 +50,7 @@ class TestWebrtcdProc(unittest.IsolatedAsyncioTestCase): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    self.assertTrue(stream.has_incoming_video_track("road")) | 
					 | 
					 | 
					 | 
					    self.assertTrue(stream.has_incoming_video_track("road")) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    self.assertTrue(stream.has_incoming_audio_track()) | 
					 | 
					 | 
					 | 
					    self.assertTrue(stream.has_incoming_audio_track()) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    self.assertTrue(stream.has_messaging_channel()) | 
					 | 
					 | 
					 | 
					    self.assertEqual(stream.has_messaging_channel(), len(self.in_services) > 0 or len(self.out_services) > 0) | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    video_track, audio_track = stream.get_incoming_video_track("road"), stream.get_incoming_audio_track() | 
					 | 
					 | 
					 | 
					    video_track, audio_track = stream.get_incoming_video_track("road"), stream.get_incoming_audio_track() | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    await self.assertCompletesWithTimeout(video_track.recv()) | 
					 | 
					 | 
					 | 
					    await self.assertCompletesWithTimeout(video_track.recv()) | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
					 | 
					
  |