1   /*
2    * $Id: ResponseTransformerScenariosTestCase.java 11446 2008-03-20 11:12:51Z dirk.olmes $
3    * --------------------------------------------------------------------------------------
4    * Copyright (c) MuleSource, Inc.  All rights reserved.  http://www.mulesource.com
5    *
6    * The software in this package is published under the terms of the CPAL v1.0
7    * license, a copy of which has been included with this distribution in the
8    * LICENSE.txt file.
9    */
10  
11  package org.mule.test.integration.transformer.response;
12  
13  import org.mule.api.MuleMessage;
14  import org.mule.module.client.MuleClient;
15  import org.mule.tck.FunctionalTestCase;
16  import org.mule.transport.http.HttpMessageAdapter;
17  
18  public class ResponseTransformerScenariosTestCase extends FunctionalTestCase
19  {
20  
21      private static String VM_INBOUND = " inbound";
22      private static String VM_OUTBOUND = " outbound";
23      private static String VM_RESPONSE = " response";
24  
25      private static String VM_OUT_IN_RESP = VM_OUTBOUND + VM_INBOUND + VM_RESPONSE;
26  
27      private static String CUSTOM_RESPONSE = " customResponse";
28  
29      @Override
30      protected String getConfigResources()
31      {
32          return "org/mule/test/integration/transformer/response/response-transformer-scenarios.xml";
33      }
34  
35      // ***** RESPONSE ENDPONTS ON INBOUND ENDPOINTS USED FOR SYNC RESPONSE AFTER ROUTING *****
36      // Applied by DefaultInternalMessageListener
37  
38      // TODO FAILING MULE- 2969
39  
40      // public void testXfireSyncResponseTransformer() throws Exception
41      // {
42      // MuleClient client = new MuleClient();
43      // MuleMessage message = client.send("xfire:http://localhost:4444/services/XFireSync?method=echo",
44      // "request",
45      // null);
46      // assertNotNull(message);
47      // assertEquals("request" + "customResponse", message.getPayloadAsString());
48      // }
49  
50      // TODO Not sure how to implement with axis
51  
52      // public void testAxisSyncResponseTransformer() throws Exception
53      // {
54      // MuleClient client = new MuleClient();
55      // MuleMessage message = client.send("axis:http://localhost:4445/services/AxisSync?method=echo",
56      // "request",
57      // null);
58      // assertNotNull(message);
59      // assertEquals("request" + "customResponse", message.getPayloadAsString());
60      // }
61  
62      public void testVmSync() throws Exception
63      {
64          MuleClient client = new MuleClient();
65          MuleMessage message = client.send("vm://sync", "request", null);
66          assertNotNull(message);
67          assertEquals("request" + VM_OUT_IN_RESP, message.getPayloadAsString());
68      }
69  
70      public void testVmSyncResponseTransformer() throws Exception
71      {
72          MuleClient client = new MuleClient();
73          MuleMessage message = client.send("vm://syncResponseTransformer", "request", null);
74          assertNotNull(message);
75          assertEquals("request" + VM_OUTBOUND + VM_INBOUND + CUSTOM_RESPONSE, message.getPayloadAsString());
76      }
77  
78      public void testHttpSync() throws Exception
79      {
80          MuleClient client = new MuleClient();
81          MuleMessage message = client.send("http://localhost:4446", "request", null);
82          assertNotNull(message);
83          // Ensure MuleMessageToHttpResponse was used before sending response
84          assertTrue(message.getAdapter() instanceof HttpMessageAdapter);
85          assertEquals("text/plain; charset=UTF-8", ((HttpMessageAdapter) message.getAdapter()).getHeader("Content-Type")
86              .getValue());
87          assertEquals("request", message.getPayloadAsString());
88      }
89  
90      public void testHttpSyncResponseTransformer() throws Exception
91      {
92          MuleClient client = new MuleClient();
93          MuleMessage message = client.send("http://localhost:4447", "request", null);
94          assertNotNull(message);
95          // Ensure MuleMessageToHttpResponse was used before sending response
96          // NOTE: With http setting custom response transformer does not replace transport default, becasue
97          // custom transformers are called in DefaultInternalMessageListener and http transformer perform
98          // explict response transformer afterwards in HttpMessageReciever.doRequest(HttpRequest request,
99          // RequestLine requestLine) before returning result to client
100         assertTrue(message.getAdapter() instanceof HttpMessageAdapter);
101         assertEquals("text/plain; charset=UTF-8", ((HttpMessageAdapter) message.getAdapter()).getHeader("Content-Type")
102             .getValue());
103         assertEquals("request" + CUSTOM_RESPONSE, message.getPayloadAsString());
104     }
105 
106     // ***** RESPONSE ENDPONTS ON INBOUND ENDPOINTS USED FOR REMOTE-SYNC RESPONSE AFTER ROUTRING *****
107     // Applied by ReplyToHandler
108 
109     public void testJmsSyncResponseTransformer() throws Exception
110     {
111         MuleClient client = new MuleClient();
112         MuleMessage message = client.send("jms://sync", "request", null);
113         assertNotNull(message);
114         assertEquals("request" + CUSTOM_RESPONSE, message.getPayloadAsString());
115     }
116 
117     // ***** RESPONSE ENDPONTS ON OUTBOUND ENDPOINT *****
118     // Applied by DefaultMuleSession once result message is received from remote endpoint.
119 
120     public void testVmSyncOutboundEndpointResponseTransformer() throws Exception
121     {
122         MuleClient client = new MuleClient();
123         MuleMessage message = client.send("vm://syncOutboundEndpointResponseTransformer", "request", null);
124         assertNotNull(message);
125         // TODO Custom response transformer should be applied as response is received, but as remoteSync="false"
126         // no transformation happens
127         // Ross: really, if VM is sync, its remoteSync by default
128         // Ross: I think the vm transport need to automatically set the the reote Sync flag if sync
129         // assertEquals("request" + VM_OUTBOUND + VM_INBOUND + VM_OUT_IN_RESP + CUSTOM_RESPONSE + VM_RESPONSE,
130         // message.getPayloadAsString());
131         assertEquals("request" + VM_OUTBOUND + VM_INBOUND + VM_OUT_IN_RESP + VM_RESPONSE, message.getPayloadAsString());
132     }
133 
134     public void testJmsRemoteSync() throws Exception
135     {
136         MuleClient client = new MuleClient();
137         MuleMessage message = client.send("vm://jmsSync", "request", null);
138         assertNotNull(message);
139 
140         assertEquals("request" + VM_OUT_IN_RESP, message.getPayloadAsString());
141     }
142 
143     public void testJmsSyncOutboundEndpointResponseTransformer() throws Exception
144     {
145         MuleClient client = new MuleClient();
146         MuleMessage message = client.send("vm://jmsSyncOutboundEndpointResponseTransformer", "request", null);
147         assertNotNull(message);
148         assertEquals("request" + VM_OUT_IN_RESP, message.getPayloadAsString());
149     }
150 
151     public void testJmsRemoteSyncOutboundEndpointResponseTransformer() throws Exception
152     {
153         MuleClient client = new MuleClient();
154         MuleMessage message = client.send("vm://jmsRemoteSyncOutboundEndpointResponseTransformer", "request", null);
155         assertNotNull(message);
156         assertEquals("request" + VM_OUTBOUND + VM_INBOUND + CUSTOM_RESPONSE + VM_RESPONSE, message.getPayloadAsString());
157     }
158 
159     public void testChainedRouterOutboundEndpointResponseTransformer() throws Exception
160     {
161         MuleClient client = new MuleClient();
162         MuleMessage message = client.send("vm://chainedRouterOutboundEndpointResponseTransformer", "request", null);
163         assertNotNull(message);
164         assertEquals("request" + VM_OUTBOUND + VM_INBOUND + VM_OUT_IN_RESP + VM_OUT_IN_RESP + CUSTOM_RESPONSE
165                      + CUSTOM_RESPONSE + VM_RESPONSE, message.getPayloadAsString());
166     }
167 
168     public void testNestedRouterOutboundEndpointResponseTransformer() throws Exception
169     {
170         MuleClient client = new MuleClient();
171         MuleMessage message = client.send("vm://nestedRouterOutboundEndpointResponseTransformer", "request", null);
172         assertNotNull(message);
173         assertEquals("request" + VM_OUTBOUND + VM_INBOUND + VM_OUT_IN_RESP + CUSTOM_RESPONSE + CUSTOM_RESPONSE
174                      + VM_RESPONSE, message.getPayloadAsString());
175     }
176 
177 }