2016-02-19 3 views
2

У меня есть следующий 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) 
******************************************************************************** 

ответ

2

В тесте, почему вы делаете вызов http:endpoint здесь <http:request config-ref="HTTP_Request_Configuration" path="/clients/#[flowVars['clientId']]" method="GET" doc:name="HTTP"/>

Кроме того, я не вижу <flow-ref...> вызов вызовите текущий фактический поток.

EDIT:

Основная тестовая структура может следовать этому скелету:

 <munit:config name="munit" doc:name="MUnit configuration"/> 
     <spring:beans> 
      <spring:import resource="classpath:munit-test.xml"/> 
     </spring:beans> 
     <munit:test name="new-test-suite-get:/clients/{clientId}:api-configTest" description="Test"> 

     <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" /> 
<!-- Below will make an actual call to the flow --> 
      <flow-ref name="get:/clients/{clientId}:api-config" doc:name="Flow-ref to get:/clients/{clientId}:api-config"/> 
     </munit:test> 
+0

Спасибо за ваш комментарий. Этот тест был сгенерирован из модуля APIKit и изменен для включения макета. Я совершенно новичок в использовании MUnit, поэтому буду признателен за любые советы, если есть лучший способ добиться того, что я пытаюсь сделать. Течение, которое я тестирую, находится в моем первоначальном посте. – danw

+0

Я добавил образец теста для вашего потока, чтобы вы начали –

 Смежные вопросы

  • Нет связанных вопросов^_^