У меня есть следующий Mule поток, который построен, чтобы извлечь некоторые детали из внешнего API, а затем отобразить это в какую-то полезную нагрузку, чтобы вернуться к вызывающему клиенту:тест MUNIT терпит неудачу, когда насмешливый внешнего REST API вызов
<flow name="get:/clients/{clientId}:api-config">
<http:request config-ref="HTTPS_Request_Configuration" path="/api/clients/{clientId}" method="GET" host="host.com" port="443" doc:name="Find Client by ID">
<http:request-builder>
<http:uri-param paramName="clientId" value="#[flowVars['clientId']]"/>
</http:request-builder>
<http:success-status-code-validator values="0..599"/>
</http:request>
<logger message="#[payload]" level="INFO" doc:name="Logger"/>
...
Я создал следующий тест блок, где я издеваться запрос HTTP, используя MUNIT mock
процессор:
<munit:test name="get:/clients/{clientId}:api-config-200-application/json-FlowTest" description="Verifying functionality of [get:/clients/{clientId}:api-config-200-application/json]">
<mock:when messageProcessor=".*:.*" doc:name="Mock">
<mock:with-attributes>
<mock:with-attribute name="doc:name" whereValue="#['Find Client by ID']"/>
</mock:with-attributes>
<mock:then-return payload="#[getResource('sample-client.json').asStream()]" mimeType="application/json"/>
</mock:when>
<set-variable variableName="clientId" value="#['null']" doc:name="clientId"/>
<http:request config-ref="HTTP_Request_Configuration" path="/clients/#[flowVars['clientId']]" method="GET" doc:name="HTTP"/>
<object-to-string-transformer doc:name="http response to string"/>
<munit:assert-true message="The HTTP Status code is not correct!" condition="#[messageInboundProperty('http.status').is(eq(200))]" doc:name="assert that - http.status eq 200"/>
<munit:assert-on-equals message="The response payload is not correct!" expectedValue="..."/>
У меня возникает необычная ошибка, когда я пытаюсь запустить этот тест. Кажется, что тест терпит неудачу из-за таймаута HTTP. Я не понимаю, как это возможно, когда обрабатывается процессор запросов HTTP, и поэтому не нужно делать внешние вызовы?
Сообщение об ошибке я вижу, заключается в следующем:
ERROR 2016-02-19 12:25:59,359 [main] org.mule.exception.DefaultMessagingExceptionStrategy:
********************************************************************************
Message : Error sending HTTP request. Message payload is of type: String
Code : MULE_ERROR--2
--------------------------------------------------------------------------------
Exception stack is:
1. Timeout exceeded (java.util.concurrent.TimeoutException)
com.ning.http.client.providers.grizzly.GrizzlyAsyncHttpProvider:426 (null)
2. Error sending HTTP request. Message payload is of type: String (org.mule.api.MessagingException)
org.mule.module.http.internal.request.DefaultHttpRequester:287 (http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/api/MessagingException.html)
--------------------------------------------------------------------------------
Root Exception stack trace:
java.util.concurrent.TimeoutException: Timeout exceeded
at com.ning.http.client.providers.grizzly.GrizzlyAsyncHttpProvider.timeout(GrizzlyAsyncHttpProvider.java:426)
at com.ning.http.client.providers.grizzly.GrizzlyAsyncHttpProvider$3.onTimeout(GrizzlyAsyncHttpProvider.java:274)
at org.glassfish.grizzly.utils.IdleTimeoutFilter$DefaultWorker.doWork(IdleTimeoutFilter.java:398)
+ 3 more (set debug level logging or '-Dmule.verbose.exceptions=true' for everything)
********************************************************************************
Спасибо за ваш комментарий. Этот тест был сгенерирован из модуля APIKit и изменен для включения макета. Я совершенно новичок в использовании MUnit, поэтому буду признателен за любые советы, если есть лучший способ добиться того, что я пытаюсь сделать. Течение, которое я тестирую, находится в моем первоначальном посте. – danw
Я добавил образец теста для вашего потока, чтобы вы начали –