CAN fingerprinting test (#29427)
	
		
	
				
					
				
			* timing test
* test
* fix
* print
* loop
* clean up
* wider range
* Update selfdrive/car/tests/test_models.py
* Apply suggestions from code review
* run many times
* Update selfdrive/car/tests/test_models.py
* run for many its
* run with unittest and print as list
* Update .github/workflows/selfdrive_tests.yaml
* Update .github/workflows/selfdrive_tests.yaml
* total time is super inconsistent (body)
* Update selfdrive/car/tests/test_models.py
* clean up
* clean up
* clean up
* this works!
* draft
* test suite not as modular
* try something like this
* can do kb, but not too representative
* clean up
* remove kb? it depends on signals
* clean up
* more clean up
* rename
* just measure all CANParsers
* can do all this manually
* but this is way simpler
* comment
* stash
* draft
* draft
* remove old script
* clean up
* revert
* use it
* remove test
* opt
* no partial
* remove
* revert test_models
* test can fingerprinting
* so much simpler!
* fix dict resizing
* simplify
* need to do this
* fix
* move to new file
* rename
* comment
* ignore function-uses-loop-variable
old-commit-hash: fd8f8d8785
			
			
				beeps
			
			
		
							parent
							
								
									52bc87c4f2
								
							
						
					
					
						commit
						c817cb942d
					
				
				 2 changed files with 30 additions and 3 deletions
			
			
		| @ -0,0 +1,27 @@ | ||||
| #!/usr/bin/env python3 | ||||
| from parameterized import parameterized | ||||
| import unittest | ||||
| 
 | ||||
| from cereal import log, messaging | ||||
| from selfdrive.car.car_helpers import can_fingerprint | ||||
| from selfdrive.car.fingerprints import _FINGERPRINTS as FINGERPRINTS | ||||
| 
 | ||||
| 
 | ||||
| class TestCanFingerprint(unittest.TestCase): | ||||
|   @parameterized.expand([(c, f) for c, f in FINGERPRINTS.items()]) | ||||
|   def test_can_fingerprint(self, car_model, fingerprints): | ||||
|     # Tests online fingerprinting function on offline fingerprints | ||||
|     for fingerprint in fingerprints:  # can have multiple fingerprints for each platform | ||||
|       can = messaging.new_message('can', 1) | ||||
|       can.can = [log.CanData(address=address, dat=b'\x00' * length) | ||||
|                  for address, length in fingerprint.items()] | ||||
| 
 | ||||
|       fingerprint_iter = iter([can]) | ||||
|       empty_can = messaging.new_message('can', 0) | ||||
|       car_fingerprint, finger = can_fingerprint(lambda: next(fingerprint_iter, empty_can))  # noqa: B023 | ||||
| 
 | ||||
|       self.assertEqual(car_fingerprint, car_model) | ||||
| 
 | ||||
| 
 | ||||
| if __name__ == "__main__": | ||||
|   unittest.main() | ||||
					Loading…
					
					
				
		Reference in new issue