/* * JBoss, Home of Professional Open Source. * Copyright 2016, Red Hat Middleware LLC, 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.manualmode.management.cli; import java.io.File; import java.io.IOException; import java.nio.file.Files; import java.nio.file.StandardCopyOption; import javax.inject.Inject; import org.jboss.as.cli.scriptsupport.CLI; import org.jboss.as.cli.scriptsupport.CLI.Result; import org.jboss.as.test.shared.TestSuiteEnvironment; 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; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; /** * Test various connection states of the CLI class. * * @author Jean-Francois Denise (jdenise@redhat.com) */ @RunWith(WildflyTestRunner.class) @ServerControl(manual = true) public class CLIScriptSupportTestCase { private static final File ROOT = new File(System.getProperty("jboss.home")); private static final String JBOSS_HOME = " --jboss-home=" + ROOT.getAbsolutePath(); @Inject private ServerController serverController; @Test public void testConnectStatus() { // Replace default adrress with contextual one for the embedded server to use // the right one. System.setProperty("jboss.bind.address.management", TestSuiteEnvironment.getServerAddress()); // Offline instance CLI cli = CLI.newInstance(); try { copyConfig("standalone.xml", "standalone-cli.xml", true); } catch (IOException ex) { Assert.fail("Exception copying configuration: " + ex); } // start an embedded server executeCommand(cli, "embed-server --std-out=echo " + "--server-config=standalone-cli.xml" + JBOSS_HOME); try { // Enable management executeCommand(cli, "reload --admin-only=false"); // Start a clean CLI CLI cli2 = CLI.newInstance(); // Make an invalid connect checkFail(() -> cli2.connect(TestSuiteEnvironment.getServerAddress(), 123, null, null)); // Make a valid connect cli2.connect(TestSuiteEnvironment.getServerAddress(), TestSuiteEnvironment.getServerPort(), null, null); try { executeCommand(cli2, "version"); } finally { cli2.disconnect(); } } finally { cli.cmd("stop-embedded-server"); } } @Test public void testDisconnect() { CLI cli = CLI.newInstance(); checkFail(() -> cli.disconnect()); } @Test public void testBatch() { serverController.start(); try { CLI cli = CLI.newInstance(); cli.connect(serverController.getClient().getMgmtAddress(), serverController.getClient().getMgmtPort(), null, null); addProperty(cli, "prop1", "prop1_a"); addProperty(cli, "prop2", "prop2_a"); cli.cmd("batch"); writeProperty(cli, "prop1", "prop1_b"); writeProperty(cli, "prop2", "prop2_b"); cli.cmd("run-batch"); assertEquals("prop1_b", readProperty(cli, "prop1")); assertEquals("prop2_b", readProperty(cli, "prop2")); } finally { serverController.stop(); } } private static void checkFail(Runnable runner) { boolean failed = false; try { runner.run(); } catch (RuntimeException ex) { failed = true; } if (!failed) { Assert.fail("Should have failed"); } } private static void executeCommand(CLI cli, String cmd) { Result res = cli.cmd(cmd); if (!res.isSuccess()) { Assert.fail("Invalid response " + res.getResponse().asString()); } } private static void addProperty(CLI cli, String name, String value) { cli.cmd("/system-property=" + name + ":add(value=" + value + ")"); } private static String readProperty(CLI cli, String name) { Result res = cli.cmd("/system-property=" + name + ":read-attribute(name=value)"); return res.getResponse().get("result").asString(); } private static void writeProperty(CLI cli, String name, String value) { cli.cmd("/system-property=" + name + ":write-attribute(name=value,value=" + value + ")"); } private static void copyConfig(String base, String newName, boolean requiresExists) throws IOException { File configDir = new File(ROOT, "standalone" + File.separatorChar + "configuration"); File baseFile = new File(configDir, base); assertTrue(!requiresExists || baseFile.exists()); File newFile = new File(configDir, newName); Files.copy(baseFile.toPath(), newFile.toPath(), StandardCopyOption.REPLACE_EXISTING, StandardCopyOption.COPY_ATTRIBUTES); } }