/* * Copyright (C) 2015 Red Hat, inc., and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This library 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 library 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 library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ package org.wildfly.core.test.standalone.mgmt; import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.EXTENSION; import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.RELOAD; import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.SHUTDOWN; import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.SUBSYSTEM; import java.net.InetAddress; import java.net.UnknownHostException; import javax.inject.Inject; import org.jboss.as.controller.PathAddress; import org.jboss.as.controller.client.ModelControllerClient; import org.jboss.as.controller.client.helpers.Operations; import org.jboss.as.test.integration.management.extension.EmptySubsystemParser; import org.jboss.as.test.integration.management.extension.ExtensionUtils; import org.jboss.as.test.integration.management.extension.blocker.BlockerExtension; import org.jboss.as.test.shared.TestSuiteEnvironment; import org.jboss.as.test.shared.TimeoutUtil; import org.jboss.dmr.ModelNode; import org.jboss.logging.Logger; import org.junit.AfterClass; import org.junit.Assert; import org.junit.BeforeClass; import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.wildfly.core.testrunner.ManagementClient; import org.wildfly.core.testrunner.ServerControl; import org.wildfly.core.testrunner.ServerController; import org.wildfly.core.testrunner.UnsuccessfulOperationException; import org.wildfly.core.testrunner.WildflyTestRunner; /** * * @author <a href="mailto:ehugonne@redhat.com">Emmanuel Hugonnet</a> (c) 2015 Red Hat, inc. */ @RunWith(WildflyTestRunner.class) @ServerControl(manual = true) @Ignore public class PreparedResponseTestCase { public static Logger LOGGER = Logger.getLogger(PreparedResponseTestCase.class); private static final long FREQUENCY = TimeoutUtil.adjust(50); private static final long SHUTDOWN_WAITING_TIME = TimeoutUtil.adjust(3000); private static final long RESTART_WAITING_TIME = TimeoutUtil.adjust(20000); @Inject protected static ServerController controller; @BeforeClass public static void startAndSetupContainer() throws Exception { ExtensionUtils.createExtensionModule(BlockerExtension.MODULE_NAME, BlockerExtension.class, EmptySubsystemParser.class.getPackage()); controller.start(); try (ManagementClient managementClient = controller.getClient()) { managementClient.executeForResult(Operations.createAddOperation(PathAddress.pathAddress(EXTENSION, BlockerExtension.MODULE_NAME).toModelNode())); managementClient.executeForResult(Operations.createAddOperation(PathAddress.pathAddress(SUBSYSTEM, BlockerExtension.SUBSYSTEM_NAME).toModelNode())); } } @AfterClass public static void stopContainer() throws Exception { try (ManagementClient managementClient = getManagementClient()) { managementClient.executeForResult(Operations.createRemoveOperation(PathAddress.pathAddress(EXTENSION, BlockerExtension.MODULE_NAME).toModelNode())); } controller.stop(); ExtensionUtils.deleteExtensionModule(BlockerExtension.MODULE_NAME); } private void block(ManagementClient client) throws UnsuccessfulOperationException { ModelNode blockOp = Operations.createOperation("block", PathAddress.pathAddress(SUBSYSTEM, BlockerExtension.SUBSYSTEM_NAME).toModelNode()); blockOp.get("block-point").set("SERVICE_STOP"); blockOp.get("block-time").set(SHUTDOWN_WAITING_TIME); client.executeForResult(blockOp); } @Test public void reloadServer() throws Exception { try (ManagementClient managementClient = getManagementClient()) { block(managementClient); long timeout = SHUTDOWN_WAITING_TIME + System.currentTimeMillis(); managementClient.executeForResult(Operations.createOperation(RELOAD, new ModelNode().setEmptyList())); while (System.currentTimeMillis() < timeout) { Thread.sleep(FREQUENCY); try { managementClient.isServerInRunningState(); } catch (RuntimeException ex) { break; } } Assert.assertFalse(System.currentTimeMillis() < timeout); timeout = RESTART_WAITING_TIME + System.currentTimeMillis(); while (System.currentTimeMillis() < timeout) { Thread.sleep(FREQUENCY); try { managementClient.isServerInRunningState(); } catch (RuntimeException ex) { break; } } } } @Test public void shutdownServer() throws Exception { try (ManagementClient managementClient = getManagementClient()) { block(managementClient); long timeout = SHUTDOWN_WAITING_TIME + System.currentTimeMillis(); managementClient.executeForResult(Operations.createOperation(SHUTDOWN, new ModelNode().setEmptyList())); while (System.currentTimeMillis() < timeout) { Thread.sleep(FREQUENCY); try { controller.getClient().isServerInRunningState(); } catch (RuntimeException ex) { break; } } Assert.assertFalse(System.currentTimeMillis() < timeout); Assert.assertFalse(controller.getClient().isServerInRunningState()); } Assert.assertFalse(controller.getClient().isServerInRunningState()); try { controller.stop(); //Server is already stopped but the ServerController doesn't know it } catch (RuntimeException ex) { //ignore the exception as it is expected } controller.start(); } static ManagementClient getManagementClient() { ModelControllerClient client = null; try { client = ModelControllerClient.Factory.create("remote+http", InetAddress.getByName(TestSuiteEnvironment.getServerAddress()), TestSuiteEnvironment.getServerPort(), new org.wildfly.core.testrunner.Authentication.CallbackHandler()); } catch (UnknownHostException e) { throw new RuntimeException(e); } return new ManagementClient(client, TestSuiteEnvironment.getServerAddress(), TestSuiteEnvironment.getServerPort(), "remote+http"); } }