Как определить договор Pact между постоянным сервисом и синхронной бессерверной функцией? - PullRequest
0 голосов
/ 10 июля 2019

У меня есть постоянный сервис, который синхронно вызывает функцию без сервера (на AWS lambda , через безсерверный фреймворк ) с некоторым вводом, а функция без сервера (и без сохранения состояния) выполняет некоторыепреобразование ввода и синхронно возвращает вывод обратно в вызывающую службу.

Я хочу написать Пакт контракт , где функция без сервера является поставщиком и постояннымСервис является потребителем.Как я могу сделать это для синхронной (то есть RequestResponse) серверной функции?

У меня есть найдено a несколько ресурсов на пакты для бессерверных функций, но все они, похоже, занимаются только асинхронным сценарием использования, если я что-то не понимаю.Для ясности, в моем случае сценарий использования - не асинхронная передача сообщений, управляемая событиями, а синхронный вызов функции без сервера, блокировка при ожидании ответа.

Из документации Pact я могу найти ссылается только на поддержку API на основе HTTP и асинхронных API на основе сообщений.Этот вариант использования не подходит ни для одного из этих шаблонов, так как мы используем безсерверную инфраструктуру, которая выполняет фактический HTTP-запрос за кулисами.

В моем случае постоянная служба (потребитель) находится на Java, а функция без сервера - вКотлин, т.е. оба на JVM.

1 Ответ

0 голосов
/ 11 июля 2019

Это то, что непосредственно не поддерживается Pact.

Вариант 1 На данный момент вам необходимо написать два отдельных набора тестов, чтобы охватить аспекты взаимодействия как по запросу, так и по ответу, один из которых инициирован потребителем, а другой - поставщиком.

вариант 2 (не проверено)

Invoke lambda - это просто HTTP-запрос POST через сервис AWS lambda, поэтому теоретически его можно проверить с помощью обычного HTTP-запроса / ответа.

См. https://gist.github.com/bethesque/c858e5c15649ae525ef0cc5264b8477c, чтобы немного подумать о взаимодействии в стиле req / res (и присоединяйтесь к нам на slack.pact.io, чтобы поговорить об этом)

...