Подделка коннектора Amazon S3 Mule по-прежнему вызывает фактическое действие S3

Мы пытаемся имитировать разъем Amazon S3 в пакете MUNIT. Мы уже испробовали несколько подходов, но макет, похоже, никогда не работает:

  1. Для коннектора S3, добавленного в одном потоке, мы попытались создать имитацию ответа полезной нагрузки. Но конечный результат - это всегда фактическая полезная нагрузка.
  2. Затем мы переместили вызов S3 в подпоток и попытались имитировать сам вызов всего подпотока, но он по-прежнему всегда вызывает фактическое действие ведра s3.
  3. Использование шпиона для вызова вспомогательного потока также не имело никакого значения.

Основной поток:

<flow name="helios-s3-copy-file" 
      processingStrategy="synchronous">
    <http:listener config-ref="HTTP_Listener_Configuration" path="/movefile" doc:name="HTTP"/>

    <set-variable value="#['Test']" variableName="feedPathPrefix" doc:name="Set feed prefix" />
    <set-variable variableName="srcPath"
                      value="#[feedPathPrefix + '/TestFilemule.xlsx']"
                      doc:name="Source" />
    <set-variable variableName="destPath"
                      value="#[feedPathPrefix + '/dest/TestFilemule.xlsx']"
                      doc:name="Destination" />
    <flow-ref name="copyactionflowRef" doc:name="copyactionflow"/>
    <logger 
            level="INFO" doc:name="Logger" message="#[flowVars.copyMsg]"/>
    <set-payload value="#[flowVars.copyMsg]" doc:name="Set Payload"/>
</flow>
<sub-flow name="copyactionflowRef">
    <s3:copy-object config-ref="Amazon_S3__Configuration" sourceBucketName="some-bucket-name" sourceKey="#[srcPath]" destinationBucketName="some-bucket-name" destinationKey="#[destPath]" doc:name="Copy Processed File"/>
    <set-variable variableName="copyMsg" value="#['Completed copy from ' + feedPathPrefix + ' to ' + destPath + ' directory']" doc:name="Variable"/>
</sub-flow>

Тестовый кейс Munit:

<munit:test name="amazons3test-test-suite-helios-s3-copy-fileTest" description="Testing mocking of copy objects" >
    <mock:when messageProcessor="mule:sub-flow" doc:name="Mock2">
        <mock:with-attributes>
            <mock:with-attribute name="doc:name" whereValue="#['copyactionflowRef']"/>
        </mock:with-attributes>
        <mock:then-return payload="#['Copy completed payload']">
            <mock:outbound-properties>
                <mock:outbound-property key="copyMsg" value="Copy complete"/>
            </mock:outbound-properties>
        </mock:then-return>
    </mock:when>

    <!-- <mock:spy messageProcessor="mule:sub-flow" doc:name="Spy">
        <mock:with-attributes>
            <mock:with-attribute name="doc:name" whereValue="#['copyactionflowRef']"/>
        </mock:with-attributes>
        <mock:assertions-before-call>
            <logger message="Must not make actual S3 call" level="INFO" doc:name="Logger"/>
        </mock:assertions-before-call>
        <mock:assertions-after-call>
            <munit:set payload="#['mock payload']" doc:name="Set Message">
                <munit:invocation-properties>
                    <munit:invocation-property key="copyMsg" value="Value from Spy"/>
                </munit:invocation-properties>
            </munit:set>
        </mock:assertions-after-call>
    </mock:spy> -->
    <flow-ref name="helios-s3-copy-file" doc:name="Flow-ref to helios-s3-copy-file"/>
</munit:test>

Мы также зарегистрировали тикет на форумах Mule, но у нас пока нет решений. Кто-нибудь знает, как мы можем войти в Jira в Mulesoft?

Из некоторых других вопросов о stackoverflow кажется, что такая же проблема существует для многих других соединений OOB. У макета MUNIT, похоже, много недостатков.


person gsonal    schedule 19.10.2017    source источник


Ответы (1)


Судя по предоставленному вами коду, ваш компонент Mock не имитирует подпоток, потому что ваш подпоток не имеет атрибута "doc: name". У него есть только атрибут name. Итак, ваша конфигурация должна выглядеть примерно так

<mock:with-attributes>
        <mock:with-attribute name="name" whereValue="#['copyactionflowRef']"/>
</mock:with-attributes>

Если это по-прежнему не работает, попробуйте изменить whereValue="#[matchContains('copyactionflowRef')]"

Надеюсь это поможет!

person Abhay Singh    schedule 19.10.2017
comment
После использования проверки matchContains субпоток становится имитируемым. Но если коннектор S3 является частью того же потока, полезная нагрузка имитируемого объекта снова переопределяется. Итак, наша проблема решена лишь частично. Нам все еще нужен способ имитировать разъем S3 в том же потоке. Спасибо за ответ. - person gsonal; 19.10.2017