namespace SatelliteProvider.IntegrationTests; class Program { static async Task Main(string[] args) { var apiUrl = Environment.GetEnvironmentVariable("API_URL") ?? "http://api:8080"; Console.WriteLine("Starting Integration Tests"); Console.WriteLine("========================="); Console.WriteLine($"API URL: {apiUrl}"); Console.WriteLine(); using var httpClient = new HttpClient { BaseAddress = new Uri(apiUrl), Timeout = TimeSpan.FromMinutes(15) }; try { Console.WriteLine("Waiting for API to be ready..."); await WaitForApiReady(httpClient); Console.WriteLine("✓ API is ready"); Console.WriteLine(); await TileTests.RunGetTileByLatLonTest(httpClient); await RegionTests.RunRegionProcessingTest_200m_Zoom18(httpClient); await RegionTests.RunRegionProcessingTest_400m_Zoom17(httpClient); await RegionTests.RunRegionProcessingTest_500m_Zoom18(httpClient); await BasicRouteTests.RunSimpleRouteTest(httpClient); await BasicRouteTests.RunRouteWithRegionProcessingAndStitching(httpClient); await ExtendedRouteTests.RunRouteWithTilesZipTest(httpClient); await ComplexRouteTests.RunComplexRouteWithStitching(httpClient); await ComplexRouteTests.RunComplexRouteWithStitchingAndGeofences(httpClient); await ExtendedRouteTests.RunExtendedRouteEast(httpClient); Console.WriteLine(); Console.WriteLine("========================="); Console.WriteLine("All tests completed successfully!"); return 0; } catch (Exception ex) { Console.WriteLine(); Console.WriteLine("❌ Integration tests failed"); Console.WriteLine($"Error: {ex.Message}"); Console.WriteLine($"Stack trace: {ex.StackTrace}"); return 1; } } static async Task WaitForApiReady(HttpClient httpClient, int maxRetries = 30) { for (int i = 0; i < maxRetries; i++) { try { var response = await httpClient.GetAsync("/"); if (response.IsSuccessStatusCode || response.StatusCode == System.Net.HttpStatusCode.NotFound) { return; } } catch { } Console.WriteLine($" Attempt {i + 1}/{maxRetries} - waiting 2 seconds..."); await Task.Delay(2000); } throw new Exception("API did not become ready in time"); } }