parent
							
								
									cdc801c3c1
								
							
						
					
					
						commit
						b7f5de03c2
					
				
				 3 changed files with 31 additions and 5 deletions
			
			
		@ -0,0 +1,27 @@ | 
				
			||||
import os | 
				
			||||
import capnp | 
				
			||||
import hypothesis.strategies as st | 
				
			||||
from hypothesis import given, settings, HealthCheck | 
				
			||||
 | 
				
			||||
from openpilot.selfdrive.test.fuzzy_generation import FuzzyGenerator | 
				
			||||
from openpilot.tools.lib.logreader import LogReader | 
				
			||||
 | 
				
			||||
MAX_EXAMPLES = int(os.environ.get("MAX_EXAMPLES", "10")) | 
				
			||||
 | 
				
			||||
 | 
				
			||||
@given(st.data()) | 
				
			||||
@settings(max_examples=MAX_EXAMPLES, suppress_health_check=[HealthCheck.large_base_example]) | 
				
			||||
def test_log_backwards_compatibility(schema_path, data): | 
				
			||||
  # capnp global parser needs to be cleaned up to avoid schema/struct ID conflicts | 
				
			||||
  capnp.cleanup_global_schema_parser() | 
				
			||||
  old_log = capnp.load(schema_path) | 
				
			||||
  capnp.cleanup_global_schema_parser() | 
				
			||||
 | 
				
			||||
  msgs_dicts = FuzzyGenerator.get_random_event_msg(data.draw, log_schema=old_log, events=old_log.Event.schema.union_fields, real_floats=True) | 
				
			||||
  msgs = [old_log.Event.new_message(**m).as_reader() for m in msgs_dicts] | 
				
			||||
  dat = b"".join(msg.as_builder().to_bytes() for msg in msgs) | 
				
			||||
 | 
				
			||||
  lr = list(LogReader.from_bytes(dat)) | 
				
			||||
  assert len(lr) == len(msgs) | 
				
			||||
  # calling which() on a removed union type will raise an exception | 
				
			||||
  assert set([m.which() for m in lr]) == set([msg.which() for msg in msgs]) | 
				
			||||
					Loading…
					
					
				
		Reference in new issue