/* * Jopr Management Platform * Copyright (C) 2005-2008 Red Hat, Inc. * All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License, version 2, as * published by the Free Software Foundation, and/or the GNU Lesser * General Public License, version 2.1, also as published by the Free * Software Foundation. * * This program 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 General Public License and the GNU Lesser General Public License * for more details. * * You should have received a copy of the GNU General Public License * and the GNU Lesser General Public License along with this program; * if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ package org.jboss.on.common.jbossas.test; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.util.List; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; import com.jboss.jbossnetwork.product.jbpm.handlers.test.MockContentContext; import com.jboss.jbossnetwork.product.jbpm.handlers.test.MockContentServices; import com.jboss.jbossnetwork.product.jbpm.handlers.test.MockControlActionFacade; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import org.jboss.on.common.jbossas.JBPMWorkflowManager; import org.jboss.on.common.jbossas.JBossASPaths; import org.rhq.core.domain.configuration.Configuration; import org.rhq.core.domain.configuration.PropertySimple; import org.rhq.core.domain.content.PackageDetailsKey; import org.rhq.core.domain.content.transfer.ContentResponseResult; import org.rhq.core.domain.content.transfer.DeployIndividualPackageResponse; import org.rhq.core.domain.content.transfer.DeployPackageStep; import org.rhq.core.domain.content.transfer.ResourcePackageDetails; import org.rhq.core.pluginapi.operation.OperationServicesResultCode; /** * @author Jason Dobies */ public class JBPMWorkflowManagerTest { private static final boolean ENABLE_TESTS = true; private static final String JBOSS_HOME_DIR_CONFIG_PROP = "jbossHomeDir"; private static final String CONFIGURATION_PATH_CONFIG_PROP = "configurationPath"; private ResourcePackageDetails packageDetails; private Configuration jbossPluginConfiguration; @BeforeMethod public void initPackageDetails() throws Exception { PackageDetailsKey key = new PackageDetailsKey("TestPackage", "1.0", "AS Patch", "noarch"); packageDetails = new ResourcePackageDetails(key); Configuration extraProperties = new Configuration(); extraProperties.put(new PropertySimple("instructionCompatibilityVersion", "1.4")); packageDetails.setExtraProperties(extraProperties); InputStream processStream = this.getClass().getClassLoader().getResourceAsStream( "handlers/JBPMWorkflowManagerTest-1.xml"); byte[] process = new byte[processStream.available()]; processStream.read(process); packageDetails.setMetadata(process); packageDetails.setFileName("test-patch.zip"); packageDetails.setMD5("0b3b49b059ade16690dd206d4be505c7"); } @BeforeMethod public void initTestJBossServer() throws Exception { jbossPluginConfiguration = new Configuration(); // Copy the test jboss server directory structure over to target to be worked on File jbossServerZip = new File("src" + File.separator + "test" + File.separator + "resources" + File.separator + "jboss-server.zip"); File targetDir = new File("target"); File jbossTestServerDir = new File("target" + File.separator + "jboss-server"); File jbossServerDir = new File(jbossTestServerDir.getAbsolutePath() + File.separator + "server" + File.separator + "default"); unzip(jbossServerZip, targetDir); jbossPluginConfiguration.put(new PropertySimple(JBOSS_HOME_DIR_CONFIG_PROP, jbossTestServerDir .getAbsolutePath())); jbossPluginConfiguration.put(new PropertySimple(CONFIGURATION_PATH_CONFIG_PROP, jbossServerDir .getAbsolutePath())); } @Test(enabled = ENABLE_TESTS) public void successfulWorkflow() throws Exception { // Setup MockControlActionFacade mockFacade = new MockControlActionFacade(); mockFacade.setResultCode(OperationServicesResultCode.SUCCESS); MockContentContext mockContentContext = new MockContentContext(); MockContentServices mockContentServices = (MockContentServices) mockContentContext.getContentServices(); mockContentServices.setFilename("test-patch.zip"); // Test JBPMWorkflowManager manager = new JBPMWorkflowManager(mockContentContext, mockFacade, getJBossPaths(jbossPluginConfiguration)); DeployIndividualPackageResponse response = manager.run(packageDetails); assert response.getResult() == ContentResponseResult.SUCCESS : "Incorrect response status. Expected: Success, Found: " + response.getResult(); List<DeployPackageStep> steps = response.getDeploymentSteps(); assert steps != null : "Null steps found in response"; assert steps.size() == 8 : "Incorrect number of steps. Expected: 8, Found: " + steps.size(); for (DeployPackageStep step : steps) { assert step.getStepResult() == ContentResponseResult.SUCCESS : "Step failed: " + step; } } @Test(enabled = ENABLE_TESTS) public void failedWorkflow() throws Exception { // Setup MockControlActionFacade mockFacade = new MockControlActionFacade(); mockFacade.setResultCode(OperationServicesResultCode.SUCCESS); MockContentContext mockContentContext = new MockContentContext(); MockContentServices mockContentServices = (MockContentServices) mockContentContext.getContentServices(); mockContentServices.setFilename("nonexistent-file"); // Test JBPMWorkflowManager manager = new JBPMWorkflowManager(mockContentContext, mockFacade, getJBossPaths(jbossPluginConfiguration)); DeployIndividualPackageResponse response = manager.run(packageDetails); assert response.getResult() == ContentResponseResult.FAILURE : "Incorrect response status. Expected: Failed, Found: " + response.getResult(); List<DeployPackageStep> steps = response.getDeploymentSteps(); assert steps != null : "Null steps found in response"; assert steps.size() == 8 : "Incorrect number of steps. Expected: 8, Found: " + steps.size(); int counter = 0; for (DeployPackageStep step : steps) { if (counter++ == 0) { assert step.getStepResult() == ContentResponseResult.FAILURE : "First step was not reported as failed. Expected: Failed, Found: " + step.getStepResult(); } else { assert step.getStepResult() == ContentResponseResult.NOT_PERFORMED : "Subsequent steps not reported as not executed. Step number: " + counter + ", Expected: Not Performed, Found: " + step.getStepResult(); } } } @Test(enabled = ENABLE_TESTS) public void successfulTranslateSteps() throws Exception { // Setup MockControlActionFacade mockFacade = new MockControlActionFacade(); mockFacade.setResultCode(OperationServicesResultCode.SUCCESS); MockContentContext mockContentContext = new MockContentContext(); MockContentServices mockContentServices = (MockContentServices) mockContentContext.getContentServices(); mockContentServices.setFilename("test-patch.zip"); // Test JBPMWorkflowManager manager = new JBPMWorkflowManager(mockContentContext, mockFacade, getJBossPaths(jbossPluginConfiguration)); List<DeployPackageStep> steps = manager.translateSteps(packageDetails); assert steps != null : "Null steps received from call to translate steps"; assert steps.size() == 8 : "Incorrect number of steps translated. Expected: 8, Found: " + steps.size(); for (DeployPackageStep step : steps) { assert step.getDescription() != null : "Null description for step: " + step; assert step.getStepResult() == ContentResponseResult.NOT_PERFORMED : "Incorrect step result for step: " + step; } } private void unzip(File zipFile, File toDir) throws Exception { FileInputStream fis = new FileInputStream(zipFile); ZipInputStream zis = new ZipInputStream(fis); ZipEntry e; while ((e = zis.getNextEntry()) != null) { String entryFileName = e.getName(); File entryFile = new File(toDir + File.separator + entryFileName); if (e.isDirectory()) { entryFile.mkdir(); } else { FileOutputStream fos = new FileOutputStream(entryFile); BufferedOutputStream buf = new BufferedOutputStream(fos); byte[] data = new byte[4096]; int len; while ((len = zis.read(data)) > 0) { buf.write(data, 0, len); } buf.flush(); fos.close(); } } } private JBossASPaths getJBossPaths(Configuration jbossPluginConfiguration) { JBossASPaths paths = new JBossASPaths(); String homeDir = jbossPluginConfiguration.getSimpleValue(JBOSS_HOME_DIR_CONFIG_PROP, null); String serverDir = jbossPluginConfiguration.getSimpleValue(CONFIGURATION_PATH_CONFIG_PROP, null); paths.setHomeDir(homeDir); paths.setServerDir(serverDir); return paths; } }