/* * JBoss, Home of Professional Open Source * Copyright 2009, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.test; import javax.naming.InitialContext; import org.jboss.deployers.spi.management.ManagementView; import org.jboss.deployers.spi.management.deploy.DeploymentID; import org.jboss.deployers.spi.management.deploy.DeploymentManager; import org.jboss.deployers.spi.management.deploy.DeploymentProgress; import org.jboss.managed.api.DeploymentState; import org.jboss.managed.api.ManagedDeployment; import org.jboss.profileservice.spi.DeploymentOption; import org.jboss.profileservice.spi.NoSuchDeploymentException; import org.jboss.profileservice.spi.ProfileKey; import org.jboss.profileservice.spi.ProfileService; import org.jboss.test.JBossTestCase; /** * @author <a href="mailto:emuckenh@redhat.com">Emanuel Muckenhuber</a> * @version $Revision$ */ public abstract class AbstractDeployTestBase extends JBossTestCase { /** A basic failing deployment. */ final static String FAILING_DEPLOYMENT = "deployers-failing-jboss-beans.xml"; /** A empty deployment, this will deploy ok. */ final static String EMTPY_DEPLOYMENT = "deployers-empty-jboss-beans.xml"; /** A simple nested deployment. */ final static String NESTED_DEPLOYMENT = "profileservice-datasource.ear"; /** The deployers target profile. */ final static ProfileKey deployersKey = new ProfileKey("deployers"); /** windoze. */ final static boolean isWindoze; /** The deployment manager. */ private DeploymentManager deployMgr; /** The management view. */ private ManagementView mgtView; static { String osName = System.getProperty("os.name"); isWindoze = osName.contains("Win"); } public AbstractDeployTestBase(String name) { super(name); } static boolean isIgnoreRemove() { return isWindoze; } void deployFailed(boolean isCopyContent) throws Exception { DeploymentProgress start = distributeAndStart(FAILING_DEPLOYMENT, isCopyContent); assertFailed(start); assertDeploymentState(start.getDeploymentID(), DeploymentState.FAILED); } void deployEmpty(boolean isCopyContent) throws Exception { DeploymentProgress start = distributeAndStart(EMTPY_DEPLOYMENT, isCopyContent); assertComplete(start); assertDeploymentState(start.getDeploymentID(), DeploymentState.STARTED); } DeploymentProgress distributeAndStart(String deploymentName, boolean copyContent) throws Exception { return distributeAndStart(deploymentName, copyContent, true); } DeploymentProgress distributeAndStart(String deploymentName, boolean copyContent, boolean checkStopped) throws Exception { return distributeAndStart(deploymentName, deploymentName, copyContent, true); } /** * Distribute and start a deployment. * * @param deployment the deployment * @param deploymentName the new (server side) deployment name * @param copyContent is copyContent * @param checkStopped check the if the deployment is stopped after distribute * @return the DeploymentProgress of the start operation * @throws Exception */ DeploymentProgress distributeAndStart(String deployment, String deploymentName, boolean copyContent, boolean checkStopped) throws Exception { // The deployment manager DeploymentManager deployMgr = getDeploymentManager(); // Distribute DeploymentProgress distribute = deployMgr.distribute(deploymentName, getDeployURL(deployment), copyContent); distribute.run(); // Distribute always has to complete assertComplete(distribute); // check if the app is stopped if(checkStopped) assertDeploymentState(distribute.getDeploymentID(), DeploymentState.STOPPED); // Get the repository names String[] uploadedNames = distribute.getDeploymentID().getRepositoryNames(); assertNotNull(uploadedNames); // Start DeploymentProgress start = deployMgr.start(uploadedNames); start.run(); // Return the start deployment progress return start; } DeploymentProgress distributeAndStart(String deploymentName, DeploymentOption... options) throws Exception { return distributeAndStart(deploymentName, deploymentName, options); } /** * Distribute and start a deployment * * @param deployment the deployment * @param deploymentName the new (server side) deployment name * @param options the deployment options * @return the DeploymentProgress of the start operation * @throws Exception */ DeploymentProgress distributeAndStart(String deployment, String deploymentName, DeploymentOption... options) throws Exception { // The deployment manager DeploymentManager deployMgr = getDeploymentManager(); // Distribute DeploymentProgress distribute = deployMgr.distribute(deploymentName, getDeployURL(deployment), options); distribute.run(); // Distribute always has to complete assertComplete(distribute); // check if the app is stopped assertDeploymentState(distribute.getDeploymentID(), DeploymentState.STOPPED); // Get the repository names String[] uploadedNames = distribute.getDeploymentID().getRepositoryNames(); assertNotNull(uploadedNames); // Start DeploymentProgress start = deployMgr.start(uploadedNames); start.run(); // Return the start deployment progress return start; } void redeployCheckComplete(String name) throws Exception { // The deployment manager DeploymentManager deployMgr = getDeploymentManager(); // Redeploy DeploymentProgress redeploy = deployMgr.redeploy(name); redeploy.run(); assertComplete(redeploy); assertDeploymentState(redeploy.getDeploymentID(), DeploymentState.STARTED); } void prepareCheckComplete(String name) throws Exception { // The deployment manager DeploymentManager deployMgr = getDeploymentManager(); // Prepare DeploymentProgress prepare = deployMgr.prepare(name); prepare.run(); assertComplete(prepare); } void stopAndRemove(String[] names) throws Exception { // The deployment manager DeploymentManager deployMgr = getDeploymentManager(); try { DeploymentProgress stop = deployMgr.stop(names); stop.run(); assertComplete(stop); assertDeploymentState(stop.getDeploymentID(), DeploymentState.STOPPED); } catch(Exception e) { log.debug("stopAndRemove Failed ", e); throw e; } finally { DeploymentProgress remove = deployMgr.remove(names); remove.run(); // Don't check this on windows if(isIgnoreRemove() == false) { assertComplete(remove); String name = remove.getDeploymentID().getNames()[0]; ManagementView mgtView = getManagementView(); try { mgtView.getDeployment(name); fail("Did not see NoSuchDeploymentException"); } catch(NoSuchDeploymentException ok) { // } } } } void assertFailed(DeploymentProgress progress) throws Exception { assertFalse(progress.getDeploymentStatus().isCompleted()); assertTrue(progress.getDeploymentStatus().isFailed()); } void assertDeploymentState(DeploymentID DtID, DeploymentState state) throws Exception { String name = DtID.getNames()[0]; ManagementView mgtView = getManagementView(); ManagedDeployment md = mgtView.getDeployment(name); assertNotNull(name, md); assertEquals("deployment: " + name, state, md.getDeploymentState()); log.debug(md.getSimpleName() + " " + md.getTypes()); } void assertComplete(DeploymentProgress progress) throws Exception { if(progress.getDeploymentStatus().isFailed()) { throw new RuntimeException("deployment failed.", progress.getDeploymentStatus().getFailure()); } // assertTrue(progress.getDeploymentStatus().isCompleted()); } DeploymentManager getDeploymentManager() throws Exception { if(this.deployMgr == null) { this.deployMgr = getProfileService().getDeploymentManager(); } return deployMgr; } ManagementView getManagementView() throws Exception { if(this.mgtView == null) { this.mgtView = getProfileService().getViewManager(); } this.mgtView.load(); return this.mgtView; } ProfileService getProfileService() throws Exception { InitialContext ctx = getInitialContext(); return (ProfileService) ctx.lookup("ProfileService"); } }