FYI, this tweak skips APR tests but I've also found that when running with an older version of tomcat-native (2.0.15 to be exact) NIO/2 fails with `UnsatisfiedLinkError: 'void org.apache.tomcat.jni.SSLContext.setOptionsLong(long, long)'`. I wanted to tweak the probe to check the min tomcat-native version; however, it's set to 1.3.something so any 2.x would pass. My testing pipeline didn't have those issues with 2.0.17 so I guess it's fine to leave it as is for now.
On Wed, Nov 11, 2026 at 3:23 PM csutherl.apache.org via dev < [email protected]> wrote: > This is an automated email from the ASF dual-hosted git repository. > > csutherl pushed a commit to branch 9.0.x > in repository https://gitbox.apache.org/repos/asf/tomcat.git > > > The following commit(s) were added to refs/heads/9.0.x by this push: > new 1e3ede1398 Skip APR connector tests when tomcat-native 2.x is > loaded > 1e3ede1398 is described below > > commit 1e3ede1398435db1f9efb6280524a843c684bdf9 > Author: Coty Sutherland <[email protected]> > AuthorDate: Wed Nov 11 14:51:06 2026 -0500 > > Skip APR connector tests when tomcat-native 2.x is loaded > > tomcat-native 2 does not support the APR/native connector, but the APR > test > target only checked for the native library location before running APR > connector > tests. As a result, APR tests could be run against tomcat-native 2.x > and fail > during connector initialization. > > Update the APR availability check to probe tomcat-native in an > APR-required > mode and only enable APR tests when a compatible tomcat-native 1.x > library is > present. The existing tomcat-native availability check remains > unchanged so > non-APR native/OpenSSL tests can still run with tomcat-native 2.x. > > Co-authored-by: ChatGPT <[email protected]> > --- > build.xml | 24 > ++++++++++++++++++++--- > test/org/apache/tomcat/jni/TesterLibraryLoad.java | 13 +++++++++++- > 2 files changed, 33 insertions(+), 4 deletions(-) > > diff --git a/build.xml b/build.xml > index 53d73256a6..29a2312583 100644 > --- a/build.xml > +++ b/build.xml > @@ -2130,9 +2130,24 @@ > extension=".APR" /> > </target> > > - <target name="test-apr-exists" description="Checks for APR lib" > + <target name="test-apr-exists" description="Checks for APR/native > connector support" > + depends="test-tcnative-probe-classes" > if="${execute.test.apr}"> > - <available file="${test.apr.loc}" property="apr.exists" /> > + <junit printsummary="no" fork="yes" showoutput="false" > haltonfailure="false" > + failureproperty="test.apr.error" logfailedtests="false"> > + <jvmarg value="${runtests.librarypath}"/> > + <jvmarg value="${native.nativeaccess}"/> > + <sysproperty key="tomcat.test.apr.required" value="true"/> > + <classpath refid="tomcat.test.classpath"/> > + <test name="org.apache.tomcat.jni.TesterLibraryLoad"/> > + </junit> > + > + <condition property="apr.exists"> > + <not> > + <isset property="test.apr.error"/> > + </not> > + </condition> > + <echo message="APR/native connector support is not available. APR > tests will be skipped." if:set="test.apr.error" level="warning"/> > </target> > > <target name="test-openssl-exists" description="Checks for the OpenSSL > binary"> > @@ -2152,7 +2167,7 @@ > <echo message="OpenSSL is not available. OpenSSL-related tests will > be skipped or may fail." level="warning" unless:set="test.openssl.exists"/> > </target> > > - <target name="test-tcnative-exists" description="Verifies tomcat-native > library can be loaded"> > + <target name="test-tcnative-probe-classes" description="Compiles > classes used to probe tomcat-native"> > <!-- Check if main classes are built --> > <available > file="${test.run.classes}/org/apache/tomcat/jni/Library.class" > property="tomcat.classes.available"/> > @@ -2180,7 +2195,10 @@ > <pathelement location="${junit.jar}"/> > </classpath> > </javac> > + </target> > > + <target name="test-tcnative-exists" description="Verifies tomcat-native > library can be loaded" > + depends="test-tcnative-probe-classes"> > <!-- Run test - it will check both test.apr.loc and system library > paths --> > <junit printsummary="no" fork="yes" showoutput="false" > haltonfailure="false" > failureproperty="test.tcnative.error" logfailedtests="false"> > diff --git a/test/org/apache/tomcat/jni/TesterLibraryLoad.java > b/test/org/apache/tomcat/jni/TesterLibraryLoad.java > index 26ab51c91e..5baff599f8 100644 > --- a/test/org/apache/tomcat/jni/TesterLibraryLoad.java > +++ b/test/org/apache/tomcat/jni/TesterLibraryLoad.java > @@ -26,12 +26,23 @@ public class TesterLibraryLoad { > > @Test > public void testLibraryLoads() throws Exception { > + boolean libraryInitialized = false; > try { > Library.initialize(null); > - Library.terminate(); > + libraryInitialized = true; > + if (Boolean.getBoolean("tomcat.test.apr.required")) { > + Assert.assertTrue( > + "The APR/native connector requires Tomcat Native > 1.x. Found Tomcat Native " + > + Library.versionString(), > + Library.TCN_MAJOR_VERSION < 2); > + } > } catch (LibraryNotFoundError e) { > // Library not available - fail test to set property > Assert.fail("Library not found"); > + } finally { > + if (libraryInitialized) { > + Library.terminate(); > + } > } > } > } > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [email protected] > For additional commands, e-mail: [email protected] > >
