Как замокать запрос с помощью wiremock - Webhooks в Docker контейнере
Всем привет. Есть пробелма, прошу помощи, мне нужно.
(+) если это уже сделано.
- Поднять wiremock в докер контейнере. (+)
- Добавить к нему расширение, что бы он мог использовать в качестве моков не json а java классы с кастомной логикой скачав jar с сайта документации и добив его в папку extensions и добавить аргумент запуска "--extensions org.wiremock.webhooks.Webhooks" (+)
- Написать свой мок (+) но я написал но не уверен что он будет работать, по доке я так понял надо так.
class WireMockStub: ResponseDefinitionTransformerV2 {
override fun getName(): String {
return "WireMockStub"
}
override fun transform(serveEvent: ServeEvent): ResponseDefinition {
return if (serveEvent.request.url == "/api/webhook/test") {
ResponseDefinitionBuilder
.responseDefinition()
.withStatus(200)
.withBody("{\"testField\": true }")
.build()
} else {
ResponseDefinition()
}
}
}
Это Котлин но думаю джависты поймут
- Сбилдить этот класс в jar с метоинформацией и так далее (+)
- Положить этот джарник то ли в пакет extensions то ли в пакет mappings, я так и не понял из доки? там 2 варианта, но попробовал оба, и оба не работают (+)(-)
- Сделать запрос к wiremock в докере, что бы он отдал мок (-) делаю запрос и в зависимости от того куда положил файл и какие настройки запуска задал оно или мок не видел или не поднимается с ошибкой.
Поведение следующее. если сделать так
WIREMOCK_OPTIONS: "-cp мой_джарник.jar:wiremock-webhooks-extension-3.4.0.jar --extensions org.wiremock.webhooks.Webhooks"
где 2й джарник это расширение в пакете extension что бы работали классы моков, которое я скачал с сайте документации, и в том же пакете лежит мой джарник с раширением, то ваермок не стартует с ошибкой вышеупомянутой, если же сделать так
WIREMOCK_OPTIONS: "--extensions org.wiremock.webhooks.Webhooks, ru.rubbles.gap.wiremock.webhook.WireMockStub"
первый аргумент по доке нужен для включения ваермок хука, что бы все работало а 2й это мое расширение с путем до класса, это я нашёл в другом месте документации, то ваермок поднимается но не видим мока.
404 No response could be served as there are no stub mappings in this WireMock instance.
в общем оба варианта не работают на по разному....
Все варианты конфигурации докер файла запуска, при которых не получилось
wiremock:
image: 'holomekc/wiremock-gui:latest'
container_name: wiremock
ports:
- '8090:8080'
environment:
WIREMOCK_OPTIONS: "-cp WireMockStub.jar:wiremock-webhooks-extension-3.0.4.jar"
# WIREMOCK_OPTIONS: "-cp WireMockStub.jar:wiremock-webhooks-extension-3.0.4.jar com.github.tomakehurst.wiremock.standalone.WireMockServerRunner --extensions org.wiremock.webhooks.Webhooks --global-response-templating"
# WIREMOCK_OPTIONS: "-cp gap-wire-mock-24.1.6-plain.jar:wiremock-webhooks-extension-3.4.0.jar --extensions org.wiremock.webhooks.Webhooks, ru.rubbles.gap.wiremock.webhook.WireMockStub"
# WIREMOCK_OPTIONS: "--extensions org.wiremock.webhooks.Webhooks, ru.rubbles.gap.wiremock.webhook.WireMockStub"
# WIREMOCK_OPTIONS: "-cp wiremock-webhooks-extension-3.4.0.jar --extensions org.wiremock.webhooks.Webhooks"
volumes:
- ./extensions:/var/wiremock/extensions
- ./files:/home/wiremock/__files
- ./mappings:/home/wiremock/mappings
```
Ответы (1 шт):
В итоге все оказалось просто, я компилировал нужный jar на JAVA_17 а нужно было компилировать на JAVA_11, если компилировать на 17 он выдает ошибку о несоответствии версий, а ошибка была не видно так как проект был на Котлин. Как только я создал отдельный репозиторий на JAVA_11 все заработало.