Flexberry / NewPlatform.Flexberry.ServiceBus

Flexberry Service Bus - Runtime service
MIT License
3 stars 4 forks source link

Покрыть компоненты RabbitMQ интеграционным тестами #51

Open BatNiy opened 5 years ago

BatNiy commented 5 years ago

Подготовка

  1. Создать типы сообщения в БД (сообщения для callback-клиентов, сообщения для не callback-клиентов).
  2. Создать четырёх клиентов в БД (отправщик, отправщик без разрешений, приёмщик с callback, приёмщик без callback).
  3. Создать подписки для приёмщиков (с соответствием типа сообщения по callback'у).
  4. Создать разрешения на отправку для одного отправщика.

Проверка создания объектов маршрутизации (тест должен выполнять первым)

  1. Вызвать обновление подписок в RabbitMQ
  2. Проверить, что в RabbitMQ создался один user, соответствующий отправщику.
  3. Проверить, что в RabbitMQ создались два exchange, соответствующие типам сообщений.
  4. Проверить, что в RabbitMQ создались две queue, соответствующие подпискам, проверить, что queue связаны с exchange.
  5. Вытянуть подписки с помощью RmqSubscriptionsManager.GetSubscriptions. Проверить, что подписки те.

Отправка от клиента, без разрешения на отправку

  1. Отправить сообщение с помощью RmqReceivingManager.AcceptMessage(ServiceBusMessage message). В клиенте указать клиента без разрешения, указать тип сообщения.
  2. Проверить, что RmqReceivingManager выкинул exception AlreadyClosedException

Отправка сообщения от клиента с разрешением, ручное получение

  1. Отправить два сообщения с помощь RmqReceivingManager.AcceptMessage. В клиенте указать клиента с разрешением, указать тип сообщения, тело, вложение, тэги.
  2. Получить сообщение с помощью RmqSendingManager.ReadMessage для клиента без callback.
  3. Проверить, что сообщения соответствуют отправленным.
  4. Проверить, что повторный вызов RmqSendingManager.ReadMessage возвращает Null.

Отправка от клиента с указанием группы, ручное получение

  1. Отправить два раза сообщение с помощью RmqReceivingManager.AcceptMessage(ServiceBusMessage message, string groupName). В клиенте указать клиента с разрешением, указать тип сообщения, тело, вложение, тэги.
  2. Вызвать два раза приём сообщения с помощью RmqSendingManager.ReadMessage(string clientId, string messageTypeId), clientId - ид подписчика, messageTypeId - тип сообщения. После каждого получения вызвать RmqSendingManager.DeleteMessage(string id), где id - id полученного Message.
  3. Проверить что первое сообщение соответствует отправленному.
  4. Проверить, что второй вызов получения сообщения вернул null.

Отправка сообщения от клиента с разрешением, получение по callback

  1. Отправить два сообщения с помощь RmqReceivingManager.AcceptMessage. В клиенте указать клиента с разрешением, указать тип сообщения, тело, вложение, тэги.
  2. Запустить callback-клиент (адрес клиента получателя должен соответствовать тому, что указан для клиента-подписчика с callback).
  3. Запустить RmqSendingManager.
  4. Ждать n секунд, callback-клиент должен получить 2 сообщения, при обработке первого выкинуть исключение, второе обработать без исключений.
  5. Проверить, что после завершения работы callback клиента в брокере осталось одно сообщение.

Проверка записи статистики

  1. Очистить статистику RabbitMQ.
  2. Отправить по два сообщения в шину от клиентов с нужными разрешениями.
  3. Получить одно сообщение для клиента с callback, при обработке второго выкинуть ошибку.
  4. Получить сообщение для клиента без callback.
  5. Создать RmqStatisticsCollector, замокать IStatisticsSaveService. Запустить созданный RmqStatisticsCollector. Проверить, что в IStatisticsSaveService прилетел вызов, записывающий следующие строки StatisticsRecord: SentCount = 2 ReceiveCount = 2 QueueLength = 0 StatisticsSetting.Subscription = <Подписка для клиента без callback>; SentCount = 2 ReceiveCount = 1 QueueLength = 0 StatisticsSetting.Subscription = <Подписка для callback>.
  6. Повторить шаг 2, 3, 4
  7. Проверить, что в IStatisticsSaveService прилетел вызов, записывающий следующие строки StatisticsRecord: SentCount = 2 ReceiveCount = 2 QueueLength = 0 StatisticsSetting.Subscription = <Подписка для клиента без callback>; SentCount = 2 ReceiveCount = 1 QueueLength = 0 StatisticsSetting.Subscription = <Подписка для callback>.

Настроить прогон теста в Travis. Для тестирования использовать образ шины в Docker'е. Для запускаемого образа указать, что используется конфигурация RabbitMQ. БД шины и RMQ запускать также в Docker'е.

BatNiy commented 5 years ago

Для запуска тестов, думаю, подойдет следующая статья: https://xunit.github.io/docs/getting-started-desktop#run-tests