[lttng-dev] [PATCH lttng-tools] Tests: Java agent: update after Java agent refactoring
Alexandre Montplaisir
alexmonthy at voxpopuli.im
Wed Aug 5 20:32:28 EDT 2015
This patch now makes lttng-tools have a hard requirement on Java to even
compile the thing. Is this desirable, given that Java is only needed to
run some tests?
On 2015-08-05 12:08 PM, Jérémie Galarneau wrote:
> Merged, thanks!
>
> Jérémie
>
> On Tue, Aug 4, 2015 at 6:21 PM, Michael Jeanson <mjeanson at efficios.com>
> wrote:
>
>> 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 <mjeanson at efficios.com>
>> ---
>> .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 +-
>> tests/regression/ust/java-log4j/JTestLTTng.java | 38 +++++++++---
>> tests/regression/ust/java-log4j/Makefile.am | 17 +-----
>> tests/regression/ust/java-log4j/test_java_log4j | 4 +-
>> 9 files changed, 99 insertions(+), 103 deletions(-)
>>
>> diff --git a/.gitignore b/.gitignore
>> index ff19c8d..5d24bec 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 098aa77..42b51d7 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 2fc6e53..bfef178 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 9431551..741d820 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 <mjeanson at efficios.com>
>> * Copyright (C) 2013 - David Goulet <dgoulet at efficios.com>
>> *
>> * 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 286e3df..877237f 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 48c8b74..f9f244b 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 0019cb8..64a471b 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 <dgoulet at efficios.com>
>> * Copyright (C) 2014 - David Goulet <dgoulet at efficios.com>
>> * Christian Babeux <christian.babeux at efficios.com>
>> *
>> @@ -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 7d6c048..42daab8 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 cdc0c4c..d5c6621 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
>> --
>> 1.9.1
>>
>>
>
>
>
> _______________________________________________
> lttng-dev mailing list
> lttng-dev at lists.lttng.org
> http://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev
More information about the lttng-dev
mailing list