[AZ-1074] [AZ-1075] gRPC tile stream tests and shared proto
ci/woodpecker/push/01-test Pipeline failed
ci/woodpecker/push/02-build-push unknown status

Extract tile_provision.proto into GrpcContracts, add integration
tests and validation hardening for DeliverRouteTiles streaming.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Oleksandr Bezdieniezhnykh
2026-06-25 10:04:41 +03:00
parent 275ee1b554
commit 7633134a8a
20 changed files with 725 additions and 26 deletions
@@ -27,14 +27,12 @@ public sealed class RouteTileDeliveryGrpcService : RouteTileDelivery.RouteTileDe
{
if (request.Route is null)
{
await WriteErrorAsync(responseStream, "INVALID_REQUEST", "route is required", retryable: false, context.CancellationToken);
return;
throw new RpcException(new Status(StatusCode.InvalidArgument, "route is required"));
}
if (!Guid.TryParse(request.Route.RouteId, out var routeId))
{
await WriteErrorAsync(responseStream, "INVALID_REQUEST", "route_id must be a UUID", retryable: false, context.CancellationToken);
return;
throw new RpcException(new Status(StatusCode.InvalidArgument, "route_id must be a UUID"));
}
var job = MapJob(request, routeId);
@@ -47,7 +45,7 @@ public sealed class RouteTileDeliveryGrpcService : RouteTileDelivery.RouteTileDe
catch (ArgumentException ex)
{
_logger.LogWarning(ex, "Invalid route tile delivery request for route {RouteId}", routeId);
await WriteErrorAsync(responseStream, "INVALID_REQUEST", ex.Message, retryable: false, context.CancellationToken);
throw new RpcException(new Status(StatusCode.InvalidArgument, ex.Message));
}
catch (OperationCanceledException) when (context.CancellationToken.IsCancellationRequested)
{