/* *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.samples.test.miscellaneous; import org.apache.ibatis.jdbc.ScriptRunner; import org.testng.Assert; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; import org.w3c.dom.NodeList; import org.wso2.carbon.automation.engine.annotations.ExecutionEnvironment; import org.wso2.carbon.automation.engine.annotations.SetEnvironment; import org.wso2.carbon.automation.engine.frameworkutils.FrameworkPathUtil; import org.wso2.carbon.integration.common.admin.client.NDataSourceAdminServiceClient; import org.wso2.carbon.integration.common.utils.mgt.ServerConfigurationManager; import org.wso2.carbon.ndatasource.ui.stub.core.services.xsd.WSDataSourceMetaInfo; import org.wso2.carbon.ndatasource.ui.stub.core.services.xsd.WSDataSourceMetaInfo_WSDataSourceDefinition; import org.wso2.carbon.ndatasource.ui.stub.core.xsd.JNDIConfig; import org.wso2.esb.integration.common.utils.ESBIntegrationTest; import org.wso2.esb.integration.common.utils.Utils; import org.wso2.esb.integration.common.utils.clients.axis2client.AxisServiceClient; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.Reader; import java.sql.*; public class Sample657TestCase extends ESBIntegrationTest { private ServerConfigurationManager serverManager = null; private final String MYSQL_LIB = "mysql-connector-java-5.1.26.jar"; private Connection mysqlConnection = null; private NDataSourceAdminServiceClient dataSourceAdminServiceClient = null; private String url = null; private String driver = null; private String userName = null; private String password = null; private String datasource1 = "MySqlDS1"; private String datasource2 = "MySqlDS2"; @BeforeClass(alwaysRun = true) public void initialize() throws Exception { super.init(); serverManager = new ServerConfigurationManager(context); NodeList nodeList = context.getConfigurationNodeList("//datasource"); mysqlConnection = createMySqlConnection(nodeList); addPhysicalDBonMySql(datasource1); addPhysicalDBonMySql(datasource2); //copping dependency jms jar files to component/lib serverManager.copyToComponentLib(new File(FrameworkPathUtil.getSystemResourceLocation() + File.separator + "artifacts" + File.separator + "ESB" + File.separator + "jar" + File.separator + MYSQL_LIB)); serverManager.restartGracefully(); super.init(); dataSourceAdminServiceClient = new NDataSourceAdminServiceClient(contextUrls.getBackEndUrl(), getSessionCookie()); addDataSources(datasource1); addDataSources(datasource2); loadSampleESBConfiguration(657); } public void addPhysicalDBonMySql(String dataSource) throws Exception { File mysqlfile = new File(FrameworkPathUtil.getSystemResourceLocation() + File.separator + "artifacts" + File.separator + "ESB" + File.separator + "sql" + File.separator + "system.sql"); File stock = new File(FrameworkPathUtil.getSystemResourceLocation() + File.separator + "artifacts" + File.separator + "ESB" + File.separator + "sql" + File.separator + "mysqldata.sql"); Statement statement = mysqlConnection.createStatement(); statement.execute("DROP DATABASE IF EXISTS " + dataSource); statement.execute("CREATE DATABASE IF NOT EXISTS " + dataSource); statement.execute("USE " + dataSource); ScriptRunner scriptRunner; scriptRunner = new ScriptRunner(mysqlConnection); // Give the input file to Reader Reader readerSystemData = new BufferedReader( new FileReader(mysqlfile)); Reader readerUserData = new BufferedReader( new FileReader(stock)); // Execute script scriptRunner.runScript(readerSystemData); scriptRunner.runScript(readerUserData); } public void addDataSources(String datasource) throws Exception { JNDIConfig jndiConfig = new JNDIConfig(); jndiConfig.setName("jdbc/" + datasource); WSDataSourceMetaInfo wsDataSourceMetaInfo = new WSDataSourceMetaInfo(); wsDataSourceMetaInfo.setJndiConfig(jndiConfig); WSDataSourceMetaInfo_WSDataSourceDefinition wsDataSourceDefinition = new WSDataSourceMetaInfo_WSDataSourceDefinition(); wsDataSourceDefinition.setDsXMLConfiguration( "<configuration xmlns:svns=\"http://org.wso2.securevault/configuration\"" + " xmlns:xml=\"http://www.w3.org/XML/1998/namespace\">\n" + " <url>" + url + datasource + "</url>\n" + " <username>" + userName +"</username>\n" + " <password>" + password + "</password>\n" + " <driverClassName>" + driver + "</driverClassName>\n" + " <maxActive>50</maxActive>\n" + " <maxWait>60000</maxWait>\n" + " <testOnBorrow>true</testOnBorrow>\n" + " <validationQuery>SELECT 1</validationQuery>\n" + " <validationInterval>30000</validationInterval>\n" + "</configuration>"); wsDataSourceDefinition.setType("RDBMS"); wsDataSourceMetaInfo.setDefinition(wsDataSourceDefinition); wsDataSourceMetaInfo.setName(datasource); dataSourceAdminServiceClient.addDataSource(wsDataSourceMetaInfo); } @SetEnvironment(executionEnvironments = {ExecutionEnvironment.STANDALONE}) @Test(groups = {"wso2.esb"}, description = "testDtaSources " ,enabled=false) public void testDtaSources() throws Exception { AxisServiceClient client = new AxisServiceClient(); client.sendRobust(Utils.getStockQuoteRequest("IBM") , getMainSequenceURL(), "getQuote"); Thread.sleep(5000); Statement statement = mysqlConnection.createStatement(); statement.execute("SELECT * FROM " + datasource2 + ".company"); ResultSet resultSet = statement.getResultSet(); boolean bWSO2Found = false; while (resultSet.next()) { if (resultSet.getString(1).contains("WSO2")) { bWSO2Found = true; break; } } Assert.assertTrue(bWSO2Found, "Insert record failed to database"); } public Connection createMySqlConnection(NodeList nodeList) throws ClassNotFoundException, SQLException, IllegalAccessException, InstantiationException { for ( int i = 0; i < nodeList.getLength(); i++) { if (nodeList.item(i).getAttributes().item(0).getNodeValue().equalsIgnoreCase("mysql")) { NodeList mysqlNodeList = nodeList.item(i).getChildNodes(); for ( int j = 0; j < mysqlNodeList.getLength(); j++) { String nodeName = mysqlNodeList.item(j).getNodeName(); String nodeContent = mysqlNodeList.item(j).getTextContent(); if (nodeName.equalsIgnoreCase("url")) { url = nodeContent; } else if (nodeName.equalsIgnoreCase("username")) { userName = nodeContent; } else if (nodeName.equalsIgnoreCase("password")) { password = nodeContent; } else if (nodeName.equalsIgnoreCase("driverClassName")) { driver = nodeContent; } else { log.debug("Unused config"); } } } } Class.forName(driver).newInstance(); return DriverManager.getConnection(url, userName, password); } @AfterClass(alwaysRun = true) public void deleteService() throws Exception { mysqlConnection.close(); super.cleanup(); Thread.sleep(5000); serverManager.removeFromComponentLib(MYSQL_LIB); serverManager.restoreToLastConfiguration(); } }