Как правильно поступить в случае, когда эмулятор Cosmos DB не работает? - PullRequest
0 голосов
/ 26 мая 2020

У меня есть несколько модульных тестов (C#), которые инициализируют базу данных, и две коллекции со случайными данными для тестирования в эмуляторе Cosmos DB. Моя проблема в том, что когда я еще не запустил эмулятор (или если я закрою его во время выполнения тестов), тесты просто зависают.

Моя цель - вместо этого получить сообщение об ошибке, когда что-то подобное происходит слепого ожидания. Можно ли это сделать и как?

Мои тесты застревают в следующей команде:

DocumentClient
    .CreateDatabaseIfNotExistsAsync(ValidCosmoConfig.Database)
    .GetAwaiter()
    .GetResult();

Ответы [ 2 ]

0 голосов
/ 12 июня 2020

Единственное решение, которое я нашел для завершения модульных тестов, когда эмулятор Cosmos DB не запущен, - это использовать перед всем остальным следующий код:

var source = new CancellationTokenSource(ValidCosmoConfig.RequestTimeout);
try
{
    DocumentClient.OpenAsync(source.Token).GetAwaiter().GetResult();
}
catch (Exception e)
{
    Console.WriteLine(e);
    Environment.Exit(0);
}

OpenAsync действительно выдает исключение, и я могу немедленно завершить тест, но все же я не понимаю, почему он просто застревает в CreateDatabaseIfNotExistsAsync и почему параметры тайм-аута, которые я устанавливаю, не работают.

0 голосов
/ 28 мая 2020

Когда я пытаюсь подключиться к эмулятору, когда он не запущен, я вижу Microsoft.Azure.Cosmos.CosmosException с сообщением «Код состояния ответа не указывает на успех: InternalServerError (500); Substatus: 0; ActivityId: 00000000-0000-0000. -0000-000000000000; Причина: (Невозможно установить соединение, поскольку целевая машина активно отказалась от него.); «.

Внутреннее исключение - System.Net.Sockets.SocketException (сообщение« Невозможно установить соединение, потому что целевой машина активно отказалась от нее. ").

В зависимости от вашей библиотеки модульного тестирования при обнаружении этой ошибки может быть возможно полное прерывание в случае этой ошибки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...