/* * JBoss, Home of Professional Open Source * Copyright 2013, Red Hat, Inc. and/or its affiliates, and individual * contributors by the @authors tag. See the copyright.txt in the * distribution for a full listing of individual contributors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * http://www.apache.org/licenses/LICENSE-2.0 * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.switchyard.quickstarts.testutil; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import org.jboss.as.cli.CliEvent; import org.jboss.as.cli.CliEventListener; import org.jboss.as.cli.CommandContext; import org.jboss.as.cli.CommandContextFactory; import org.jboss.as.protocol.StreamUtils; import org.jboss.logging.Logger; /** * JBoss CLI utility class. */ public final class JBossCliUtil { private static final Logger _logger = Logger.getLogger(JBossCliUtil.class); private static final String HOST_PROP_NAME = "org.switchyard.quickstarts.testutil.cli.host"; private static final String PORT_PROP_NAME = "org.switchyard.quickstarts.testutil.cli.port"; private static final String USER_PROP_NAME = "org.switchyard.quickstarts.testutil.cli.user"; private static final String PASSWORD_PROP_NAME = "org.switchyard.quickstarts.testutil.cli.password"; private static final String NO_LOCAL_AUTH_PROP_NAME = "org.switchyard.quickstarts.testutil.cli.noLocalAuth"; private static final String INIT_CONSOLE_PROP_NAME = "org.switchyard.quickstarts.testutil.cli.initConsole"; private static final String CONNECTION_TIMEOUT_PROP_NAME = "org.switchyard.quickstarts.testutil.cli.connectionTimeout"; private static String HOST = "127.0.0.1"; private static int PORT = 9999; private static String USER = null; private static String PASSWORD = null; private static boolean NO_LOCAL_AUTH = false; private static boolean INIT_CONSOLE = false; private static int CONNECTION_TIMEOUT = -1; static { String val = null; if ((val = System.getProperty(HOST_PROP_NAME)) != null) { HOST = val; } if ((val = System.getProperty(PORT_PROP_NAME)) != null) { PORT = Integer.parseInt(val); } if ((val = System.getProperty(USER_PROP_NAME)) != null) { USER = val; } if ((val = System.getProperty(PASSWORD_PROP_NAME)) != null) { PASSWORD = val; } if ((val = System.getProperty(NO_LOCAL_AUTH_PROP_NAME)) != null) { NO_LOCAL_AUTH = Boolean.parseBoolean(val); } if ((val = System.getProperty(INIT_CONSOLE_PROP_NAME)) != null) { INIT_CONSOLE = Boolean.parseBoolean(val); } if ((val = System.getProperty(CONNECTION_TIMEOUT_PROP_NAME)) != null) { CONNECTION_TIMEOUT = Integer.parseInt(val); } } /** * Executes CLI script file. * @param path file path * @throws Exception exception */ public static void executeCliScript(String path) throws Exception { File file = new File(path); if (!file.exists() || !file.isFile()) { throw new IllegalArgumentException(path + " is not a valid CLI script file"); } final CommandContext cmdCtx = CommandContextFactory .getInstance() .newCommandContext( HOST , PORT , USER , PASSWORD != null ? PASSWORD.toCharArray() : null , NO_LOCAL_AUTH , INIT_CONSOLE , CONNECTION_TIMEOUT); if (_logger.isDebugEnabled()) { cmdCtx.addEventListener(new CliEventListener() { @Override public void cliEvent(CliEvent event, CommandContext ctx) { _logger.debug("CLI Event: " + event.toString()); } }); } cmdCtx.connectController(); BufferedReader reader = null; try { reader = new BufferedReader(new FileReader(file)); _logger.info("Executing CLI script file: " + path); String line = reader.readLine(); while (cmdCtx.getExitCode() == 0 && !cmdCtx.isTerminated() && line != null) { if (_logger.isDebugEnabled()) { _logger.debug(">>> " + line.trim()); } cmdCtx.handleSafe(line.trim()); line = reader.readLine(); } } finally { StreamUtils.safeClose(reader); cmdCtx.terminateSession(); _logger.info("CLI session is terminated with exit code '" + cmdCtx.getExitCode() + "'"); } } }