blob: 6b48e4c0125b1dffc8d09bca147ca4f1b33d2637 [file] [log] [blame]
package org.apache.axis2.engine;
import junit.framework.TestCase;
import junit.framework.Test;
import junit.framework.TestSuite;
import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.soap.SOAPEnvelope;
import org.apache.axiom.soap.SOAPFactory;
import org.apache.axis2.Constants;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.client.ServiceClient;
import org.apache.axis2.context.ConfigurationContext;
import org.apache.axis2.context.ConfigurationContextFactory;
import org.apache.axis2.description.AxisService;
import org.apache.axis2.engine.util.RequestCounter;
import org.apache.axis2.engine.util.RequestCounterMessageReceiver;
import org.apache.axis2.integration.UtilServer;
import org.apache.axis2.integration.UtilServerBasedTestCase;
import org.apache.axis2.util.Utils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import javax.xml.namespace.QName;
/*
* Copyright 2001-2004 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.
*
*/
public class ServiceGroupContextTest extends UtilServerBasedTestCase {
/**
* This test will first sends a request to a dummy service deployed. That service will get
* message contexts as inputs and will put a property in the service group context to count the
* number of requests.
* Then the client, upon receiving the response, extracts the sgc id from the received message
* (this will come as a reference parameter in the ReplyTo EPR) and sets that as a top level
* soap header in the next request to the same service group.
* Server will correctly identify the service group from the information sent by the client and
* retrieve the sgc earlier used and will use that for the current request as well.
* The service will retrieve the request count from the sgc and increase that by one.
* <p/>
* Test will asserts whether the client gets the number of requests as 2, when he invokes two times.
*/
protected EndpointReference targetEPR = new EndpointReference("http://127.0.0.1:" +
(UtilServer.TESTING_PORT) +
"/axis2/services/RequestCounter");
private static final Log log = LogFactory.getLog(ServiceGroupContextTest.class);
protected QName serviceName = new QName("RequestCounter");
protected QName operationName = new QName("getRequestCount");
protected QName transportName = new QName("http://localhost/my", "NullTransport");
protected AxisService service;
public static Test suite() {
return getTestSetup(new TestSuite(ServiceGroupContextTest.class));
}
protected void setUp() throws Exception {
service = Utils.createSimpleService(serviceName, new RequestCounterMessageReceiver(),
RequestCounter.class.getName(), operationName);
// service.setScope(Constants.SCOPE_TRANSPORT_SESSION);
service.setScope(Constants.SCOPE_SOAP_SESSION);
UtilServer.deployService(service);
UtilServer.getConfigurationContext().getAxisConfiguration().setManageTransportSession(true);
}
protected void tearDown() throws Exception {
UtilServer.unDeployService(serviceName);
UtilServer.unDeployClientService();
}
public void testEchoXMLSync() throws Exception {
SOAPFactory fac = OMAbstractFactory.getSOAP11Factory();
SOAPEnvelope payload = fac.getDefaultEnvelope();
Options options = new Options();
options.setTo(targetEPR);
options.setManageSession(true);
options.setTransportInProtocol(Constants.TRANSPORT_HTTP);
options.setAction(operationName.getLocalPart());
ConfigurationContext configContext =
ConfigurationContextFactory.createConfigurationContextFromFileSystem("target/test-resources/integrationRepo", null);
configContext.getAxisConfiguration().engageModule(new QName("addressing"));
ServiceClient sender = new ServiceClient(configContext, null);
sender.setOptions(options);
sender.sendReceive(payload.getBody().getFirstElement());
SOAPEnvelope defaultEnvelope = fac.getDefaultEnvelope();
//TODO : ple imporove this , what I have done is a hack
OMElement result2 = sender.sendReceive(defaultEnvelope.getBody().getFirstElement());
String text = result2.getText();
assertEquals("Number of requests should be 2", 2, Integer.parseInt(text));
}
}