Почистить комментарии от упоминаний процесса
Удалены <remarks>, <summary> сжаты до короткой фразы, вырезаны ссылки на Task/Ruling/этап/python/прототип; //-комментарии со ссылками на процесс удалены; то же в .proto. Правила обновлены в docs/spec/Код-стайл-Дейл.md. Строк комментариев 27210 -> ~19100.
This commit is contained in:
@@ -9,18 +9,7 @@ using Microsoft.AspNetCore.Builder;
|
||||
namespace Deal.Ai.Tests.Grpc;
|
||||
|
||||
/// <summary>
|
||||
/// Интеграционные тесты хоста ai-service (каркас Task 4 + логика Task 8).
|
||||
///
|
||||
/// Хост поднимается В процессе теста (Kestrel HTTP/2, эфемерный порт) через AiServiceHost.Create —
|
||||
/// ту же сборку хоста, что использует Program.cs, поэтому тесты покрывают реальную настройку
|
||||
/// Kestrel/AddGrpc/health, а не её копию. Проверки: gRPC-health → SERVING; ServiceTokenInterceptor
|
||||
/// (Ruling 1): запрос без токена и с неверным токеном → UNAUTHENTICATED; верный токен проходит к
|
||||
/// методу (реализация Task 8: пустой запрос без конфига провайдера → INVALID_ARGUMENT); при
|
||||
/// незаданном DEAL_SERVICE_TOKEN — fail-closed.
|
||||
///
|
||||
/// Токен интерцептор читает из конфигурации (env DEAL_SERVICE_TOKEN) — тесты выставляют env на время
|
||||
/// сценария и восстанавливают исходное значение. Все тесты класса живут в одном процессе/классе,
|
||||
/// чтобы env и свободные порты не конфликтовали (xunit исполняет методы класса последовательно).
|
||||
/// Интеграционные тесты хоста ai-service.
|
||||
/// </summary>
|
||||
public sealed class AiServiceHostTests
|
||||
{
|
||||
@@ -33,15 +22,13 @@ public sealed class AiServiceHostTests
|
||||
// Токен сценариев теста.
|
||||
private const string ValidToken = "task4-test-token";
|
||||
|
||||
// Id тенанта запросов (доходит до метода при верном токене; Ruling 1).
|
||||
private const string TenantId = "tenant-test";
|
||||
|
||||
// Deadline RPC-вызовов теста (сек).
|
||||
private const int RpcDeadlineSeconds = 10;
|
||||
|
||||
/// <summary>
|
||||
/// HealthCheck (grpc.health.v1.Health/Check) отвечает SERVING — хост поднялся, gRPC-инфраструктура
|
||||
/// и health-сервис работают (Ruling 12; health освобождён от service-token).
|
||||
/// HealthCheck (grpc.health.v1.Health/Check) отвечает SERVING — хост поднялся, gRPC-инфраструктура и health-сервис работают.
|
||||
/// </summary>
|
||||
[Fact]
|
||||
public async Task HealthCheck_ReturnsServing()
|
||||
@@ -60,7 +47,7 @@ public sealed class AiServiceHostTests
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Запрос без metadata «service-token» → UNAUTHENTICATED (Ruling 1).
|
||||
/// Запрос без metadata «service-token» → UNAUTHENTICATED.
|
||||
/// </summary>
|
||||
[Fact]
|
||||
public async Task Classify_WithoutToken_IsUnauthenticated()
|
||||
@@ -72,7 +59,7 @@ public sealed class AiServiceHostTests
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Запрос с неверным токеном → UNAUTHENTICATED (Ruling 1).
|
||||
/// Запрос с неверным токеном → UNAUTHENTICATED.
|
||||
/// </summary>
|
||||
[Fact]
|
||||
public async Task Classify_WithWrongToken_IsUnauthenticated()
|
||||
@@ -84,9 +71,7 @@ public sealed class AiServiceHostTests
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Верный токен проходит интерцептор к методу — кодогенерация и маппинг сервиса работают:
|
||||
/// пустой запрос (без конфига провайдера) доходит до реализации Classify (Task 8) и отклоняется
|
||||
/// валидацией INVALID_ARGUMENT, а не UNIMPLEMENTED.
|
||||
/// Верный токен проходит интерцептор к методу — кодогенерация и маппинг сервиса работают
|
||||
/// </summary>
|
||||
[Fact]
|
||||
public async Task Classify_WithValidToken_ReachesServiceAndValidatesConfig()
|
||||
@@ -98,9 +83,7 @@ public sealed class AiServiceHostTests
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Fail-closed (шаблон Task 3): DEAL_SERVICE_TOKEN не задан — Deal-RPC отклоняется всегда,
|
||||
/// в т.ч. запрос с «пустым» значением metadata (без гарда сравнение «» == «» пропустило бы его);
|
||||
/// health при этом продолжает отвечать SERVING (инфраструктурный liveness не ломается).
|
||||
/// Fail-closed: DEAL_SERVICE_TOKEN не задан — Deal-RPC отклоняется всегда, в т.ч.
|
||||
/// </summary>
|
||||
[Fact]
|
||||
public async Task WithoutConfiguredToken_DealRpcFailsClosed_HealthStillServing()
|
||||
@@ -138,7 +121,6 @@ public sealed class AiServiceHostTests
|
||||
|
||||
// Вызывает Classify и проверяет, что сервер ответил ожидаемым кодом статуса.
|
||||
// Запрос несёт полный metadata (service-token + tenant-id), чтобы верный токен доходил
|
||||
// до реализации метода (заглушки больше нет — Task 8), а не падал на tenant-проверке.
|
||||
// channel: Канал к хосту ai-service.
|
||||
// tokenHeader: Значение metadata «service-token» либо null (нет заголовка).
|
||||
// expected: Ожидаемый StatusCode.
|
||||
|
||||
Reference in New Issue
Block a user