2017-10-19 5 views
0

Wir versuchen, den Amazon S3-Connector in einer MUNIT-Suite zu verhöhnen. Wir haben bereits mehrere Ansätze ausprobiert, aber der Schein scheint nie zu funktionieren:Mocked Amazon S3 Mule-Connector ruft noch tatsächliche S3-Aktion auf

  1. Für einen S3-Connector in Single-Flow hinzugefügt, haben wir versucht, eine mocked Payload-Antwort zu erstellen. Aber die endgültige Ausgabe ist immer die tatsächliche Nutzlast.
  2. Dann haben wir den S3-Aufruf in einen Sub-Flow verschoben und versucht, den ganzen Sub-Flow-Aufruf selbst zu verspotten, aber er ruft immer noch die eigentliche s3-Bucket-Aktion auf.
  3. Mit einem Spion um den Sub-Flow-Aufruf auch keinen Unterschied gemacht.

Hauptfluss:

<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 Testfall:

<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> 

Wir protokolliert auch ein ticket in Mule-Foren, aber wir haben keine Lösungen noch bekam. Weiß jemand wie man einen Jira in Mulesoft protokollieren kann?

Aus einigen anderen Fragen zu Stackoverflow scheint dasselbe Problem für viele andere OOB-Verbindungen vorhanden zu sein. MUNIT Mock scheint viele Fehler zu haben.

Antwort

0

Von dem, was ich durch den bereitgestellten Code sehen kann, verspottet Ihre Mock-Komponente den Sub-Flow nicht, weil Ihr Sub-Flow kein Attribut von "doc: name" hat. Es hat nur "Name" -Attribut. So Ihre Konfiguration so etwas wie

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

aussehen sollte Ist dies nicht noch funktioniert, versuchen zu ändern whereValue="#[matchContains('copyactionflowRef')]"

hoffe, das hilft!

+0

Nach der Verwendung der "matchContains" -Kontrolle wird der Sub-Flow verspottet. Aber wenn der S3-Connector Teil desselben Flusses ist, wird die Nutzlast des Mocked-Objekts wieder überschrieben. Also, unser Problem ist nur teilweise gelöst. Wir brauchen immer noch eine Möglichkeit, den S3-Connector im selben Fluss nachzuahmen. Danke für die Antwort. – gsonal