X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=test%2Fjalview%2Futil%2FLog4jTest.java;fp=test%2Fjalview%2Futil%2FLog4jTest.java;h=73bf20786106b3bc444bd7bc9026ba491b5f3f17;hb=d043ce47fc710d3eb2629ba926a8a7417bd67d8c;hp=0000000000000000000000000000000000000000;hpb=49db0dff1da16c3355b43a41498c1fc93ef47e91;p=jalview.git diff --git a/test/jalview/util/Log4jTest.java b/test/jalview/util/Log4jTest.java new file mode 100644 index 0000000..73bf207 --- /dev/null +++ b/test/jalview/util/Log4jTest.java @@ -0,0 +1,199 @@ +/* + * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) + * Copyright (C) $$Year-Rel$$ The Jalview Authors + * + * This file is part of Jalview. + * + * Jalview is free software: you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * Jalview 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Jalview. If not, see . + * The Jalview Authors are detailed in the 'AUTHORS' file. + */ +package jalview.util; + +import static org.testng.Assert.assertNotNull; + +import java.io.BufferedReader; +import java.io.File; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.concurrent.TimeUnit; + +import org.testng.Assert; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import io.github.classgraph.ClassGraph; +import io.github.classgraph.ScanResult; +import jalview.bin.Console; + +public class Log4jTest +{ + private static final int TIMEOUT = 10; + + private static class Worker extends Thread + { + private final Process process; + + private BufferedReader outputReader; + + private BufferedReader errorReader; + + private boolean exited; + + private Worker(Process process) + { + this.process = process; + } + + @Override + public void run() + { + try + { + exited = process.waitFor(TIMEOUT, TimeUnit.SECONDS); + } catch (InterruptedException ignore) + { + return; + } + this.interrupt(); + this.process.destroy(); + } + + public BufferedReader getOutputReader() + { + return outputReader; + } + + public void setOutputReader(BufferedReader outputReader) + { + this.outputReader = outputReader; + } + + public BufferedReader getErrorReader() + { + return errorReader; + } + + public void setErrorReader(BufferedReader errorReader) + { + this.errorReader = errorReader; + } + } + + private static ClassGraph scanner = null; + + private static String classpath = null; + + private static String java_exe = null; + + public synchronized static String getClassPath() + { + if (scanner == null) + { + scanner = new ClassGraph(); + ScanResult scan = scanner.scan(); + classpath = scan.getClasspath(); + java_exe = System.getProperty("java.home") + File.separator + "bin" + + File.separator + "java"; + + } + while (classpath == null) + { + try + { + Thread.sleep(10); + } catch (InterruptedException x) + { + + } + } + return classpath; + } + + private Worker getJalviewDesktopRunner(String appArgs) + { + String classpath = getClassPath(); + String cmd = java_exe + " " + " -classpath " + classpath + " " + + " jalview.bin.Jalview " + " " + + "-props test/jalview/util/log4jTestProps.jvprops " + appArgs; + Process proc = null; + Worker worker = null; + try + { + proc = Runtime.getRuntime().exec(cmd); + } catch (Throwable e) + { + e.printStackTrace(); + } + if (proc != null) + { + BufferedReader outputReader = new BufferedReader( + new InputStreamReader(proc.getInputStream())); + BufferedReader errorReader = new BufferedReader( + new InputStreamReader(proc.getErrorStream())); + worker = new Worker(proc); + worker.start(); + worker.setOutputReader(outputReader); + worker.setErrorReader(errorReader); + } + return worker; + } + + @BeforeTest(alwaysRun = true) + public void initialize() + { + new Log4jTest(); + } + + @Test(groups = { "Functional" }) + public void testLog4j() + { + String appArgs = " -open examples/uniref50.fa -nosplash -nonews -noquestionnaire -nousagestats -nowebservicediscovery"; + + Worker worker = getJalviewDesktopRunner(appArgs); + assertNotNull(worker, "worker is null"); + + String ln = null; + int count = 0; + boolean logTestFound = false; + try + { + while ((ln = worker.getErrorReader().readLine()) != null) + { + if (++count > 500) + { + break; + } + if (ln.contains(Console.LOGGING_TEST_MESSAGE)) + { + logTestFound = true; + break; + } + } + } catch (IOException e) + { + e.printStackTrace(); + } + if (worker != null && worker.exited == false) + { + worker.interrupt(); + worker.process.destroy(); + } + if (!logTestFound) + { + Assert.fail("Did not find Log4j Test message line '" + + Console.LOGGING_TEST_MESSAGE + "'"); + } + } + +}