From 0b7af9456fb564df73d32ff7712200d14569a375 Mon Sep 17 00:00:00 2001 From: Michael Jeanson Date: Tue, 4 Aug 2015 18:21:40 -0400 Subject: [PATCH] Tests: Java agent: update after Java agent refactoring MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit This patch fixes the Java agent tests which were impossible to run since the Jar files have been renamed. It also overhauls the java part of the configure script to match what's in UST and replace some hardcoded path with configurable values. The tests are now enabled when corresponding classes are found in the CLASSPATH during configure. Signed-off-by: Michael Jeanson Signed-off-by: Jérémie Galarneau --- .gitignore | 2 + config/ax_check_class.m4 | 2 +- configure.ac | 80 +++++++------------ tests/regression/ust/java-jul/JTestLTTng.java | 34 ++++++-- tests/regression/ust/java-jul/Makefile.am | 21 +---- tests/regression/ust/java-jul/test_java_jul | 4 +- .../regression/ust/java-log4j/JTestLTTng.java | 38 +++++++-- tests/regression/ust/java-log4j/Makefile.am | 17 +--- .../regression/ust/java-log4j/test_java_log4j | 4 +- 9 files changed, 99 insertions(+), 103 deletions(-) diff --git a/.gitignore b/.gitignore index ff19c8d0d..5d24bec18 100644 --- a/.gitignore +++ b/.gitignore @@ -93,3 +93,5 @@ health_check /benchmark/ /include/version.h + +classnoinst.stamp diff --git a/config/ax_check_class.m4 b/config/ax_check_class.m4 index 098aa7729..42b51d72c 100644 --- a/config/ax_check_class.m4 +++ b/config/ax_check_class.m4 @@ -118,7 +118,7 @@ EOF ac_cv_prog_uudecode_base64=no fi rm -f Test.uue - if AC_TRY_COMMAND($JAVA $JAVAFLAGS Test $1) >/dev/null 2>&1; then + if AC_TRY_COMMAND($JAVA -classpath ".:$CLASSPATH" $JAVAFLAGS Test $1) >/dev/null 2>&1; then eval "ac_cv_class_$ac_var_name=yes" else eval "ac_cv_class_$ac_var_name=no" diff --git a/configure.ac b/configure.ac index 2fc6e536c..bfef1785c 100644 --- a/configure.ac +++ b/configure.ac @@ -355,65 +355,43 @@ AX_CONFIG_FEATURE( ) AM_CONDITIONAL([COMPAT_EPOLL], [ test "$enable_epoll" = "yes" ]) -# Set compile flags to java include files if given. This is only used to -# compile java agent tests. -AC_ARG_WITH([java-jdk], - [AS_HELP_STRING([--with-java-jdk=DIR],[use the Java JDK in DIR. Ex : $JAVA_HOME.])], - [JAVA_JDK=$withval], - [JAVA_JDK=""] -) -AM_CONDITIONAL([HAVE_JAVA_JDK], [test $JAVA_JDK], [Java JDK path]) -AC_SUBST([JAVA_JDK]) +AX_JAVA_OPTIONS +AX_PROG_JAVAC +AX_PROG_JAVA +AX_PROG_JAR -AS_IF([test $JAVA_JDK],[ - AS_IF([test -d $JAVA_JDK], - [ - AC_MSG_RESULT([using Java includes in $JAVA_SDK]) - SUBDIRS=`find $JAVA_JDK/include -type d` - CPPFLAGS+=" " - CPPFLAGS+=`for x in $SUBDIRS; do echo -n "-I$x "; done` - CPPFLAGS+=" " - ],[AC_MSG_ERROR(Unable to find Java include files in $JAVA_JDK)] - ) -]) +AX_CHECK_CLASSPATH -# Check for the UST agent jar file in the system. Hardcoded path is added here -# since we have *no* idea where this could be installed. Note that this is only -# used for agent testing. -AC_MSG_CHECKING(Java UST agent jar file) -java_agent_jar_path="${prefix}/share/java/liblttng-ust-agent.jar" -if test -f $java_agent_jar_path; then - build_java_agent=yes - AC_MSG_RESULT(found) +# Check for Java UST agent common class first +AX_CHECK_CLASS(org.lttng.ust.agent.AbstractLttngAgent) +if test "x$ac_cv_class_org_lttng_ust_agent_AbstractLttngAgent" = "xyes"; then + java_agent_common=yes else - build_java_agent=no - AC_MSG_RESULT(not found) + java_agent_common=no fi -AM_CONDITIONAL([BUILD_JAVA_AGENT], [test "x$build_java_agent" = "xyes"]) -AC_SUBST([java_agent_jar_path]) - -# Check for log4j support on the system to know if we can build or not the -# log4j tests. -if test "x$build_java_agent" = "xyes"; then - AC_MSG_CHECKING(Java agent support for log4j) - AX_JAVA_OPTIONS - AX_PROG_JAR - AX_PROG_JAVA - AX_PROG_JAVAC - - # By default, use a commonly used classpath on the system to ease things up - # for the Java testing in this directory. - LOG4J_CLASSPATH="$java_agent_jar_path:$CLASSPATH:.:/usr/share/java/*" - JAVAFLAGS="-cp $LOG4J_CLASSPATH" - JAVACFLAGS="$JAVAFLAGS" + +# If the common class is available, test for each agent +if test "x$java_agent_common" = "xyes"; then + # Check for JUL + AX_CHECK_CLASS(org.lttng.ust.agent.jul.LttngLogHandler) + AX_CHECK_CLASS(org.lttng.ust.agent.log4j.LttngLogAppender) AX_CHECK_CLASS(org.apache.log4j.Logger) - if test "x$ac_cv_class_org_apache_log4j_Logger" = "xno"; then - build_java_log4j_agent=no - else - build_java_log4j_agent=yes + build_java_jul_agent=no + if test "x$ac_cv_class_org_lttng_ust_agent_jul_LttngLogHandler" = "xyes"; then + build_java_jul_agent=yes fi + + build_java_log4j_agent=no + if test "x$ac_cv_class_org_lttng_ust_agent_log4j_LttngLogAppender" = "xyes"; then + if test "x$ac_cv_class_org_apache_log4j_Logger" = "xyes"; then + build_java_log4j_agent=yes + fi + fi + fi + +AM_CONDITIONAL([BUILD_JAVA_JUL_AGENT], [test "x$build_java_jul_agent" = "xyes"]) AM_CONDITIONAL([BUILD_JAVA_LOG4J_AGENT], [test "x$build_java_log4j_agent" = "xyes"]) AC_SYS_LARGEFILE diff --git a/tests/regression/ust/java-jul/JTestLTTng.java b/tests/regression/ust/java-jul/JTestLTTng.java index 9431551cd..741d82032 100644 --- a/tests/regression/ust/java-jul/JTestLTTng.java +++ b/tests/regression/ust/java-jul/JTestLTTng.java @@ -1,4 +1,5 @@ /* + * Copyright (C) 2015 - Michael Jeanson * Copyright (C) 2013 - David Goulet * * This program is free software; you can redistribute it and/or modify it @@ -15,20 +16,29 @@ * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ +import java.io.IOException; import java.lang.Integer; +import java.util.logging.Handler; import java.util.logging.Logger; import java.util.logging.Level; -import org.lttng.ust.agent.LTTngAgent; +import org.lttng.ust.agent.jul.LttngLogHandler; -public class JTestLTTng -{ - private static LTTngAgent lttngAgent; +public class JTestLTTng { + + /** + * Application start + * + * @param args + * Command-line arguments + * @throws IOException + * @throws InterruptedException + */ + public static void main(String args[]) throws IOException, InterruptedException { - public static void main(String args[]) throws Exception - { Logger lttng = Logger.getLogger("JTestLTTng"); Logger lttng2 = Logger.getLogger("JTestLTTng2"); + int nrIter = Integer.parseInt(args[0]); int waitTime = Integer.parseInt(args[1]); int fire_finest_tp = 0; @@ -41,7 +51,11 @@ public class JTestLTTng fire_second_tp = Integer.parseInt(args[3]); } - lttngAgent = LTTngAgent.getLTTngAgent(); + /* Instantiate a LTTngLogHandler object, and attach it to our loggers */ + Handler lttngHandler = new LttngLogHandler(); + lttng.addHandler(lttngHandler); + lttng2.addHandler(lttngHandler); + lttng.setLevel(Level.FINEST); for (int iter = 0; iter < nrIter; iter++) { @@ -57,6 +71,10 @@ public class JTestLTTng lttng2.info("JUL second logger fired"); } - lttngAgent.dispose(); + /* + * Do not forget to close() all handlers so that the agent can shutdown + * and the session daemon socket gets cleaned up explicitly. + */ + lttngHandler.close(); } } diff --git a/tests/regression/ust/java-jul/Makefile.am b/tests/regression/ust/java-jul/Makefile.am index 286e3df22..877237fff 100644 --- a/tests/regression/ust/java-jul/Makefile.am +++ b/tests/regression/ust/java-jul/Makefile.am @@ -1,25 +1,13 @@ +JAVAROOT = . noinst_SCRIPTS = test_java_jul JTestLTTng.java EXTRA_DIST = test_java_jul JTestLTTng.java -if HAVE_JAVA_JDK -JCC=$(JAVA_JDK)/bin/javac -else -JCC=javac -endif +if BUILD_JAVA_JUL_AGENT +dist_noinst_JAVA = JTestLTTng.java +endif # BUILD_JAVA_JUL_AGENT -AGENT_JAR_FILE=$(java_agent_jar_path) - - -# Still need to copy test files in case of out of tree build -if BUILD_JAVA_AGENT -all-local: static_file JTestLTTng.class -%.class: %.java - $(JCC) -d "$(builddir)" -cp "$(AGENT_JAR_FILE):." $< -else all-local: static_file -endif # BUILD_JAVA_AGENT - static_file: @if [ x"$(srcdir)" != x"$(builddir)" ]; then \ @@ -28,7 +16,6 @@ static_file: done; \ fi - clean-local: rm -f *.class @if [ x"$(srcdir)" != x"$(builddir)" ]; then \ diff --git a/tests/regression/ust/java-jul/test_java_jul b/tests/regression/ust/java-jul/test_java_jul index 48c8b7401..f9f244b61 100755 --- a/tests/regression/ust/java-jul/test_java_jul +++ b/tests/regression/ust/java-jul/test_java_jul @@ -27,7 +27,7 @@ TESTAPP_PATH="$CURDIR/$TESTAPP_NAME" SESSION_NAME="jul" EVENT_NAME="JTestLTTng" EVENT_NAME2="JTestLTTng2" -JAVA_CP="$CURDIR:/usr/local/share/java/liblttng-ust-agent.jar:/usr/share/java/liblttng-ust-agent.jar" +JAVA_CP="$CURDIR:$CLASSPATH" NUM_TESTS=155 @@ -39,7 +39,7 @@ function run_app local fire_second_tp=$2 #FIXME: app should have synchro. - java -cp $JAVA_CP -Djava.library.path="/usr/local/lib:/usr/lib" $TESTAPP_NAME $NR_ITER $NR_MSEC_WAIT $finest_tp $fire_second_tp >/dev/null 2>&1 + java -cp $JAVA_CP -Djava.library.path="$LD_LIBRARY_PATH:/usr/local/lib:/usr/lib" $TESTAPP_NAME $NR_ITER $NR_MSEC_WAIT $finest_tp $fire_second_tp >/dev/null 2>&1 } function run_app_background diff --git a/tests/regression/ust/java-log4j/JTestLTTng.java b/tests/regression/ust/java-log4j/JTestLTTng.java index 0019cb825..64a471bf8 100644 --- a/tests/regression/ust/java-log4j/JTestLTTng.java +++ b/tests/regression/ust/java-log4j/JTestLTTng.java @@ -1,4 +1,5 @@ /* + * Copyright (C) 2015 - Michael Jeanson * Copyright (C) 2014 - David Goulet * Christian Babeux * @@ -19,19 +20,26 @@ import java.io.IOException; import java.lang.Integer; -import org.apache.log4j.Logger; +import org.apache.log4j.Appender; import org.apache.log4j.BasicConfigurator; +import org.apache.log4j.Logger; +import org.lttng.ust.agent.log4j.LttngLogAppender; -import org.lttng.ust.agent.LTTngAgent; +public class JTestLTTng { -public class JTestLTTng -{ - private static LTTngAgent lttngAgent; + /** + * Application start + * + * @param args + * Command-line arguments + * @throws IOException + * @throws InterruptedException + */ + public static void main(String args[]) throws IOException, InterruptedException { - public static void main(String args[]) throws Exception - { Logger lttng = Logger.getLogger("log4j-event"); Logger lttng2 = Logger.getLogger("log4j-event-2"); + int nrIter = Integer.parseInt(args[0]); int waitTime = Integer.parseInt(args[1]); int fire_debug_tp = 0; @@ -44,8 +52,16 @@ public class JTestLTTng fire_second_tp = Integer.parseInt(args[3]); } + /* Start with the default Log4j configuration, which logs to console */ BasicConfigurator.configure(); - lttngAgent = LTTngAgent.getLTTngAgent(); + + /* + * Add a LTTng log appender to both loggers, which will also send the + * logged events to UST. + */ + Appender lttngAppender = new LttngLogAppender(); + lttng.addAppender(lttngAppender); + lttng2.addAppender(lttngAppender); for (int iter = 0; iter < nrIter; iter++) { lttng.info("LOG4J tp fired!"); @@ -59,5 +75,11 @@ public class JTestLTTng if (fire_second_tp == 1) { lttng2.info("LOG4J second logger fired"); } + + /* + * Do not forget to close() all handlers so that the agent can shutdown + * and the session daemon socket gets cleaned up explicitly. + */ + lttngAppender.close(); } } diff --git a/tests/regression/ust/java-log4j/Makefile.am b/tests/regression/ust/java-log4j/Makefile.am index 7d6c0481a..42daab81b 100644 --- a/tests/regression/ust/java-log4j/Makefile.am +++ b/tests/regression/ust/java-log4j/Makefile.am @@ -1,24 +1,13 @@ +JAVAROOT = . noinst_SCRIPTS = test_java_log4j JTestLTTng.java EXTRA_DIST = test_java_log4j JTestLTTng.java -if HAVE_JAVA_JDK -JCC=$(JAVA_JDK)/bin/javac -else -JCC=javac -endif - -# We still need to copy static files for out of tree and dist build if BUILD_JAVA_LOG4J_AGENT -all-local: static_file JTestLTTng.class - -%.class: %.java - $(JCC) -d "$(builddir)" $(JAVACFLAGS) $< -else -all-local: static_file +dist_noinst_JAVA = JTestLTTng.java endif # BUILD_JAVA_LOG4J_AGENT -JTestLTTng.class: JTestLTTng.java +all-local: static_file static_file: @if [ x"$(srcdir)" != x"$(builddir)" ]; then \ diff --git a/tests/regression/ust/java-log4j/test_java_log4j b/tests/regression/ust/java-log4j/test_java_log4j index cdc0c4c34..d5c662184 100755 --- a/tests/regression/ust/java-log4j/test_java_log4j +++ b/tests/regression/ust/java-log4j/test_java_log4j @@ -27,7 +27,7 @@ TESTAPP_PATH="$CURDIR/$TESTAPP_NAME" SESSION_NAME="log4j" EVENT_NAME="log4j-event" EVENT_NAME2="log4j-event-2" -JAVA_CP="$CURDIR:/usr/local/share/java/liblttng-ust-agent.jar:/usr/share/java/*" +JAVA_CP="$CURDIR:$CLASSPATH" OUTPUT_DEST="/dev/null" NUM_TESTS=155 @@ -40,7 +40,7 @@ function run_app local fire_second_tp=$2 # FIXME: test app should have synchro. - java -cp $JAVA_CP -Djava.library.path="/usr/local/lib:/usr/lib" $TESTAPP_NAME $NR_ITER $NR_MSEC_WAIT $debug_tp $fire_second_tp >/dev/null 2>&1 + java -cp $JAVA_CP -Djava.library.path="$LD_LIBRARY_PATH:/usr/local/lib:/usr/lib" $TESTAPP_NAME $NR_ITER $NR_MSEC_WAIT $debug_tp $fire_second_tp >/dev/null 2>&1 } function run_app_background -- 2.34.1