On Tue, Jun 18, 2024 at 12:26 PM Rainer Jung <rainer.j...@kippdata.de> wrote: > > Am 18.06.24 um 10:37 schrieb Rémy Maucherat: > > On Tue, Jun 18, 2024 at 9:45 AM Rainer Jung <rainer.j...@kippdata.de> wrote: > >> > >> Hi there, > >> > >> the test classes org.apache.catalina.users.TestDataSourceUserDatabase > >> and org.apache.catalina.realm.TestDataSourceRealm have a filing test > >> which needs Java 17 due to the class version of > >> org/apache/derby/jdbc/EmbeddedDriver. For TC 10.1 this leads to failures > >> when testing with JDK 11-16. > > > > More build dependencies now need Java 17 for the testsuite (bnd in > > particular, and even the Ant from my Fedora ...). How do you work > > around that to reach the test ? > > Good point, thanks for asking: > > - I provide (recent) ant myselve and add it to the PATH > > - I first build everything using the release JDK version, so for > instance Java 22 (just on one platform, currently RHEL 8). > > - for each test platform and JVM version I use a copy of the resulting > build and output tree and I adjust build.xml to be able to only run the > tests: > > - I set an additional custom property skip.build.java.version=true in > build.properties > > - The block "<!-- Check Java Build Version -->" ist changed from > > <condition> > <not><javaversion atleast="${build.java.version}" /></not> > </condition> > > to > > <condition> > <and> > <not><javaversion atleast="${build.java.version}" /></not> > <not><isset property="skip.build.java.version"/></not> > </and> > </condition> > > - the targets setup-bnd and add-osgi get an additional > unless="skip.build.java.version" to supress them during the pure test run > > - the nio and nio2 test targets are duplicated and slightly adjusted > (dropping the dependencies test-compile and deploy). > Originally: > > <target name="test-nio" description="Runs the JUnit test cases for > NIO2. Does not stop on errors." > > depends="setup-jacoco,test-compile,deploy,test-openssl-exists" > if="${execute.test.nio}"> > <runtests protocol="org.apache.coyote.http11.Http11Nio2Protocol" > extension=".NIO" /> > </target> > > <target name="test-nio2" description="Runs the JUnit test cases for > NIO2. Does not stop on errors." > > depends="setup-jacoco,test-compile,deploy,test-openssl-exists" > if="${execute.test.nio2}"> > <runtests protocol="org.apache.coyote.http11.Http11Nio2Protocol" > extension=".NIO2" /> > </target> > > The added targets: > > <target name="test-only-nio" description="Runs the JUnit test cases > or NIO without test preparations. Does not stop on errors." > depends="setup-jacoco,test-openssl-exists" > f="${execute.test.nio}"> > <runtests protocol="org.apache.coyote.http11.Http11Nio2Protocol" > extension=".NIO" /> > </target> > > <target name="test-only-nio2" description="Runs the JUnit test cases > or NIO2 without test preparations. Does not stop on errors." > depends="setup-jacoco,test-openssl-exists" > f="${execute.test.nio2}"> > <runtests protocol="org.apache.coyote.http11.Http11Nio2Protocol" > extension=".NIO2" /> > </target> > > - finally the main test target alslo gets a slighty adjusted twin > (drop coverage-report, call the new "only" targets). > Originally > > <target name="test" description="Runs the JUnit test cases" > depends="test-nio,test-nio2,coverage-report,test-status" /> > > The added target: > > <target name="test-only" description="Runs the JUnit test cases" > depends="test-only-nio,test-only-nio2,test-status" /> > > > - call the new "test-only" target. > > There are probably more clever ways to achieve this, but that's at least > what I use to be able to run the tests on older JVM versions. > > Since I do not apply changes to the tests temselves, this means, that > tests assuming a newer JVM version than the minimal runtime version will > fail when I run them. Of course I can suppress them with test.exclude > (probably only the whole class, not just individual failing tests?). I > will do that, if the derby dependency was intentionally updated. > > Thanks and regards,
Thanks a lot ! I tested and committed the changes to all three branches. I think we're in a much better position now for properly testing Tomcat 9 and 10.1 with older Java versions. Rémy > Rainer > > > Rémy > > > >> Details: > >> > >> Testcase: testBasicUserRoleDatabase took 0.749 sec > >> Caused an ERROR > >> org/apache/derby/jdbc/EmbeddedDriver has been compiled by a more recent > >> version of the Java Runtime (class file version 61.0), this version of > >> the Java Runtime only recognizes class file versions up to 55.0 > >> java.lang.UnsupportedClassVersionError: > >> org/apache/derby/jdbc/EmbeddedDriver has been compiled by a more recent > >> version of the Java Runtime (class file version 61.0), this version of > >> the Java Runtime only recognizes class file versions up to 55.0 > >> at java.base/java.lang.ClassLoader.defineClass1(Native Method) > >> at > >> java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1022) > >> at > >> java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174) > >> at > >> java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:800) > >> at > >> java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:698) > >> at > >> java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:621) > >> at > >> java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:579) > >> at > >> java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) > >> at > >> java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:527) > >> at java.base/java.lang.Class.forName0(Native Method) > >> at java.base/java.lang.Class.forName(Class.java:315) > >> at > >> org.apache.catalina.users.TestDataSourceUserDatabase$DerbyUserDatabase.open(TestDataSourceUserDatabase.java:103) > >> at > >> org.apache.catalina.users.TestDataSourceUserDatabase.testBasicUserRoleDatabase(TestDataSourceUserDatabase.java:131) > >> at > >> java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native > >> Method) > >> at > >> java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) > >> at > >> java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > >> > >> and > >> > >> Testcase: testRealm took 1.298 sec > >> Caused an ERROR > >> org/apache/derby/jdbc/EmbeddedDriver has been compiled by a more recent > >> version of the Java Runtime (class file version 61.0), this version of > >> the Java Runtime only recognizes class file versions up to 55.0 > >> java.lang.UnsupportedClassVersionError: > >> org/apache/derby/jdbc/EmbeddedDriver has been compiled by a more recent > >> version of the Java Runtime (class file version 61.0), this version of > >> the Java Runtime only recognizes class file versions up to 55.0 > >> at java.base/java.lang.ClassLoader.defineClass1(Native Method) > >> at > >> java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1022) > >> at > >> java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174) > >> at > >> java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:800) > >> at > >> java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:698) > >> at > >> java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:621) > >> at > >> java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:579) > >> at > >> java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) > >> at > >> java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:527) > >> at java.base/java.lang.Class.forName0(Native Method) > >> at java.base/java.lang.Class.forName(Class.java:315) > >> at > >> org.apache.catalina.realm.TestDataSourceRealm$DerbyDataSourceRealm.open(TestDataSourceRealm.java:61) > >> at > >> org.apache.catalina.realm.TestDataSourceRealm.testRealm(TestDataSourceRealm.java:106) > >> at > >> java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native > >> Method) > >> at > >> java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) > >> at > >> java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > >> > >> > >> Best regards, > >> > >> Rainer > > --------------------------------------------------------------------- > To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org > For additional commands, e-mail: dev-h...@tomcat.apache.org > --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org