/* * JBoss, Home of Professional Open Source. * Copyright 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 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.wildfly.plugin.server; import java.io.BufferedReader; import java.io.IOException; import java.net.UnknownHostException; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.util.ArrayList; import java.util.List; import org.jboss.as.controller.client.ModelControllerClient; import org.jboss.as.controller.client.helpers.domain.DomainClient; import org.junit.After; import org.junit.Assert; import org.junit.Test; import org.wildfly.plugin.core.ServerHelper; import org.wildfly.plugin.tests.AbstractWildFlyMojoTest; import org.wildfly.plugin.tests.Environment; /** * @author <a href="mailto:jperkins@redhat.com">James R. Perkins</a> */ public class ServerFunctionMojoTest extends AbstractWildFlyMojoTest { @After public void shutdown() throws Exception { // Ensure the server is shutdown try (ModelControllerClient client = createClient()) { boolean isDomain; try { isDomain = ServerHelper.isDomainServer(client); } catch (Exception ignore) { isDomain = false; } // Ensure we shutdown the server if (isDomain) { if (ServerHelper.isDomainRunning(client)) { ServerHelper.shutdownDomain(client); } } else { if (ServerHelper.isStandaloneRunning(client)) { ServerHelper.shutdownStandalone(client); } } } } @Test public void testStartStandalone() throws Exception { final StartMojo mojo = getStartMojo(); mojo.execute(); try (ModelControllerClient client = createClient()) { // Verify the server is running Assert.assertTrue("The start goal did not start the server.", ServerHelper.isStandaloneRunning(client)); Assert.assertFalse("This should be a standalone server, but found a domain server.", ServerHelper.isDomainServer(client)); } } @Test public void testShutdownStandalone() throws Exception { // Start up the server and ensure it's running final StartMojo startMojo = getStartMojo(); startMojo.execute(); try (ModelControllerClient client = createClient()) { // Verify the server is running Assert.assertTrue("The start goal did not start the server.", ServerHelper.isStandaloneRunning(client)); } // Look up the stop mojo and attempt to stop final ShutdownMojo stopMojo = lookupMojoAndVerify("shutdown", "shutdown-pom.xml"); stopMojo.execute(); try (ModelControllerClient client = createClient()) { // Verify the server is running Assert.assertFalse("The start goal did not start the server.", ServerHelper.isStandaloneRunning(client)); } } @Test public void testStartAndAddUserStandalone() throws Exception { final StartMojo mojo = getStartMojo(); // The MOJO lookup replaces a configured add-users configuration with a default value so we need to manually // create and insert the field for testing setValue(mojo, "addUser", createAddUsers("admin:admin.1234:admin", "user:user.1234:user,mgmt::true")); mojo.execute(); try (ModelControllerClient client = createClient()) { // Verify the server is running Assert.assertTrue("The start goal did not start the server.", ServerHelper.isStandaloneRunning(client)); } final Path standaloneConfigDir = Environment.WILDFLY_HOME.resolve("standalone").resolve("configuration"); // Check the management users final Path mgmtUsers = standaloneConfigDir.resolve("mgmt-users.properties"); Assert.assertTrue("File " + mgmtUsers + " does not exist", Files.exists(mgmtUsers)); Assert.assertTrue("User admin was not added to the mgmt-user.properties file", fileContains(mgmtUsers, "admin=")); // Check the management users final Path mgmtGroups = standaloneConfigDir.resolve("mgmt-groups.properties"); Assert.assertTrue("File " + mgmtGroups + " does not exist", Files.exists(mgmtGroups)); Assert.assertTrue("User admin was not added to the mgmt-groups.properties file", fileContains(mgmtGroups, "admin=admin")); // Check the application users final Path appUsers = standaloneConfigDir.resolve("application-users.properties"); Assert.assertTrue("File " + appUsers + " does not exist", Files.exists(appUsers)); Assert.assertTrue("User user was not added to the application-user.properties file", fileContains(appUsers, "user=")); // Check the management users final Path appGroups = standaloneConfigDir.resolve("application-roles.properties"); Assert.assertTrue("File " + appGroups + " does not exist", Files.exists(appGroups)); Assert.assertTrue("User user was not added to the application-roles.properties file", fileContains(appGroups, "user=user,mgmt")); } @Test public void testStartDomain() throws Exception { final StartMojo mojo = getStartMojo("start-domain-pom.xml"); mojo.execute(); try (DomainClient client = DomainClient.Factory.create(createClient())) { // Verify the server is running Assert.assertTrue("The start goal did not start the server.", ServerHelper.isDomainRunning(client)); Assert.assertTrue("This should be a domain server server, but found a standalone server.", ServerHelper.isDomainServer(client)); } } @Test public void testShutdownDomain() throws Exception { // Start up the server and ensure it's running final StartMojo startMojo = getStartMojo("start-domain-pom.xml"); startMojo.execute(); try (DomainClient client = DomainClient.Factory.create(createClient())) { // Verify the server is running Assert.assertTrue("The start goal did not start the server.", ServerHelper.isDomainRunning(client)); } // Look up the stop mojo and attempt to stop final ShutdownMojo stopMojo = lookupMojoAndVerify("shutdown", "shutdown-pom.xml"); stopMojo.execute(); try (DomainClient client = DomainClient.Factory.create(createClient())) { // Verify the server is running Assert.assertFalse("The start goal did not start the server.", ServerHelper.isDomainRunning(client)); } } private StartMojo getStartMojo() throws Exception { return getStartMojo("start-pom.xml"); } private StartMojo getStartMojo(final String pomFile) throws Exception { // Start up the server and ensure it's running final StartMojo startMojo = lookupMojoAndVerify("start", pomFile); setValue(startMojo, "jbossHome", Environment.WILDFLY_HOME.toString()); setValue(startMojo, "serverArgs", new String[]{"-Djboss.management.http.port=" + Integer.toString(Environment.PORT)}); return startMojo; } private static ModelControllerClient createClient() throws UnknownHostException { return ModelControllerClient.Factory.create(Environment.HOSTNAME, Environment.PORT); } private static boolean fileContains(final Path path, final String text) throws IOException { try (BufferedReader reader = Files.newBufferedReader(path, StandardCharsets.UTF_8)) { String line; while ((line = reader.readLine()) != null) { if (line.startsWith(text)) { return true; } } } return false; } private static AddUser createAddUsers(final String... userStrings) throws NoSuchFieldException, IllegalAccessException { final AddUser result = new AddUser(); final List<User> users = new ArrayList<>(userStrings.length); for (String userString : userStrings) { users.add(createUser(userString)); } setValue(result, "users", users); return result; } private static User createUser(final String userString) { final User user = new User(); user.set(userString); return user; } }