mirror of
				https://github.com/esphome/esphome.git
				synced 2025-10-25 13:13:48 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			101 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			101 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| """Integration test for CRC8 helper function."""
 | |
| 
 | |
| from __future__ import annotations
 | |
| 
 | |
| import asyncio
 | |
| from pathlib import Path
 | |
| 
 | |
| import pytest
 | |
| 
 | |
| from .types import APIClientConnectedFactory, RunCompiledFunction
 | |
| 
 | |
| 
 | |
| @pytest.mark.asyncio
 | |
| async def test_crc8_helper(
 | |
|     yaml_config: str,
 | |
|     run_compiled: RunCompiledFunction,
 | |
|     api_client_connected: APIClientConnectedFactory,
 | |
| ) -> None:
 | |
|     """Test the CRC8 helper function through integration testing."""
 | |
|     # Get the path to the external components directory
 | |
|     external_components_path = str(
 | |
|         Path(__file__).parent / "fixtures" / "external_components"
 | |
|     )
 | |
| 
 | |
|     # Replace the placeholder in the YAML config with the actual path
 | |
|     yaml_config = yaml_config.replace(
 | |
|         "EXTERNAL_COMPONENT_PATH", external_components_path
 | |
|     )
 | |
| 
 | |
|     # Track test completion with asyncio.Event
 | |
|     test_complete = asyncio.Event()
 | |
| 
 | |
|     # Track test results
 | |
|     test_results = {
 | |
|         "dallas_maxim": False,
 | |
|         "sensirion": False,
 | |
|         "pec": False,
 | |
|         "parameter_equivalence": False,
 | |
|         "edge_cases": False,
 | |
|         "component_compatibility": False,
 | |
|         "setup_started": False,
 | |
|     }
 | |
| 
 | |
|     def on_log_line(line):
 | |
|         """Process log lines to track test progress and results."""
 | |
|         # Track test start
 | |
|         if "CRC8 Helper Function Integration Test Starting" in line:
 | |
|             test_results["setup_started"] = True
 | |
| 
 | |
|         # Track test completion
 | |
|         elif "CRC8 Integration Test Complete" in line:
 | |
|             test_complete.set()
 | |
| 
 | |
|         # Track individual test results
 | |
|         elif "ALL TESTS PASSED" in line:
 | |
|             if "Dallas/Maxim CRC8" in line:
 | |
|                 test_results["dallas_maxim"] = True
 | |
|             elif "Sensirion CRC8" in line:
 | |
|                 test_results["sensirion"] = True
 | |
|             elif "PEC CRC8" in line:
 | |
|                 test_results["pec"] = True
 | |
|             elif "Parameter equivalence" in line:
 | |
|                 test_results["parameter_equivalence"] = True
 | |
|             elif "Edge cases" in line:
 | |
|                 test_results["edge_cases"] = True
 | |
|             elif "Component compatibility" in line:
 | |
|                 test_results["component_compatibility"] = True
 | |
| 
 | |
|         # Log failures for debugging
 | |
|         elif "TEST FAILED:" in line or "SUBTEST FAILED:" in line:
 | |
|             print(f"CRC8 Test Failure: {line}")
 | |
| 
 | |
|     # Compile and run the test
 | |
|     async with (
 | |
|         run_compiled(yaml_config, line_callback=on_log_line),
 | |
|         api_client_connected() as client,
 | |
|     ):
 | |
|         # Verify device info
 | |
|         device_info = await client.device_info()
 | |
|         assert device_info is not None
 | |
|         assert device_info.name == "crc8-helper-test"
 | |
| 
 | |
|         # Wait for tests to complete with timeout
 | |
|         try:
 | |
|             await asyncio.wait_for(test_complete.wait(), timeout=5.0)
 | |
|         except TimeoutError:
 | |
|             pytest.fail("CRC8 integration test timed out after 5 seconds")
 | |
| 
 | |
|         # Verify all tests passed
 | |
|         assert test_results["setup_started"], "CRC8 test setup never started"
 | |
|         assert test_results["dallas_maxim"], "Dallas/Maxim CRC8 test failed"
 | |
|         assert test_results["sensirion"], "Sensirion CRC8 test failed"
 | |
|         assert test_results["pec"], "PEC CRC8 test failed"
 | |
|         assert test_results["parameter_equivalence"], (
 | |
|             "Parameter equivalence test failed"
 | |
|         )
 | |
|         assert test_results["edge_cases"], "Edge cases test failed"
 | |
|         assert test_results["component_compatibility"], (
 | |
|             "Component compatibility test failed"
 | |
|         )
 |