/*
* Copyright 2014 Red Hat Inc. and/or its affiliates and other contributors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.switchyard.karaf.test.quickstarts;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import org.custommonkey.xmlunit.XMLAssert;
import org.custommonkey.xmlunit.XMLUnit;
import org.junit.BeforeClass;
import org.junit.Assert;
import org.junit.Test;
import org.switchyard.common.type.Classes;
import org.switchyard.component.test.mixins.http.HTTPMixIn;
public class SoapAddressingQuickstartTest extends AbstractQuickstartTest {
private static String bundleName = "org.switchyard.quickstarts.switchyard.soap.addressing";
private static String featureName = "switchyard-quickstart-soap-addressing";
private static String SWITCHYARD_WEB_SERVICE = "http://localhost:8181/cxf/soap-addressing/order/OrderService";
private HTTPMixIn _httpMixIn = new HTTPMixIn();
@BeforeClass
public static void before() throws Exception {
startTestContainer(featureName, bundleName);
}
@Test
public void addressingError() throws Exception {
_httpMixIn.initialize();
try {
XMLUnit.setIgnoreWhitespace(true);
String response = _httpMixIn.postString(SWITCHYARD_WEB_SERVICE, REQUEST);
Assert.assertTrue(response.contains("MessageAddressingHeaderRequired"));
Assert.assertTrue(response.contains("A required header representing a Message Addressing Property is not present"));
} finally {
_httpMixIn.uninitialize();
}
}
@Test
public void addressingReplyTo() throws Exception {
_httpMixIn.initialize();
try {
File testFile = new File("/tmp/test.txt");
if (testFile.exists()) {
testFile.delete();
}
String response = _httpMixIn.postString(SWITCHYARD_WEB_SERVICE, REQUEST2);
Assert.assertTrue(response, response.contains("urn:switchyard-quickstart:soap-addressing:1.0:OrderService:orderResponse"));
Assert.assertTrue(response, response.contains("uuid:3d3fcbbb-fd43-4118-b40e-62577894f39a"));
Assert.assertTrue(response, response.contains("Thank you for your order. You should hear back from our WarehouseService shortly!"));
// Wait for the actual response from WarehouseService
int timeout = 0;
while (!testFile.exists()) {
Thread.sleep(100);
timeout += 100;
if (timeout == 15000) {
break;
}
}
System.out.println("...................." + testFile.exists());
BufferedReader stream = new BufferedReader(new FileReader(testFile));
String text = stream.readLine();
stream.close();
Assert.assertEquals("Order Boeing with quantity 10 accepted.", text);
} finally {
_httpMixIn.uninitialize();
}
}
private static String REQUEST = "<S:Envelope xmlns:S=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:ns2=\"urn:switchyard-quickstart:soap-addressing:1.0\">"
+ " <S:Body>"
+ " <ns2:order>"
+ " <item>Boeing</item>"
+ " <quantity>10</quantity>"
+ " </ns2:order>"
+ " </S:Body>"
+ "</S:Envelope>";
private static String REQUEST2 = "<S:Envelope xmlns:S=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:ns2=\"urn:switchyard-quickstart:soap-addressing:1.0\">"
+ " <S:Header xmlns:wsa=\"http://www.w3.org/2005/08/addressing\">"
+ " <wsa:MessageID>uuid:3d3fcbbb-fd43-4118-b40e-62577894f39a</wsa:MessageID>"
+ " <wsa:Action>urn:switchyard-quickstart:soap-addressing:1.0:OrderService:orderRequest</wsa:Action>"
+ " </S:Header>"
+ " <S:Body>"
+ " <ns2:order>"
+ " <item>Boeing</item>"
+ " <quantity>10</quantity>"
+ " </ns2:order>"
+ " </S:Body>"
+ "</S:Envelope>";
}