package org.jboss.as.test.manualmode.parse; import org.jboss.arquillian.container.test.api.ContainerController; import org.jboss.arquillian.container.test.api.Deployment; import org.jboss.arquillian.container.test.api.RunAsClient; import org.jboss.arquillian.junit.Arquillian; import org.jboss.arquillian.test.api.ArquillianResource; import org.jboss.as.arquillian.container.ManagementClient; import org.jboss.as.controller.client.ModelControllerClient; import org.jboss.as.controller.client.OperationBuilder; import org.jboss.as.controller.descriptions.ModelDescriptionConstants; import org.jboss.dmr.ModelNode; import org.junit.Test; import org.junit.runner.RunWith; import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.*; import org.jboss.as.test.shared.TestSuiteEnvironment; import org.jboss.shrinkwrap.api.ShrinkWrap; import org.jboss.shrinkwrap.api.spec.WebArchive; import static org.junit.Assert.assertEquals; /** * Reproducer for JIRA - Server doesn't start after change native-interface by CLI management API from Java * * @author olukas */ @RunWith(Arquillian.class) @RunAsClient public class RestartAfterNativeInterfaceChangedTest { private static final String DEFAULT_JBOSSAS = "default-jbossas"; @ArquillianResource private ContainerController container; @Deployment public static WebArchive deployment() { final WebArchive war = ShrinkWrap.create(WebArchive.class, "test.war"); return war; } @Test public void testRestartWithNativeInterface() throws Exception { this.container.start(DEFAULT_JBOSSAS); final ModelControllerClient client = TestSuiteEnvironment.getModelControllerClient(); ManagementClient managementClient = new ManagementClient(client, TestSuiteEnvironment.getServerAddress(), TestSuiteEnvironment.getServerPort()); ModelNode composite = new ModelNode(); composite.get(OP).set(ModelDescriptionConstants.COMPOSITE); ModelNode op = new ModelNode(); // create new security realm op.get(OP).set(ADD); op.get(OP_ADDR).add(CORE_SERVICE, MANAGEMENT); op.get(OP_ADDR).add(SECURITY_REALM, "JBossTest"); op.get(OPERATION_HEADERS).get(ALLOW_RESOURCE_SERVICE_RESTART).set(true); composite.get(ModelDescriptionConstants.STEPS).add(op); // set up security realm authentication type op = new ModelNode(); op.get(OP).set(ADD); op.get(OP_ADDR).add(CORE_SERVICE, MANAGEMENT); op.get(OP_ADDR).add(SECURITY_REALM, "JBossTest"); op.get(OP_ADDR).add(AUTHENTICATION, LOCAL); op.get("default-user").set("$local"); composite.get(ModelDescriptionConstants.STEPS).add(op); client.execute(new OperationBuilder(composite).build()); // set up native-interface op = new ModelNode(); op.get(OP).set(WRITE_ATTRIBUTE_OPERATION); op.get(OP_ADDR).add(CORE_SERVICE, MANAGEMENT); op.get(OP_ADDR).add(MANAGEMENT_INTERFACE, NATIVE_INTERFACE); op.get(NAME).set(SECURITY_REALM); op.get(VALUE).set("JBossTest"); op.get(OPERATION_HEADERS).get(ALLOW_RESOURCE_SERVICE_RESTART).set(true); client.execute(new OperationBuilder(op).build()); this.container.stop(DEFAULT_JBOSSAS); while (managementClient.isServerInRunningState()) { Thread.sleep(1000); } this.container.start(DEFAULT_JBOSSAS); // try to read something op = new ModelNode(); op.get(OP).set(READ_CHILDREN_NAMES_OPERATION); op.get(OP_ADDR).add(CORE_SERVICE, MANAGEMENT); op.get(CHILD_TYPE).set(SECURITY_REALM); ModelNode result = client.execute(new OperationBuilder(op).build()); assertEquals("CLI operation wasn't success", SUCCESS, result.get("outcome").asString()); this.container.stop(DEFAULT_JBOSSAS); client.close(); } }