org.jboss.as.test.integration.management.ServerManager Maven / Gradle / Ivy
/*
* JBoss, Home of Professional Open Source.
* Copyright (c) 2011, 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 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.as.test.integration.management;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.ALLOW_RESOURCE_SERVICE_RESTART;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.COMPOSITE;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.CORE_SERVICE;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.MANAGEMENT;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.OPERATION_HEADERS;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.SECURITY_REALM;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.SERVER_IDENTITY;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.SSL;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.STEPS;
import static org.jboss.as.test.integration.management.util.ModelUtil.createOpNode;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.jboss.as.arquillian.container.ManagementClient;
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.security.Constants;
import org.jboss.as.test.integration.management.base.AbstractMgmtTestBase;
import org.jboss.as.test.integration.management.util.WebUtil;
import org.jboss.dmr.ModelNode;
/**
* Shared class for all mamagement operations needed by tests.
*
* @author Dominik Pospisil
* @author Peter Skopek
*/
public class ServerManager extends AbstractMgmtTestBase {
private final ManagementClient managementClient;
public ServerManager(final ManagementClient managementClient) {
this.managementClient = managementClient;
}
@Override
protected ModelControllerClient getModelControllerClient() {
return managementClient.getControllerClient();
}
public void addListener(Listener conn, int port, String keyPEMFile, String certPEMFile, String keyStoreFile, String password) throws Exception {
// add socket binding
ModelNode op = getAddSocketBindingOp(conn, port);
executeOperation(op);
// add connector
op = getAddListenerOp(conn, keyStoreFile, password);
executeOperation(op);
// check it is listed
assertTrue(getListenerList().get(conn.getScheme()).contains("test-" + conn.getName() + "-listener"));
}
private ModelNode getAddSocketBindingOp(Listener conn, int port) {
ModelNode op = createOpNode("socket-binding-group=standard-sockets/socket-binding=test-" + conn.getName(), "add");
op.get("port").set(port);
return op;
}
private ModelNode getAddListenerOp(Listener conn, String keyStoreFile, String password) {
final ModelNode composite = Util.getEmptyOperation(COMPOSITE, new ModelNode());
final ModelNode steps = composite.get(STEPS);
ModelNode op = createOpNode("subsystem=undertow/server=default-server/" + conn.getScheme() + "-listener=test-" + conn.getName() + "-listener", "add");
op.get("socket-binding").set("test-" + conn.getName());
if (conn.isSecure()) {
addSecurityRealm(steps, keyStoreFile, password);
op.get("security-realm").set("ssl-realm");
}
steps.add(op);
return composite;
}
private void addSecurityRealm(ModelNode steps, String keyStoreFile, String password) {
final PathAddress realmAddr = PathAddress.pathAddress().append(CORE_SERVICE, MANAGEMENT)
.append(SECURITY_REALM, "ssl-realm");
ModelNode op = Util.createAddOperation(realmAddr);
steps.add(op);
// /core-service=management/security-realm=JBossTest/server-identity=ssl:add(keystore-path=server.keystore, keystore-password=123456)
final ModelNode sslModuleNode = Util.createAddOperation(realmAddr.append(SERVER_IDENTITY, SSL));
sslModuleNode.get("keystore-path").set(keyStoreFile);
sslModuleNode.get(Constants.KEYSTORE_PASSWORD).set(password);
sslModuleNode.get(OPERATION_HEADERS, ALLOW_RESOURCE_SERVICE_RESTART).set(true);
steps.add(sslModuleNode);
}
private ModelNode getRemoveSecurityRealm() {
final PathAddress realmAddr = PathAddress.pathAddress().append(CORE_SERVICE, MANAGEMENT)
.append(SECURITY_REALM, "ssl-realm");
return Util.createRemoveOperation(realmAddr);
}
public void removeListener(Listener conn, String checkURL) throws Exception {
// remove connector
ModelNode op = getRemoveListenerOp(conn);
executeOperation(op);
Thread.sleep(1000);
// check that the connector is not live
if (checkURL != null) { assertFalse("Listener not removed.", WebUtil.testHttpURL(checkURL)); }
// remove socket binding
op = getRemoveSocketBindingOp(conn);
executeOperation(op);
}
private ModelNode getRemoveSocketBindingOp(Listener conn) {
ModelNode op = createOpNode("socket-binding-group=standard-sockets/socket-binding=test-" + conn.getName(), "remove");
op.get(OPERATION_HEADERS).get(ALLOW_RESOURCE_SERVICE_RESTART).set(true);
return op;
}
private ModelNode getRemoveListenerOp(Listener conn) {
final ModelNode composite = Util.getEmptyOperation(COMPOSITE, new ModelNode());
final ModelNode steps = composite.get(STEPS);
ModelNode op = createOpNode("subsystem=undertow/server=default-server/" + conn.getScheme() + "-listener=test-" + conn.getName() + "-listener", "remove");
op.get(OPERATION_HEADERS, ALLOW_RESOURCE_SERVICE_RESTART).set(true);
steps.add(op);
if (conn.isSecure()) {
steps.add(getRemoveSecurityRealm());
}
return composite;
}
private Map> getListenerList() throws Exception {
HashMap> result = new HashMap<>();
result.put("http", getListenersByType("http-listener"));
result.put("https", getListenersByType("https-listener"));
result.put("ajp", getListenersByType("ajp-listener"));
return result;
}
private Set getListenersByType(String type) throws Exception {
ModelNode op = createOpNode("subsystem=undertow/server=default-server", "read-children-names");
op.get("child-type").set(type);
ModelNode result = executeOperation(op);
List connectors = result.asList();
HashSet connNames = new HashSet<>();
for (ModelNode n : connectors) {
connNames.add(n.asString());
}
return connNames;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy