/*
*Copyright (c) 2005-2010, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
*
*WSO2 Inc. licenses this file to you 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.wso2.carbon.esb.mediator.test.spring;
import junit.framework.Assert;
import org.apache.axiom.om.OMElement;
import org.apache.axis2.AxisFault;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import org.wso2.esb.integration.common.clients.registry.ResourceAdminServiceClient;
import org.wso2.carbon.automation.engine.annotations.ExecutionEnvironment;
import org.wso2.carbon.automation.engine.annotations.SetEnvironment;
import org.wso2.carbon.automation.test.utils.common.FileManager;
import org.wso2.carbon.integration.common.utils.mgt.ServerConfigurationManager;import org.wso2.esb.integration.common.utils.ESBIntegrationTest;
import org.wso2.carbon.registry.resource.stub.ResourceAdminServiceExceptionException;
import javax.activation.DataHandler;
import javax.xml.namespace.QName;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.rmi.RemoteException;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNotNull;
import static org.testng.Assert.fail;
public class SpringMediationTestCase extends ESBIntegrationTest {
private final String SIMPLE_BEAN_JAR = "org.wso2.carbon.test.simplebean.jar";
private final String JAR_LOCATION = "/artifacts/ESB/jar";
private ServerConfigurationManager serverConfigurationManager;
@BeforeClass(alwaysRun = true)
public void setEnvironment() throws Exception {
super.init();
clearUploadedResource();
serverConfigurationManager = new ServerConfigurationManager(context);
serverConfigurationManager.copyToComponentLib
(new File(getClass().getResource(JAR_LOCATION + File.separator + SIMPLE_BEAN_JAR).toURI()));
serverConfigurationManager.restartGracefully();
super.init();
uploadResourcesToConfigRegistry();
}
@AfterClass(alwaysRun = true)
public void destroy() throws Exception {
try {
deleteSequence("main");
clearUploadedResource();
Thread.sleep(5000);
} finally {
super.cleanup();
serverConfigurationManager.removeFromComponentLib(SIMPLE_BEAN_JAR);
serverConfigurationManager.restartGracefully();
serverConfigurationManager = null;
}
}
@SetEnvironment(executionEnvironments = {ExecutionEnvironment.STANDALONE
})
@Test(groups = {"wso2.esb", "localOnly"}, description = "Spring Mediator " +
"- Change the spring xml and see whether message context is changed")
public void changeSpringXmlAndCheckMessageContextTest() throws Exception {
OMElement response;
String lastPrice;
String symbol;
loadESBConfigurationFromClasspath("/artifacts/ESB/mediatorconfig/spring/spring_mediation.xml");
response = axis2Client.sendSimpleStockQuoteRequest
(getMainSequenceURL(), null, "IBM");
lastPrice = response.getFirstElement().getFirstChildWithName(new QName("http://services.samples/xsd", "last"))
.getText();
assertNotNull(lastPrice, "Fault: response message 'last' price null");
symbol = response.getFirstElement().getFirstChildWithName(new QName("http://services.samples/xsd", "symbol"))
.getText();
assertEquals(symbol, "IBM", "Fault: value 'symbol' mismatched");
//TODO Log Assertion
/*
INFO - SpringCustomBean Starting Spring Mediator
INFO - SpringCustomBean Bean in Initialized with User:["esb user"]
INFO - SpringCustomBean E-MAIL:["usr@wso2.org"]
INFO - SpringCustomBean Massage Id: urn:
INFO - SpringCustomBean Logged....
*/
updateSpringBeanXML();
response = axis2Client.sendSimpleStockQuoteRequest
(getMainSequenceURL(), null, "WSO2");
lastPrice = response.getFirstElement().getFirstChildWithName(new QName("http://services.samples/xsd", "last"))
.getText();
assertNotNull(lastPrice, "Fault: response message 'last' price null");
symbol = response.getFirstElement().getFirstChildWithName(new QName("http://services.samples/xsd", "symbol"))
.getText();
assertEquals(symbol, "WSO2", "Fault: value 'symbol' mismatched");
//TODO Log Assertion for Updated spring xml
/*
INFO - SpringCustomBean Bean in Initialized with User:["synapse user"]
INFO - SpringCustomBean E-MAIL:["usr@synapse.org"]
*/
}
@SetEnvironment(executionEnvironments = {ExecutionEnvironment.STANDALONE
})
@Test(groups = {"wso2.esb", "localOnly"}, description = "Spring Mediator " +
"-Added Simple bean into lib -referring to an invalid spring xml")
public void uploadSequenceHavingInvalidSpringXMLTest() throws Exception {
loadESBConfigurationFromClasspath("/artifacts/ESB/mediatorconfig/spring/spring_mediation_invalid_spring_bean.xml");
try {
axis2Client.sendSimpleStockQuoteRequest
(getMainSequenceURL(), null, "WSO2");
Assert.fail("Request must failed since it refers invalid spring bean");
} catch (Exception expected) {
assertEquals(expected.getMessage(), "Cannot reference application context with key : conf:/spring/invalidSpringbeammmn.xml"
, "Error Message Mismatched when referring invalid springbean in sequence");
}
}
@SetEnvironment(executionEnvironments = {ExecutionEnvironment.STANDALONE
})
@Test(groups = {"wso2.esb", "localOnly"}, description = "Spring Mediator " +
"- referring to an non existing spring xml")
public void uploadSequenceHavingNonExistingSpringXMLResourceTest() throws Exception {
loadESBConfigurationFromClasspath("/artifacts/ESB/mediatorconfig/spring/spring_mediation_springBean_resource_not_exist.xml");
try {
axis2Client.sendSimpleStockQuoteRequest
(getMainSequenceURL(), null, "WSO2");
Assert.fail("Request must failed since it refers non existing spring bean");
} catch (Exception expected) {
assertEquals(expected.getMessage(), "Cannot reference application context with key : conf:/spring/NonExistingSpringbean.xml"
, "Error Message Mismatched when referring non existing springbean in sequence");
}
}
@SetEnvironment(executionEnvironments = {ExecutionEnvironment.STANDALONE
})
@Test(groups = {"wso2.esb", "localOnly"}, description = "Spring Mediator " +
"-Added Simple bean into lib " +
"-Different bean ids in spring xml")
public void providingNonExistingBeanNamesTest() throws Exception {
loadESBConfigurationFromClasspath("/artifacts/ESB/mediatorconfig/spring/spring_mediation_different_bean_id.xml");
try {
axis2Client.sendSimpleStockQuoteRequest
(getMainSequenceURL(), null, "IBM");
fail("Request must throw a axisFault since sequence refers a non existing bean id");
} catch (AxisFault axisFault) {
assertEquals(axisFault.getMessage(), "No bean named 'springtestNonExisting' is defined", "Fault: Error message mismatched");
}
}
@SetEnvironment(executionEnvironments = {ExecutionEnvironment.STANDALONE
})
@Test(groups = {"wso2.esb", "localOnly"}, description = "Spring Mediator -Added Simple bean into lib")
public void springBeanMediationTest() throws Exception {
loadESBConfigurationFromClasspath("/artifacts/ESB/mediatorconfig/spring/spring_mediation.xml");
OMElement response = axis2Client.sendSimpleStockQuoteRequest
(getMainSequenceURL(), null, "IBM");
String lastPrice = response.getFirstElement().getFirstChildWithName(new QName("http://services.samples/xsd", "last"))
.getText();
assertNotNull(lastPrice, "Fault: response message 'last' price null");
String symbol = response.getFirstElement().getFirstChildWithName(new QName("http://services.samples/xsd", "symbol"))
.getText();
assertEquals(symbol, "IBM", "Fault: value 'symbol' mismatched");
//TODO Log Assertion
}
private void updateSpringBeanXML()
throws ResourceAdminServiceExceptionException, IOException, InterruptedException {
ResourceAdminServiceClient resourceAdminServiceClient =
new ResourceAdminServiceClient(contextUrls.getBackEndUrl(), getSessionCookie());
String filePath = getESBResourceLocation() + File.separator + "mediatorconfig" + File.separator
+ "spring" + File.separator + "utils" + File.separator + "updating_spring.xml";
resourceAdminServiceClient
.updateTextContent("/_system/config/spring/springbean.xml", FileManager.readFile(filePath));
Thread.sleep(20000); //need to persist changes done to spring xml
}
private void uploadResourcesToConfigRegistry() throws Exception {
ResourceAdminServiceClient resourceAdminServiceStub =
new ResourceAdminServiceClient(contextUrls.getBackEndUrl(), getSessionCookie());
resourceAdminServiceStub.deleteResource("/_system/config/spring");
resourceAdminServiceStub.addCollection("/_system/config/", "spring", "",
"Contains spring bean config files");
resourceAdminServiceStub.addResource(
"/_system/config/spring/springbean.xml", "application/xml", "spring bean config files",
new DataHandler(new URL("file:///" + getClass().getResource(
"/artifacts/ESB/mediatorconfig/spring/utils/springbean.xml").getPath())));
resourceAdminServiceStub.addResource(
"/_system/config/spring/invalidSpringbean.xml", "application/xml", "spring bean config files",
new DataHandler(new URL("file:///" + getClass().getResource(
"/artifacts/ESB/mediatorconfig/spring/utils/invalid_spring_bean.xml").getPath())));
}
private void clearUploadedResource()
throws InterruptedException, ResourceAdminServiceExceptionException, RemoteException {
ResourceAdminServiceClient resourceAdminServiceStub =
new ResourceAdminServiceClient(contextUrls.getBackEndUrl(), getSessionCookie());
resourceAdminServiceStub.deleteResource("/_system/config/spring");
}
}