On Mon, Dec 19, 2011 at 3:31 PM, Afkham Azeez <az...@wso2.com> wrote:
> With the following commit, we can start a number of Carbon server > instances from an integration TestSuite. Now it makes it very simple to > write an integration test case which involves multiple Carbon products. > Please take a look at the Javadocs of > org.wso2.carbon.integration.framework.MultipleServersManager to see how > this can be used. The automation team can use this API for automation > purposes too. > +1, Noted. Thanks, Krishantha. > > ---------- Forwarded message ---------- > From: <az...@wso2.com> > Date: Mon, Dec 19, 2011 at 3:18 PM > Subject: [Carbon-commits] [Carbon] svn commit r118036 - in > trunk/carbon/core/integration: > framework/src/main/java/org/wso2/carbon/integration/framework > framework/src/main/java/org/wso2/carbon/integration/framework/utils > tests/src/test/java/org/wso2/carbon/integration/tests > To: carbon-comm...@wso2.org > > > Author: azeez > Date: Mon Dec 19 01:48:32 2011 > New Revision: 118036 > URL: http://wso2.org/svn/browse/wso2?view=rev&revision=118036 > > Log: > Ability to start multiple Carbon servers inside an integration TestSuite > > > > Added: > > trunk/carbon/core/integration/tests/src/test/java/org/wso2/carbon/integration/tests/MultipleCarbonInstancesTestCase.java > Modified: > > trunk/carbon/core/integration/framework/src/main/java/org/wso2/carbon/integration/framework/ClientConnectionUtil.java > > trunk/carbon/core/integration/framework/src/main/java/org/wso2/carbon/integration/framework/LoginLogoutUtil.java > > trunk/carbon/core/integration/framework/src/main/java/org/wso2/carbon/integration/framework/MultipleServersManager.java > > trunk/carbon/core/integration/framework/src/main/java/org/wso2/carbon/integration/framework/TestServerManager.java > > trunk/carbon/core/integration/framework/src/main/java/org/wso2/carbon/integration/framework/utils/ServerUtils.java > > trunk/carbon/core/integration/tests/src/test/java/org/wso2/carbon/integration/tests/CarbonTestServerManager.java > > Modified: > trunk/carbon/core/integration/framework/src/main/java/org/wso2/carbon/integration/framework/ClientConnectionUtil.java > URL: > http://wso2.org/svn/browse/wso2/trunk/carbon/core/integration/framework/src/main/java/org/wso2/carbon/integration/framework/ClientConnectionUtil.java?rev=118036&r1=118035&r2=118036&view=diff > > ============================================================================== > --- > trunk/carbon/core/integration/framework/src/main/java/org/wso2/carbon/integration/framework/ClientConnectionUtil.java > (original) > +++ > trunk/carbon/core/integration/framework/src/main/java/org/wso2/carbon/integration/framework/ClientConnectionUtil.java > Mon Dec 19 01:48:32 2011 > @@ -72,6 +72,11 @@ > throw new RuntimeException("Port " + port + " is not open"); > } > > + /** > + * Check whether the provided <code>port</code> is open > + * @param port The port that needs to be checked > + * @return true if the <code>port</code> is open & false otherwise > + */ > public static boolean isPortOpen(int port) { > Socket socket = null; > boolean isPortOpen = false; > > Modified: > trunk/carbon/core/integration/framework/src/main/java/org/wso2/carbon/integration/framework/LoginLogoutUtil.java > URL: > http://wso2.org/svn/browse/wso2/trunk/carbon/core/integration/framework/src/main/java/org/wso2/carbon/integration/framework/LoginLogoutUtil.java?rev=118036&r1=118035&r2=118036&view=diff > > ============================================================================== > --- > trunk/carbon/core/integration/framework/src/main/java/org/wso2/carbon/integration/framework/LoginLogoutUtil.java > (original) > +++ > trunk/carbon/core/integration/framework/src/main/java/org/wso2/carbon/integration/framework/LoginLogoutUtil.java > Mon Dec 19 01:48:32 2011 > @@ -30,18 +30,17 @@ > import org.wso2.carbon.utils.NetworkUtils; > > /** > - * All tests which require logging in & logging out should extend this > class > + * A utility for logging into & logging out of Carbon servers > */ > public final class LoginLogoutUtil { > private static final Log log = > LogFactory.getLog(LoginLogoutUtil.class); > private String sessionCookie; > > /** > - * This login method needs to be overridden in your TestNG test. > Simply calling super.login() > - * would be sufficient > + * Log in to a Carbon server > * > * @return The session cookie on successful login > - * @throws Exception If an error occurs while loggin in > + * @throws Exception If an error occurs while logging in > */ > public String login() throws Exception { > > ClientConnectionUtil.waitForPort(Integer.parseInt(FrameworkSettings.HTTPS_PORT)); > @@ -52,8 +51,8 @@ > log.debug("UserName : " + FrameworkSettings.USER_NAME + " > Password : " + > FrameworkSettings.PASSWORD + " HostName : " + > hostName); > } > - boolean isLoggedIn = > authAdminStub.login(FrameworkSettings.USER_NAME, > - > FrameworkSettings.PASSWORD, hostName); > + boolean isLoggedIn = > authAdminStub.login(FrameworkSettings.USER_NAME, > + > FrameworkSettings.PASSWORD, hostName); > assert isLoggedIn : "Login failed!"; > log.debug("getting sessionCookie"); > ServiceContext serviceContext = authAdminStub. > @@ -68,6 +67,11 @@ > } > > > + /** > + * Log out from a Carbon server you logged in to by calling the > {@link #login} method > + * > + * @throws Exception If an error occurs while logging out > + */ > public void logout() throws Exception { > AuthenticationAdminStub authenticationAdminStub = > getAuthAdminStub(); > try { > @@ -82,7 +86,7 @@ > } > } > > - private static AuthenticationAdminStub getAuthAdminStub() throws > AxisFault { > + private AuthenticationAdminStub getAuthAdminStub() throws AxisFault { > String authenticationServiceURL = FrameworkSettings.SERVICE_URL + > "AuthenticationAdmin"; > if (log.isDebugEnabled()) { > log.debug("AuthenticationAdminService URL = " + > authenticationServiceURL); > > Modified: > trunk/carbon/core/integration/framework/src/main/java/org/wso2/carbon/integration/framework/MultipleServersManager.java > URL: > http://wso2.org/svn/browse/wso2/trunk/carbon/core/integration/framework/src/main/java/org/wso2/carbon/integration/framework/MultipleServersManager.java?rev=118036&r1=118035&r2=118036&view=diff > > ============================================================================== > --- > trunk/carbon/core/integration/framework/src/main/java/org/wso2/carbon/integration/framework/MultipleServersManager.java > (original) > +++ > trunk/carbon/core/integration/framework/src/main/java/org/wso2/carbon/integration/framework/MultipleServersManager.java > Mon Dec 19 01:48:32 2011 > @@ -17,29 +17,49 @@ > */ > package org.wso2.carbon.integration.framework; > > -import org.wso2.carbon.integration.framework.utils.ServerUtils; > - > +import java.io.IOException; > import java.util.HashMap; > import java.util.Map; > > /** > - * TODO: class description > + * A container for multiple Carbon server instances. > + * > + * How to use this class: > + * 1. Implement a TestServerManager instance for different types of > servers. e.g. AS, ESB etc > + * 2. Create a Class with @BeforeSuite & @AfterSuite annotations. > + * In @BeforeSuite, you can call {@link > MultipleServersManager#startServers(TestServerManager...)} > + * In @AfterSuite, you can call {@link > MultipleServersManager#stopAllServers()} > */ > public class MultipleServersManager { > > - private Map<String, ServerUtils> servers = new HashMap<String, > ServerUtils>(); > - > - public void startServers(String... carbonZip){ > + private Map<String, TestServerManager> servers = new HashMap<String, > TestServerManager>(); > > + /** > + * Start a set of Carbon servers > + * @param serverManagers vararg which specifies a TestServerManager > instance per Carbon server > + * @throws IOException If an error occurs while copying deployment > artifacts into Carbon servers > + */ > + public void startServers(TestServerManager... serverManagers) throws > IOException { > + for (TestServerManager zip : serverManagers) { > + zip.startServer(); > + servers.put(zip.getCarbonZip(), zip); > + } > } > > - public void stopServer(String carbonHome){ > - > + public void stopServer(String carbonZip) throws Exception { > + TestServerManager serverManager = servers.get(carbonZip); > + if(serverManager != null){ > + serverManager.stopServer(); > + } > } > - > + > + /** > + * Stop all servers started by this MultipleServersManager > + * @throws Exception If an error occurs while stopping servers > + */ > public void stopAllServers() throws Exception { > - for (ServerUtils serverUtils : servers.values()) { > - serverUtils.shutdown(); > + for (TestServerManager serverUtils : servers.values()) { > + serverUtils.stopServer(); > } > } > } > > Modified: > trunk/carbon/core/integration/framework/src/main/java/org/wso2/carbon/integration/framework/TestServerManager.java > URL: > http://wso2.org/svn/browse/wso2/trunk/carbon/core/integration/framework/src/main/java/org/wso2/carbon/integration/framework/TestServerManager.java?rev=118036&r1=118035&r2=118036&view=diff > > ============================================================================== > --- > trunk/carbon/core/integration/framework/src/main/java/org/wso2/carbon/integration/framework/TestServerManager.java > (original) > +++ > trunk/carbon/core/integration/framework/src/main/java/org/wso2/carbon/integration/framework/TestServerManager.java > Mon Dec 19 01:48:32 2011 > @@ -32,6 +32,24 @@ > public abstract class TestServerManager { > > private ServerUtils serverUtils = new ServerUtils(); > + private String carbonZip; > + private int portOffset; > + > + protected TestServerManager() { > + } > + > + protected TestServerManager(String carbonZip) { > + this.carbonZip = carbonZip; > + } > + > + protected TestServerManager(String carbonZip, int portOffset) { > + this.carbonZip = carbonZip; > + this.portOffset = portOffset; > + } > + > + public String getCarbonZip() { > + return carbonZip; > + } > > /** > * This method is called for starting a Carbon server in preparation > for execution of a > @@ -44,14 +62,16 @@ > * Carbon server > */ > protected String startServer() throws IOException { > - String carbonZip = System.getProperty("carbon.zip"); > + if (carbonZip == null) { > + carbonZip = System.getProperty("carbon.zip"); > + } > if (carbonZip == null) { > throw new IllegalArgumentException("carbon zip file is null"); > } > String carbonHome = serverUtils.setUpCarbonHome(carbonZip); > TestUtil.copySecurityVerificationService(carbonHome); > copyArtifacts(carbonHome); > - serverUtils.startServerUsingCarbonHome(carbonHome); > + serverUtils.startServerUsingCarbonHome(carbonHome, portOffset); > FrameworkSettings.init(); > return carbonHome; > } > > Modified: > trunk/carbon/core/integration/framework/src/main/java/org/wso2/carbon/integration/framework/utils/ServerUtils.java > URL: > http://wso2.org/svn/browse/wso2/trunk/carbon/core/integration/framework/src/main/java/org/wso2/carbon/integration/framework/utils/ServerUtils.java?rev=118036&r1=118035&r2=118036&view=diff > > ============================================================================== > --- > trunk/carbon/core/integration/framework/src/main/java/org/wso2/carbon/integration/framework/utils/ServerUtils.java > (original) > +++ > trunk/carbon/core/integration/framework/src/main/java/org/wso2/carbon/integration/framework/utils/ServerUtils.java > Mon Dec 19 01:48:32 2011 > @@ -19,7 +19,6 @@ > import org.apache.commons.io.FileUtils; > import org.apache.commons.logging.Log; > import org.apache.commons.logging.LogFactory; > -import org.wso2.carbon.base.ServerConfigurationException; > import org.wso2.carbon.utils.ArchiveManipulator; > import org.wso2.carbon.utils.FileManipulator; > import org.wso2.carbon.utils.ServerConstants; > @@ -44,7 +43,7 @@ > private final static String SERVER_SHUTDOWN_MESSAGE = "Halting JVM"; > private final static long DEFAULT_START_STOP_WAIT_MS = 1000 * 60 * 4; > > - public synchronized void startServerUsingCarbonHome(String > carbonHome) { > + public synchronized void startServerUsingCarbonHome(String > carbonHome, int portOffset) { > if (process != null) { // An instance of the server is running > return; > } > @@ -62,14 +61,17 @@ > } > log.info("Imported Code Coverage Details."); > String temp; > + File commandDir = new File(carbonHome); > if > (System.getProperty("os.name").toLowerCase().contains("windows")) > { > tempProcess = > - Runtime.getRuntime().exec(new String[]{"bat", > "bin/wso2server.bat"}, > - null, new > File(carbonHome)); > + Runtime.getRuntime().exec(new String[]{"bat", > "bin/wso2server.bat", "test", > + > "-DportOffset=" + String.valueOf(portOffset)}, > + null, commandDir); > } else { > tempProcess = > - Runtime.getRuntime().exec(new String[]{"sh", > "bin/wso2server.sh", "test"}, > - null, new > File(carbonHome)); > + Runtime.getRuntime().exec(new String[]{"sh", > "bin/wso2server.sh", "test", > + > "-DportOffset="+ String.valueOf(portOffset)}, > + null, commandDir); > } > Runtime.getRuntime().addShutdownHook(new Thread() { > public void run() { > @@ -114,16 +116,6 @@ > log.info("Successfully started Carbon server. Returning ..."); > } > > - public synchronized void startServerUsingCarbonZip(String > carbonServerZipFile) > - throws ServerConfigurationException, IOException { > - if (process != null) { // An instance of the server is running > - return; > - } > - String carbonHome = setUpCarbonHome(carbonServerZipFile); > - instrumentJarsForEmma(carbonHome); > - startServerUsingCarbonHome(carbonHome); > - } > - > public synchronized String setUpCarbonHome(String carbonServerZipFile) > throws IOException { > if (process != null) { // An instance of the server is running > @@ -138,9 +130,11 @@ > > carbonServerZipFile.substring(carbonServerZipFile.lastIndexOf(fileSeparator) > + 1, > indexOfZip); > FileManipulator.deleteDir(extractedCarbonDir); > - new ArchiveManipulator().extract(carbonServerZipFile, > "carbontmp"); > + String extractDir = "carbontmp" + System.currentTimeMillis(); > + new ArchiveManipulator().extract(carbonServerZipFile, extractDir); > + String baseDir = (System.getProperty("basedir", ".")) + > File.separator + "target"; > return carbonHome = > - new File(".").getAbsolutePath() + File.separator + > "carbontmp" + File.separator + > + new File(baseDir).getAbsolutePath() + File.separator + > extractDir + File.separator + > extractedCarbonDir; > } > > > Modified: > trunk/carbon/core/integration/tests/src/test/java/org/wso2/carbon/integration/tests/CarbonTestServerManager.java > URL: > http://wso2.org/svn/browse/wso2/trunk/carbon/core/integration/tests/src/test/java/org/wso2/carbon/integration/tests/CarbonTestServerManager.java?rev=118036&r1=118035&r2=118036&view=diff > > ============================================================================== > --- > trunk/carbon/core/integration/tests/src/test/java/org/wso2/carbon/integration/tests/CarbonTestServerManager.java > (original) > +++ > trunk/carbon/core/integration/tests/src/test/java/org/wso2/carbon/integration/tests/CarbonTestServerManager.java > Mon Dec 19 01:48:32 2011 > @@ -34,6 +34,13 @@ > public class CarbonTestServerManager extends TestServerManager { > private static final Log log = > LogFactory.getLog(CarbonTestServerManager.class); > > + public CarbonTestServerManager() { > + } > + > + public CarbonTestServerManager(String carbonZip, int portOffset) { > + super(carbonZip, portOffset); > + } > + > @Override > @BeforeSuite(timeOut = 60000, > description = "Starts up a Carbon core server") > > Added: > trunk/carbon/core/integration/tests/src/test/java/org/wso2/carbon/integration/tests/MultipleCarbonInstancesTestCase.java > URL: > http://wso2.org/svn/browse/wso2/trunk/carbon/core/integration/tests/src/test/java/org/wso2/carbon/integration/tests/MultipleCarbonInstancesTestCase.java?pathrev=118036 > > ============================================================================== > --- (empty file) > +++ > trunk/carbon/core/integration/tests/src/test/java/org/wso2/carbon/integration/tests/MultipleCarbonInstancesTestCase.java > Mon Dec 19 01:48:32 2011 > @@ -0,0 +1,53 @@ > +/* > +* Copyright (c) 2005-2011, 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.integration.tests; > + > +import org.testng.annotations.AfterGroups; > +import org.testng.annotations.BeforeGroups; > +import org.testng.annotations.Test; > +import org.wso2.carbon.integration.framework.MultipleServersManager; > + > +import java.io.IOException; > + > +/** > + * TODO: class description > + */ > +public class MultipleCarbonInstancesTestCase { > + > + public MultipleServersManager manager = new MultipleServersManager(); > + > + @BeforeGroups(groups = {"carbon.multi.server"}) > + public void testStartServers() throws IOException { > + CarbonTestServerManager server1 = new > CarbonTestServerManager(System.getProperty("carbon.zip"), > + 10); > + CarbonTestServerManager server2 = new > CarbonTestServerManager(System.getProperty("carbon.zip"), > + 12); > + > + manager.startServers(server1, server2); > + } > + > + @Test(groups = {"carbon.multi.server"}) > + public void test(){ > + > + } > + > + @AfterGroups(groups = {"carbon.multi.server"}) > + public void testStopServers() throws Exception { > + manager.stopAllServers(); > + } > +} > _______________________________________________ > Carbon-commits mailing list > carbon-comm...@wso2.org > https://wso2.org/cgi-bin/mailman/listinfo/carbon-commits > > > > -- > *Afkham Azeez* > Director of Architecture; WSO2, Inc.; http://wso2.com > Member; Apache Software Foundation; http://www.apache.org/ > * <http://www.apache.org/>** > email: **az...@wso2.com* <az...@wso2.com>* cell: +94 77 3320919 > blog: **http://blog.afkham.org* <http://blog.afkham.org>* > twitter: **http://twitter.com/afkham_azeez*<http://twitter.com/afkham_azeez> > * > linked-in: **http://lk.linkedin.com/in/afkhamazeez* > * > * > *Lean . Enterprise . Middleware* > >
_______________________________________________ Carbon-dev mailing list Carbon-dev@wso2.org http://mail.wso2.org/cgi-bin/mailman/listinfo/carbon-dev