/* | |
* Copyright 2004,2005 The Apache Software Foundation. | |
* | |
* 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.apache.sandesha2; | |
import java.io.File; | |
import java.io.FileInputStream; | |
import java.io.FileNotFoundException; | |
import java.io.IOException; | |
import java.io.InputStream; | |
import java.util.Properties; | |
import javax.xml.namespace.QName; | |
import junit.framework.TestCase; | |
import org.apache.axiom.om.OMAbstractFactory; | |
import org.apache.axiom.om.OMElement; | |
import org.apache.axiom.om.OMFactory; | |
import org.apache.axiom.om.OMNamespace; | |
import org.apache.axiom.om.OMXMLBuilderFactory; | |
import org.apache.axiom.om.OMXMLParserWrapper; | |
import org.apache.axiom.soap.SOAPBody; | |
import org.apache.axiom.soap.SOAPEnvelope; | |
import org.apache.axis2.client.async.AxisCallback; | |
import org.apache.axis2.context.ConfigurationContext; | |
import org.apache.axis2.context.ConfigurationContextFactory; | |
import org.apache.axis2.context.MessageContext; | |
import org.apache.axis2.description.AxisOperation; | |
import org.apache.axis2.description.AxisOperationFactory; | |
import org.apache.axis2.description.AxisService; | |
import org.apache.axis2.engine.MessageReceiver; | |
import org.apache.axis2.transport.http.SimpleHTTPServer; | |
import org.apache.commons.logging.Log; | |
import org.apache.commons.logging.LogFactory; | |
public class SandeshaTestCase extends TestCase { | |
String resourceDir = ""; //"test-resources"; | |
Properties properties = null; | |
final String PROPERTY_FILE_NAME = "sandesha2-test.properties"; | |
public final int DEFAULT_SERVER_TEST_PORT = 8060; | |
public ConfigurationContext serverConfigurationContext = null; | |
private final String RMServiceName = "RMSampleService"; | |
private Log log = LogFactory.getLog(getClass()); | |
private final static String applicationNamespaceName = "http://tempuri.org/"; | |
private final static String echoString = "echoString"; | |
private final static String ping = "ping"; | |
private final static String Text = "Text"; | |
private final static String Sequence = "Sequence"; | |
private final static String echoStringResponse = "echoStringResponse"; | |
private final static String EchoStringReturn = "EchoStringReturn"; | |
protected SimpleHTTPServer httpServer = null; | |
protected int serverPort = DEFAULT_SERVER_TEST_PORT; | |
protected int waitTime = 70000; // Each test will wait up to 70 seconds, unless we override it here | |
protected int tickTime = 10000; // Each wait will check the test assertions each second | |
protected String pingAction = "urn:wsrm:Ping"; | |
protected String echoAction = "urn:wsrm:EchoString"; | |
public SandeshaTestCase(String name) { | |
super(name); | |
String testRource = "target" + File.separator + "test-classes"; | |
resourceDir = new File(testRource).getPath(); | |
String propFileStr = resourceDir + File.separator + PROPERTY_FILE_NAME; | |
properties = new Properties(); | |
try { | |
FileInputStream propertyFile = new FileInputStream(new File(propFileStr)); | |
properties.load(propertyFile); | |
} catch (FileNotFoundException e) { | |
log.error(e); | |
} catch (IOException e) { | |
log.error(e); | |
} | |
} | |
public void setUp() throws Exception { | |
super.setUp(); | |
String serverPortStr = getTestProperty("test.server.port"); | |
if (serverPortStr != null) { | |
try { | |
serverPort = Integer.parseInt(serverPortStr); | |
} catch (NumberFormatException e) { | |
log.error(e); | |
} | |
} | |
} | |
public ConfigurationContext startServer(String repoPath, String axis2_xml) | |
throws Exception { | |
ConfigurationContext configContext = | |
ConfigurationContextFactory.createConfigurationContextFromFileSystem(repoPath, axis2_xml); | |
httpServer = new SimpleHTTPServer(configContext, serverPort); | |
httpServer.start(); | |
Thread.sleep(300); | |
return configContext; | |
} | |
public void tearDown() throws Exception { | |
if (httpServer != null) { | |
httpServer.stop(); | |
} | |
Thread.sleep(300); | |
} | |
protected InputStream getResource(String relativePath, String resourceName) { | |
String resourceFile = resourceDir + relativePath + File.separator + resourceName; | |
try { | |
return new FileInputStream(resourceFile); | |
} catch (FileNotFoundException e) { | |
throw new RuntimeException("cannot load the test-resource", e); | |
} | |
} | |
protected SOAPEnvelope getSOAPEnvelope() { | |
return OMAbstractFactory.getSOAP11Factory().getDefaultEnvelope(); | |
} | |
protected SOAPEnvelope getSOAPEnvelope(String relativePath, String resourceName) { | |
OMXMLParserWrapper wrapper = OMXMLBuilderFactory.createSOAPModelBuilder( | |
getResource(relativePath, resourceName), null); | |
return (SOAPEnvelope) wrapper.getDocumentElement(); | |
} | |
protected SOAPEnvelope getEmptySOAPEnvelope() { | |
return OMAbstractFactory.getSOAP11Factory().getDefaultEnvelope(); | |
} | |
protected static OMElement getEchoOMBlock(String text, String sequenceKey) { | |
OMFactory fac = OMAbstractFactory.getOMFactory(); | |
OMNamespace applicationNamespace = fac.createOMNamespace(applicationNamespaceName, "ns1"); | |
OMElement echoStringElement = fac.createOMElement(echoString, applicationNamespace); | |
OMElement textElem = fac.createOMElement(Text, applicationNamespace); | |
OMElement sequenceElem = fac.createOMElement(Sequence, applicationNamespace); | |
textElem.setText(text); | |
sequenceElem.setText(sequenceKey); | |
echoStringElement.addChild(textElem); | |
echoStringElement.addChild(sequenceElem); | |
return echoStringElement; | |
} | |
protected OMElement getPingOMBlock(String text) { | |
OMFactory fac = OMAbstractFactory.getOMFactory(); | |
OMNamespace namespace = fac.createOMNamespace(applicationNamespaceName, "ns1"); | |
OMElement pingElem = fac.createOMElement(ping, namespace); | |
OMElement textElem = fac.createOMElement(Text, namespace); | |
textElem.setText(text); | |
pingElem.addChild(textElem); | |
return pingElem; | |
} | |
protected String checkEchoOMBlock(OMElement response) { | |
assertEquals("Response namespace", applicationNamespaceName, response.getNamespace().getNamespaceURI()); | |
assertEquals("Response local name", echoStringResponse, response.getLocalName()); | |
OMElement echoStringReturnElem = response.getFirstChildWithName(new QName(applicationNamespaceName, EchoStringReturn)); | |
assertNotNull("Echo String Return", echoStringReturnElem); | |
String resultStr = echoStringReturnElem.getText(); | |
return resultStr; | |
} | |
public String getTestProperty(String key) { | |
if (properties != null) | |
return properties.getProperty(key); | |
return null; | |
} | |
public void overrideConfigurationContext(ConfigurationContext context, MessageReceiver messageReceiver, String operationName, boolean newOperation, int mep) throws Exception { | |
AxisService rmService = context.getAxisConfiguration().getService(RMServiceName); | |
AxisOperation operation = null; | |
if (newOperation) { | |
operation = rmService.getOperation(new QName(operationName)); | |
if (operation == null) | |
throw new Exception("Given operation not found"); | |
} else { | |
operation = AxisOperationFactory.getAxisOperation(mep); | |
rmService.addOperation(operation); | |
} | |
operation.setMessageReceiver(messageReceiver); | |
} | |
protected class TestCallback implements AxisCallback { | |
String name = null; | |
boolean completed = false; | |
boolean errorReported = false; | |
String resultStr; | |
public boolean isComplete() { | |
return completed; | |
} | |
public boolean isErrorReported() { | |
return errorReported; | |
} | |
public String getResult() { | |
return resultStr; | |
} | |
public TestCallback(String name) { | |
this.name = name; | |
} | |
public void onComplete() { | |
completed = true; | |
} | |
public void onMessage(MessageContext result) { | |
SOAPBody body = result.getEnvelope().getBody(); | |
OMElement contents = body.getFirstElement(); | |
this.resultStr = checkEchoOMBlock(contents); | |
System.out.println("TestCallback got text: '" + resultStr + "'"); | |
} | |
public void onFault(MessageContext result) { | |
errorReported = true; | |
System.out.println("TestCallback got fault: " + result.getEnvelope()); | |
} | |
public void onError(Exception e) { | |
errorReported = true; | |
System.out.println("TestCallback got exception"); | |
e.printStackTrace(); | |
} | |
} | |
} |