/* * JBoss, Home of Professional Open Source * Copyright 2014, JBoss Inc., and individual contributors as indicated * by the @authors tag. * * Licensed 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.jboss.as.test.manualmode.deployment; import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.FAILED; import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.NAME; import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.OUTCOME; import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.READ_ATTRIBUTE_OPERATION; import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.RESULT; import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.STATUS; import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.SUCCESS; import static org.junit.Assert.assertEquals; import java.io.File; import java.io.IOException; import javax.inject.Inject; import org.jboss.as.controller.PathAddress; import org.jboss.as.controller.client.ModelControllerClient; import org.jboss.as.controller.operations.common.Util; import org.jboss.as.server.deployment.scanner.FileSystemDeploymentScanHandler; import org.jboss.as.test.shared.TestSuiteEnvironment; import org.jboss.as.test.shared.TimeoutUtil; import org.jboss.dmr.ModelNode; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import org.wildfly.core.testrunner.ServerControl; import org.wildfly.core.testrunner.ServerController; import org.wildfly.core.testrunner.WildflyTestRunner; /** * Testing operation with a manual scan. * @author <a href="mailto:ehugonne@redhat.com">Emmanuel Hugonnet</a> (c) 2015 Red Hat, inc. */ @RunWith(WildflyTestRunner.class) @ServerControl(manual = true) public class DeploymentScannerOperationTestCase extends AbstractDeploymentScannerOperationTestCase { @Inject private ServerController container; @Test public void testStartup() throws Exception { container.start(); try { try (ModelControllerClient client = TestSuiteEnvironment.getModelControllerClient()) { final File deploymentOne = new File(deployDir, "deployment-one.jar"); createDeployment(deploymentOne, "org.jboss.modules"); // Add a new de addDeploymentScanner(client); try { Assert.assertFalse(exists(client, DEPLOYMENT_ONE)); runScan(client); // Wait until deployed ... long timeout = System.currentTimeMillis() + TimeoutUtil.adjust(TIMEOUT); while (!exists(client, DEPLOYMENT_ONE) && System.currentTimeMillis() < timeout) { Thread.sleep(DELAY); } Assert.assertTrue(exists(client, DEPLOYMENT_ONE)); Assert.assertEquals("OK", deploymentState(client, DEPLOYMENT_ONE)); final File oneDeployed = new File(deployDir, "deployment-one.jar.deployed"); Assert.assertTrue(oneDeployed.exists()); deploymentOne.delete(); Thread.sleep(500); Assert.assertTrue(exists(client, DEPLOYMENT_ONE)); Assert.assertEquals("OK", deploymentState(client, DEPLOYMENT_ONE)); runScan(client); // Wait until undeployed ... timeout = System.currentTimeMillis() + TimeoutUtil.adjust(TIMEOUT); while (exists(client, DEPLOYMENT_ONE) && System.currentTimeMillis() < timeout) { Thread.sleep(DELAY); } Assert.assertFalse(exists(client,DEPLOYMENT_ONE)); } finally { removeDeploymentScanner(client); } } } finally { container.stop(); } } private void runScan(ModelControllerClient client) throws Exception { ModelNode runScanOp = Util.createEmptyOperation(FileSystemDeploymentScanHandler.OPERATION_NAME, getTestDeploymentScannerResourcePath()); ModelNode result = executeOperation(client, runScanOp); assertEquals("Unexpected outcome of running the scanner: " + runScanOp, SUCCESS, result.get(OUTCOME).asString()); } private String deploymentState(ModelControllerClient client, final PathAddress address) throws IOException { final ModelNode operation = Util.createEmptyOperation(READ_ATTRIBUTE_OPERATION, address); operation.get(NAME).set(STATUS); final ModelNode result = executeOperation(client, operation); if (SUCCESS.equals(result.get(OUTCOME).asString())) { return result.get(RESULT).asString(); } return FAILED; } }