/* * JBoss, Home of Professional Open Source * Copyright 2007, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. * See the copyright.txt in the distribution for a * full listing of individual contributors. * This copyrighted material is made available to anyone wishing to use, * modify, copy, or redistribute it subject to the terms and conditions * of the GNU Lesser General Public License, v. 2.1. * This program is distributed in the hope that it will be useful, but WITHOUT A * 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, * v.2.1 along with this distribution; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301, USA. * * (C) 2005-2006, * @author JBoss Inc. */ /* # Copyright (C) 2001, # # Hewlett-Packard Company, # Newcastle upon Tyne, # Tyne and Wear, # UK. */ package org.jboss.jbossts.qa.Utils; import java.io.*; public class CSFTestWrapper { public static void main(String[] args) { CSFTestWrapper wrapper; wrapper = new CSFTestWrapper(args); wrapper.execute(); } public CSFTestWrapper(String[] args) { if (args != null) { mDeploy = args[0]; } mFile = new File(mDeploy); createFiles(); } public void execute() { runComand(); } public void createFiles() { String outputDirectory = mFile.getAbsolutePath(); try { outputDirectory = outputDirectory.substring(0, outputDirectory.lastIndexOf(".")); int startofchange = outputDirectory.indexOf("config"); String s = outputDirectory.substring(0, startofchange); s = s + "res"; s = s + outputDirectory.substring(startofchange + 6, outputDirectory.length()); outputDirectory = s; } catch (StringIndexOutOfBoundsException siobe) { System.out.println("test name error"); } try { File testDirectory = new File(outputDirectory); if (!testDirectory.isDirectory()) { testDirectory.mkdirs(); } mOutStream = new File(outputDirectory + File.separator + sTitle + "_out"); if (!mOutStream.isFile()) { mOutStream.createNewFile(); } mErrStream = new File(outputDirectory + File.separator + sTitle + "_err"); if (!mOutStream.isFile()) { mErrStream.createNewFile(); } } catch (IOException io) { System.out.println("create exception " + io); } try { mOutPrintWriter = new PrintStream( new BufferedOutputStream( new FileOutputStream(mOutStream)), true); mErrPrintWriter = new PrintStream( new BufferedOutputStream( new FileOutputStream(mErrStream)), true); } catch (Exception e) { System.out.println("print stream exception " + e); } } public void runComand() { Thread mMainThread = new Thread("comand thread " + sTitle) { public void run() { try { mComand = sEmbeddor + " " + mDeploy; mProcess = Runtime.getRuntime().exec(mComand); } catch (OutOfMemoryError ome) { System.out.println("Out of memeory end test = " + ome); } catch (IOException io) { System.out.println("runtime exception " + io); } outputToDisplay(); } }; mMainThread.start(); } public void outputToDisplay() { Thread mOutReader = new Thread() { public void run() { try { BufferedReader br = new BufferedReader(new InputStreamReader(mProcess.getInputStream())); String line = br.readLine(); while ((!isInterrupted() && line != null)) { line = line.trim(); writeToLog(line, true); line = br.readLine(); } } catch (InterruptedIOException e) { } catch (Exception e) { } } }; Thread mErrReader = new Thread() { public void run() { try { BufferedReader br = new BufferedReader(new InputStreamReader(mProcess.getErrorStream())); String line = br.readLine(); while ((!isInterrupted() && line != null)) { line = line.trim(); writeToLog(line, false); line = br.readLine(); } } catch (InterruptedIOException e) { } catch (Exception e) { } } }; mOutReader.start(); mErrReader.start(); try { mProcess.waitFor(); } catch (Exception e) { System.out.println("process exception"); } mOutPrintWriter.close(); mErrPrintWriter.close(); } public void writeToLog(String s, boolean b) { if (b) { mOutPrintWriter.println(s); } else { mErrPrintWriter.println(s); } //all the qa system needs to see is passed if (s.endsWith(sPassedResult)) { System.out.println("Passed"); startTimer(); } if (s.endsWith(sFailedResult)) { System.out.println("Failed"); startTimer(); } } /** * On some systems HP-UX the embeddor process is not ending so * lets stop it here. */ private void startTimer() { try { //sleep for 15 seconds Thread.currentThread().sleep(15000); // if process has not stopped kill the process if (mProcess != null) { mProcess.destroy(); mProcess = null; } } catch (Exception e) { System.err.println("error in sleep"); } } private File mFile; private File mOutStream; private File mErrStream; private PrintStream mOutPrintWriter; private PrintStream mErrPrintWriter; private Process mProcess; private String mComand; private String mDeploy; private static String sTitle = "csf_embeddor"; private static String sEmbeddor = "java com.hp.mwlabs.csf.embeddors.text.Server -deploymentURL"; private static String sPassedResult = "ArjunaTest Passed"; private static String sFailedResult = "ArjunaTest Failed"; }