You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2023/12/04 19:06:40 UTC

(tomcat) branch main updated: Refactor long running tests to improve parallelism

This is an automated email from the ASF dual-hosted git repository.

markt pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tomcat.git


The following commit(s) were added to refs/heads/main by this push:
     new c766eefed9 Refactor long running tests to improve parallelism
c766eefed9 is described below

commit c766eefed99cb7004f29468d1e5546eef2a5eae8
Author: Mark Thomas <ma...@apache.org>
AuthorDate: Mon Dec 4 19:06:26 2023 +0000

    Refactor long running tests to improve parallelism
---
 ...ons.java => DefaultServletOptionsBaseTest.java} | 17 ++++-------
 ...s.java => TestDefaultServletOptionsDELETE.java} | 34 +++-------------------
 ...ions.java => TestDefaultServletOptionsGET.java} | 34 +++-------------------
 ...ons.java => TestDefaultServletOptionsHEAD.java} | 34 +++-------------------
 ...ons.java => TestDefaultServletOptionsPOST.java} | 34 +++-------------------
 ...ions.java => TestDefaultServletOptionsPUT.java} | 34 +++-------------------
 ...ns.java => TestDefaultServletOptionsTRACE.java} | 34 +++-------------------
 ... => TestWebdavServletOptionCollectionCOPY.java} | 32 +++-----------------
 ...> TestWebdavServletOptionCollectionDELETE.java} | 32 +++-----------------
 ...a => TestWebdavServletOptionCollectionGET.java} | 32 +++-----------------
 ... => TestWebdavServletOptionCollectionHEAD.java} | 32 +++-----------------
 ... => TestWebdavServletOptionCollectionLOCK.java} | 32 +++-----------------
 ...=> TestWebdavServletOptionCollectionMKCOL.java} | 32 +++-----------------
 ... => TestWebdavServletOptionCollectionMOVE.java} | 32 +++-----------------
 ... => TestWebdavServletOptionCollectionPOST.java} | 32 +++-----------------
 ...TestWebdavServletOptionCollectionPROPFIND.java} | 32 +++-----------------
 ...estWebdavServletOptionCollectionPROPPATCH.java} | 32 +++-----------------
 ...a => TestWebdavServletOptionCollectionPUT.java} | 32 +++-----------------
 ...=> TestWebdavServletOptionCollectionTRACE.java} | 32 +++-----------------
 ...> TestWebdavServletOptionCollectionUNLOCK.java} | 32 +++-----------------
 ....java => TestWebdavServletOptionsFileCOPY.java} | 32 +++-----------------
 ...ava => TestWebdavServletOptionsFileDELETE.java} | 32 +++-----------------
 ...e.java => TestWebdavServletOptionsFileGET.java} | 32 +++-----------------
 ....java => TestWebdavServletOptionsFileHEAD.java} | 32 +++-----------------
 ....java => TestWebdavServletOptionsFileLOCK.java} | 32 +++-----------------
 ...java => TestWebdavServletOptionsFileMKCOL.java} | 32 +++-----------------
 ....java => TestWebdavServletOptionsFileMOVE.java} | 32 +++-----------------
 ....java => TestWebdavServletOptionsFilePOST.java} | 32 +++-----------------
 ...a => TestWebdavServletOptionsFilePROPFIND.java} | 32 +++-----------------
 ... => TestWebdavServletOptionsFilePROPPATCH.java} | 32 +++-----------------
 ...e.java => TestWebdavServletOptionsFilePUT.java} | 32 +++-----------------
 ...java => TestWebdavServletOptionsFileTRACE.java} | 32 +++-----------------
 ...ava => TestWebdavServletOptionsFileUNLOCK.java} | 32 +++-----------------
 ...va => TestWebdavServletOptionsUnknownCOPY.java} | 32 +++-----------------
 ... => TestWebdavServletOptionsUnknownDELETE.java} | 32 +++-----------------
 ...ava => TestWebdavServletOptionsUnknownGET.java} | 32 +++-----------------
 ...va => TestWebdavServletOptionsUnknownHEAD.java} | 32 +++-----------------
 ...va => TestWebdavServletOptionsUnknownLOCK.java} | 32 +++-----------------
 ...a => TestWebdavServletOptionsUnknownMKCOL.java} | 32 +++-----------------
 ...va => TestWebdavServletOptionsUnknownMOVE.java} | 32 +++-----------------
 ...va => TestWebdavServletOptionsUnknownPOST.java} | 32 +++-----------------
 ...> TestWebdavServletOptionsUnknownPROPFIND.java} | 32 +++-----------------
 ... TestWebdavServletOptionsUnknownPROPPATCH.java} | 32 +++-----------------
 ...ava => TestWebdavServletOptionsUnknownPUT.java} | 32 +++-----------------
 ...a => TestWebdavServletOptionsUnknownTRACE.java} | 32 +++-----------------
 ... => TestWebdavServletOptionsUnknownUNLOCK.java} | 32 +++-----------------
 ... => WebdavServletOptionBaseTestCollection.java} | 19 ++++--------
 ....java => WebdavServletOptionsBaseTestFile.java} | 19 ++++--------
 ...va => WebdavServletOptionsBaseTestUnknown.java} | 19 ++++--------
 49 files changed, 200 insertions(+), 1326 deletions(-)

diff --git a/test/org/apache/catalina/servlets/TestDefaultServletOptions.java b/test/org/apache/catalina/servlets/DefaultServletOptionsBaseTest.java
similarity index 70%
copy from test/org/apache/catalina/servlets/TestDefaultServletOptions.java
copy to test/org/apache/catalina/servlets/DefaultServletOptionsBaseTest.java
index b5fe61aaa9..e5a92d97dc 100644
--- a/test/org/apache/catalina/servlets/TestDefaultServletOptions.java
+++ b/test/org/apache/catalina/servlets/DefaultServletOptionsBaseTest.java
@@ -22,17 +22,13 @@ import java.util.List;
 
 import jakarta.servlet.Servlet;
 
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
-import org.junit.runners.Parameterized.Parameters;
+public abstract class DefaultServletOptionsBaseTest extends ServletOptionsBaseTest {
 
-@RunWith(Parameterized.class)
-public class TestDefaultServletOptions extends ServletOptionsBaseTest {
+    public static Collection<Object[]> inputs(Class<?> clazz) {
+
+        String method = clazz.getSimpleName().substring(clazz.getSuperclass().getSimpleName().length() - 4);
 
-    @Parameters
-    public static Collection<Object[]> inputs() {
         String[] urls = new String[] { COLLECTION_NAME, FILE_NAME, UNKNOWN_NAME };
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", "PUT", "DELETE" };
 
         List<Object[]> result = new ArrayList<>();
 
@@ -40,10 +36,7 @@ public class TestDefaultServletOptions extends ServletOptionsBaseTest {
             for (Boolean readOnlyValue : booleans) {
                 for (Boolean traceValue : booleans) {
                     for (String url : urls) {
-                        for (String method : methods) {
-                            result.add(new Object[] {
-                                    listingsValue, readOnlyValue, traceValue, url, method } );
-                        }
+                        result.add(new Object[] { listingsValue, readOnlyValue, traceValue, url, method });
                     }
                 }
             }
diff --git a/test/org/apache/catalina/servlets/TestDefaultServletOptions.java b/test/org/apache/catalina/servlets/TestDefaultServletOptionsDELETE.java
similarity index 52%
copy from test/org/apache/catalina/servlets/TestDefaultServletOptions.java
copy to test/org/apache/catalina/servlets/TestDefaultServletOptionsDELETE.java
index b5fe61aaa9..43f6e43e63 100644
--- a/test/org/apache/catalina/servlets/TestDefaultServletOptions.java
+++ b/test/org/apache/catalina/servlets/TestDefaultServletOptionsDELETE.java
@@ -16,45 +16,19 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
 import org.junit.runners.Parameterized.Parameters;
 
 @RunWith(Parameterized.class)
-public class TestDefaultServletOptions extends ServletOptionsBaseTest {
+public class TestDefaultServletOptionsDELETE extends DefaultServletOptionsBaseTest {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] urls = new String[] { COLLECTION_NAME, FILE_NAME, UNKNOWN_NAME };
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", "PUT", "DELETE" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String url : urls) {
-                        for (String method : methods) {
-                            result.add(new Object[] {
-                                    listingsValue, readOnlyValue, traceValue, url, method } );
-                        }
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new DefaultServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git a/test/org/apache/catalina/servlets/TestDefaultServletOptions.java b/test/org/apache/catalina/servlets/TestDefaultServletOptionsGET.java
similarity index 52%
copy from test/org/apache/catalina/servlets/TestDefaultServletOptions.java
copy to test/org/apache/catalina/servlets/TestDefaultServletOptionsGET.java
index b5fe61aaa9..61e94a5d45 100644
--- a/test/org/apache/catalina/servlets/TestDefaultServletOptions.java
+++ b/test/org/apache/catalina/servlets/TestDefaultServletOptionsGET.java
@@ -16,45 +16,19 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
 import org.junit.runners.Parameterized.Parameters;
 
 @RunWith(Parameterized.class)
-public class TestDefaultServletOptions extends ServletOptionsBaseTest {
+public class TestDefaultServletOptionsGET extends DefaultServletOptionsBaseTest {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] urls = new String[] { COLLECTION_NAME, FILE_NAME, UNKNOWN_NAME };
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", "PUT", "DELETE" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String url : urls) {
-                        for (String method : methods) {
-                            result.add(new Object[] {
-                                    listingsValue, readOnlyValue, traceValue, url, method } );
-                        }
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new DefaultServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git a/test/org/apache/catalina/servlets/TestDefaultServletOptions.java b/test/org/apache/catalina/servlets/TestDefaultServletOptionsHEAD.java
similarity index 52%
copy from test/org/apache/catalina/servlets/TestDefaultServletOptions.java
copy to test/org/apache/catalina/servlets/TestDefaultServletOptionsHEAD.java
index b5fe61aaa9..33e44c2d1f 100644
--- a/test/org/apache/catalina/servlets/TestDefaultServletOptions.java
+++ b/test/org/apache/catalina/servlets/TestDefaultServletOptionsHEAD.java
@@ -16,45 +16,19 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
 import org.junit.runners.Parameterized.Parameters;
 
 @RunWith(Parameterized.class)
-public class TestDefaultServletOptions extends ServletOptionsBaseTest {
+public class TestDefaultServletOptionsHEAD extends DefaultServletOptionsBaseTest {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] urls = new String[] { COLLECTION_NAME, FILE_NAME, UNKNOWN_NAME };
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", "PUT", "DELETE" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String url : urls) {
-                        for (String method : methods) {
-                            result.add(new Object[] {
-                                    listingsValue, readOnlyValue, traceValue, url, method } );
-                        }
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new DefaultServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git a/test/org/apache/catalina/servlets/TestDefaultServletOptions.java b/test/org/apache/catalina/servlets/TestDefaultServletOptionsPOST.java
similarity index 52%
copy from test/org/apache/catalina/servlets/TestDefaultServletOptions.java
copy to test/org/apache/catalina/servlets/TestDefaultServletOptionsPOST.java
index b5fe61aaa9..59a7c98a11 100644
--- a/test/org/apache/catalina/servlets/TestDefaultServletOptions.java
+++ b/test/org/apache/catalina/servlets/TestDefaultServletOptionsPOST.java
@@ -16,45 +16,19 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
 import org.junit.runners.Parameterized.Parameters;
 
 @RunWith(Parameterized.class)
-public class TestDefaultServletOptions extends ServletOptionsBaseTest {
+public class TestDefaultServletOptionsPOST extends DefaultServletOptionsBaseTest {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] urls = new String[] { COLLECTION_NAME, FILE_NAME, UNKNOWN_NAME };
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", "PUT", "DELETE" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String url : urls) {
-                        for (String method : methods) {
-                            result.add(new Object[] {
-                                    listingsValue, readOnlyValue, traceValue, url, method } );
-                        }
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new DefaultServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git a/test/org/apache/catalina/servlets/TestDefaultServletOptions.java b/test/org/apache/catalina/servlets/TestDefaultServletOptionsPUT.java
similarity index 52%
copy from test/org/apache/catalina/servlets/TestDefaultServletOptions.java
copy to test/org/apache/catalina/servlets/TestDefaultServletOptionsPUT.java
index b5fe61aaa9..71f6412ea3 100644
--- a/test/org/apache/catalina/servlets/TestDefaultServletOptions.java
+++ b/test/org/apache/catalina/servlets/TestDefaultServletOptionsPUT.java
@@ -16,45 +16,19 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
 import org.junit.runners.Parameterized.Parameters;
 
 @RunWith(Parameterized.class)
-public class TestDefaultServletOptions extends ServletOptionsBaseTest {
+public class TestDefaultServletOptionsPUT extends DefaultServletOptionsBaseTest {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] urls = new String[] { COLLECTION_NAME, FILE_NAME, UNKNOWN_NAME };
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", "PUT", "DELETE" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String url : urls) {
-                        for (String method : methods) {
-                            result.add(new Object[] {
-                                    listingsValue, readOnlyValue, traceValue, url, method } );
-                        }
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new DefaultServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git a/test/org/apache/catalina/servlets/TestDefaultServletOptions.java b/test/org/apache/catalina/servlets/TestDefaultServletOptionsTRACE.java
similarity index 52%
rename from test/org/apache/catalina/servlets/TestDefaultServletOptions.java
rename to test/org/apache/catalina/servlets/TestDefaultServletOptionsTRACE.java
index b5fe61aaa9..3a20bed6c2 100644
--- a/test/org/apache/catalina/servlets/TestDefaultServletOptions.java
+++ b/test/org/apache/catalina/servlets/TestDefaultServletOptionsTRACE.java
@@ -16,45 +16,19 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
 import org.junit.runners.Parameterized.Parameters;
 
 @RunWith(Parameterized.class)
-public class TestDefaultServletOptions extends ServletOptionsBaseTest {
+public class TestDefaultServletOptionsTRACE extends DefaultServletOptionsBaseTest {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] urls = new String[] { COLLECTION_NAME, FILE_NAME, UNKNOWN_NAME };
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", "PUT", "DELETE" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String url : urls) {
-                        for (String method : methods) {
-                            result.add(new Object[] {
-                                    listingsValue, readOnlyValue, traceValue, url, method } );
-                        }
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new DefaultServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java b/test/org/apache/catalina/servlets/TestWebdavServletOptionCollectionCOPY.java
similarity index 56%
copy from test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
copy to test/org/apache/catalina/servlets/TestWebdavServletOptionCollectionCOPY.java
index 7085c7bf7c..15265dafb2 100644
--- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
+++ b/test/org/apache/catalina/servlets/TestWebdavServletOptionCollectionCOPY.java
@@ -16,11 +16,8 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -31,32 +28,11 @@ import org.junit.runners.Parameterized.Parameters;
  * of an entire test run.
  */
 @RunWith(Parameterized.class)
-public class TestWebdavServletOptionsFile extends ServletOptionsBaseTest {
+public class TestWebdavServletOptionCollectionCOPY extends WebdavServletOptionBaseTestCollection {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", "PUT", "DELETE",
-                "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", "PROPPATCH" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String method : methods) {
-                        result.add(new Object[] {
-                                listingsValue, readOnlyValue, traceValue, FILE_NAME, method } );
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new WebdavServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java b/test/org/apache/catalina/servlets/TestWebdavServletOptionCollectionDELETE.java
similarity index 56%
copy from test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
copy to test/org/apache/catalina/servlets/TestWebdavServletOptionCollectionDELETE.java
index 7085c7bf7c..eb1a7bd61a 100644
--- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
+++ b/test/org/apache/catalina/servlets/TestWebdavServletOptionCollectionDELETE.java
@@ -16,11 +16,8 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -31,32 +28,11 @@ import org.junit.runners.Parameterized.Parameters;
  * of an entire test run.
  */
 @RunWith(Parameterized.class)
-public class TestWebdavServletOptionsFile extends ServletOptionsBaseTest {
+public class TestWebdavServletOptionCollectionDELETE extends WebdavServletOptionBaseTestCollection {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", "PUT", "DELETE",
-                "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", "PROPPATCH" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String method : methods) {
-                        result.add(new Object[] {
-                                listingsValue, readOnlyValue, traceValue, FILE_NAME, method } );
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new WebdavServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java b/test/org/apache/catalina/servlets/TestWebdavServletOptionCollectionGET.java
similarity index 56%
copy from test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
copy to test/org/apache/catalina/servlets/TestWebdavServletOptionCollectionGET.java
index 7085c7bf7c..9df9a0d873 100644
--- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
+++ b/test/org/apache/catalina/servlets/TestWebdavServletOptionCollectionGET.java
@@ -16,11 +16,8 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -31,32 +28,11 @@ import org.junit.runners.Parameterized.Parameters;
  * of an entire test run.
  */
 @RunWith(Parameterized.class)
-public class TestWebdavServletOptionsFile extends ServletOptionsBaseTest {
+public class TestWebdavServletOptionCollectionGET extends WebdavServletOptionBaseTestCollection {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", "PUT", "DELETE",
-                "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", "PROPPATCH" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String method : methods) {
-                        result.add(new Object[] {
-                                listingsValue, readOnlyValue, traceValue, FILE_NAME, method } );
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new WebdavServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java b/test/org/apache/catalina/servlets/TestWebdavServletOptionCollectionHEAD.java
similarity index 56%
copy from test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
copy to test/org/apache/catalina/servlets/TestWebdavServletOptionCollectionHEAD.java
index 7085c7bf7c..812276879a 100644
--- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
+++ b/test/org/apache/catalina/servlets/TestWebdavServletOptionCollectionHEAD.java
@@ -16,11 +16,8 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -31,32 +28,11 @@ import org.junit.runners.Parameterized.Parameters;
  * of an entire test run.
  */
 @RunWith(Parameterized.class)
-public class TestWebdavServletOptionsFile extends ServletOptionsBaseTest {
+public class TestWebdavServletOptionCollectionHEAD extends WebdavServletOptionBaseTestCollection {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", "PUT", "DELETE",
-                "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", "PROPPATCH" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String method : methods) {
-                        result.add(new Object[] {
-                                listingsValue, readOnlyValue, traceValue, FILE_NAME, method } );
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new WebdavServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java b/test/org/apache/catalina/servlets/TestWebdavServletOptionCollectionLOCK.java
similarity index 56%
copy from test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
copy to test/org/apache/catalina/servlets/TestWebdavServletOptionCollectionLOCK.java
index 7085c7bf7c..2157d1c891 100644
--- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
+++ b/test/org/apache/catalina/servlets/TestWebdavServletOptionCollectionLOCK.java
@@ -16,11 +16,8 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -31,32 +28,11 @@ import org.junit.runners.Parameterized.Parameters;
  * of an entire test run.
  */
 @RunWith(Parameterized.class)
-public class TestWebdavServletOptionsFile extends ServletOptionsBaseTest {
+public class TestWebdavServletOptionCollectionLOCK extends WebdavServletOptionBaseTestCollection {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", "PUT", "DELETE",
-                "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", "PROPPATCH" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String method : methods) {
-                        result.add(new Object[] {
-                                listingsValue, readOnlyValue, traceValue, FILE_NAME, method } );
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new WebdavServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java b/test/org/apache/catalina/servlets/TestWebdavServletOptionCollectionMKCOL.java
similarity index 56%
copy from test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
copy to test/org/apache/catalina/servlets/TestWebdavServletOptionCollectionMKCOL.java
index 7085c7bf7c..475602a28e 100644
--- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
+++ b/test/org/apache/catalina/servlets/TestWebdavServletOptionCollectionMKCOL.java
@@ -16,11 +16,8 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -31,32 +28,11 @@ import org.junit.runners.Parameterized.Parameters;
  * of an entire test run.
  */
 @RunWith(Parameterized.class)
-public class TestWebdavServletOptionsFile extends ServletOptionsBaseTest {
+public class TestWebdavServletOptionCollectionMKCOL extends WebdavServletOptionBaseTestCollection {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", "PUT", "DELETE",
-                "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", "PROPPATCH" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String method : methods) {
-                        result.add(new Object[] {
-                                listingsValue, readOnlyValue, traceValue, FILE_NAME, method } );
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new WebdavServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java b/test/org/apache/catalina/servlets/TestWebdavServletOptionCollectionMOVE.java
similarity index 56%
copy from test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
copy to test/org/apache/catalina/servlets/TestWebdavServletOptionCollectionMOVE.java
index 7085c7bf7c..f2e21e76c4 100644
--- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
+++ b/test/org/apache/catalina/servlets/TestWebdavServletOptionCollectionMOVE.java
@@ -16,11 +16,8 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -31,32 +28,11 @@ import org.junit.runners.Parameterized.Parameters;
  * of an entire test run.
  */
 @RunWith(Parameterized.class)
-public class TestWebdavServletOptionsFile extends ServletOptionsBaseTest {
+public class TestWebdavServletOptionCollectionMOVE extends WebdavServletOptionBaseTestCollection {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", "PUT", "DELETE",
-                "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", "PROPPATCH" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String method : methods) {
-                        result.add(new Object[] {
-                                listingsValue, readOnlyValue, traceValue, FILE_NAME, method } );
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new WebdavServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java b/test/org/apache/catalina/servlets/TestWebdavServletOptionCollectionPOST.java
similarity index 56%
copy from test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
copy to test/org/apache/catalina/servlets/TestWebdavServletOptionCollectionPOST.java
index 7085c7bf7c..6f564d1800 100644
--- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
+++ b/test/org/apache/catalina/servlets/TestWebdavServletOptionCollectionPOST.java
@@ -16,11 +16,8 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -31,32 +28,11 @@ import org.junit.runners.Parameterized.Parameters;
  * of an entire test run.
  */
 @RunWith(Parameterized.class)
-public class TestWebdavServletOptionsFile extends ServletOptionsBaseTest {
+public class TestWebdavServletOptionCollectionPOST extends WebdavServletOptionBaseTestCollection {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", "PUT", "DELETE",
-                "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", "PROPPATCH" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String method : methods) {
-                        result.add(new Object[] {
-                                listingsValue, readOnlyValue, traceValue, FILE_NAME, method } );
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new WebdavServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java b/test/org/apache/catalina/servlets/TestWebdavServletOptionCollectionPROPFIND.java
similarity index 56%
copy from test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
copy to test/org/apache/catalina/servlets/TestWebdavServletOptionCollectionPROPFIND.java
index 7085c7bf7c..e18959c66a 100644
--- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
+++ b/test/org/apache/catalina/servlets/TestWebdavServletOptionCollectionPROPFIND.java
@@ -16,11 +16,8 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -31,32 +28,11 @@ import org.junit.runners.Parameterized.Parameters;
  * of an entire test run.
  */
 @RunWith(Parameterized.class)
-public class TestWebdavServletOptionsFile extends ServletOptionsBaseTest {
+public class TestWebdavServletOptionCollectionPROPFIND extends WebdavServletOptionBaseTestCollection {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", "PUT", "DELETE",
-                "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", "PROPPATCH" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String method : methods) {
-                        result.add(new Object[] {
-                                listingsValue, readOnlyValue, traceValue, FILE_NAME, method } );
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new WebdavServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java b/test/org/apache/catalina/servlets/TestWebdavServletOptionCollectionPROPPATCH.java
similarity index 56%
copy from test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
copy to test/org/apache/catalina/servlets/TestWebdavServletOptionCollectionPROPPATCH.java
index 7085c7bf7c..56e47315cf 100644
--- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
+++ b/test/org/apache/catalina/servlets/TestWebdavServletOptionCollectionPROPPATCH.java
@@ -16,11 +16,8 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -31,32 +28,11 @@ import org.junit.runners.Parameterized.Parameters;
  * of an entire test run.
  */
 @RunWith(Parameterized.class)
-public class TestWebdavServletOptionsFile extends ServletOptionsBaseTest {
+public class TestWebdavServletOptionCollectionPROPPATCH extends WebdavServletOptionBaseTestCollection {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", "PUT", "DELETE",
-                "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", "PROPPATCH" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String method : methods) {
-                        result.add(new Object[] {
-                                listingsValue, readOnlyValue, traceValue, FILE_NAME, method } );
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new WebdavServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java b/test/org/apache/catalina/servlets/TestWebdavServletOptionCollectionPUT.java
similarity index 56%
copy from test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
copy to test/org/apache/catalina/servlets/TestWebdavServletOptionCollectionPUT.java
index 7085c7bf7c..04abe51e88 100644
--- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
+++ b/test/org/apache/catalina/servlets/TestWebdavServletOptionCollectionPUT.java
@@ -16,11 +16,8 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -31,32 +28,11 @@ import org.junit.runners.Parameterized.Parameters;
  * of an entire test run.
  */
 @RunWith(Parameterized.class)
-public class TestWebdavServletOptionsFile extends ServletOptionsBaseTest {
+public class TestWebdavServletOptionCollectionPUT extends WebdavServletOptionBaseTestCollection {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", "PUT", "DELETE",
-                "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", "PROPPATCH" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String method : methods) {
-                        result.add(new Object[] {
-                                listingsValue, readOnlyValue, traceValue, FILE_NAME, method } );
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new WebdavServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java b/test/org/apache/catalina/servlets/TestWebdavServletOptionCollectionTRACE.java
similarity index 56%
copy from test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
copy to test/org/apache/catalina/servlets/TestWebdavServletOptionCollectionTRACE.java
index 7085c7bf7c..12b6583659 100644
--- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
+++ b/test/org/apache/catalina/servlets/TestWebdavServletOptionCollectionTRACE.java
@@ -16,11 +16,8 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -31,32 +28,11 @@ import org.junit.runners.Parameterized.Parameters;
  * of an entire test run.
  */
 @RunWith(Parameterized.class)
-public class TestWebdavServletOptionsFile extends ServletOptionsBaseTest {
+public class TestWebdavServletOptionCollectionTRACE extends WebdavServletOptionBaseTestCollection {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", "PUT", "DELETE",
-                "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", "PROPPATCH" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String method : methods) {
-                        result.add(new Object[] {
-                                listingsValue, readOnlyValue, traceValue, FILE_NAME, method } );
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new WebdavServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java b/test/org/apache/catalina/servlets/TestWebdavServletOptionCollectionUNLOCK.java
similarity index 56%
copy from test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
copy to test/org/apache/catalina/servlets/TestWebdavServletOptionCollectionUNLOCK.java
index 7085c7bf7c..060a625c00 100644
--- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
+++ b/test/org/apache/catalina/servlets/TestWebdavServletOptionCollectionUNLOCK.java
@@ -16,11 +16,8 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -31,32 +28,11 @@ import org.junit.runners.Parameterized.Parameters;
  * of an entire test run.
  */
 @RunWith(Parameterized.class)
-public class TestWebdavServletOptionsFile extends ServletOptionsBaseTest {
+public class TestWebdavServletOptionCollectionUNLOCK extends WebdavServletOptionBaseTestCollection {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", "PUT", "DELETE",
-                "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", "PROPPATCH" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String method : methods) {
-                        result.add(new Object[] {
-                                listingsValue, readOnlyValue, traceValue, FILE_NAME, method } );
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new WebdavServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java b/test/org/apache/catalina/servlets/TestWebdavServletOptionsFileCOPY.java
similarity index 56%
copy from test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
copy to test/org/apache/catalina/servlets/TestWebdavServletOptionsFileCOPY.java
index 7085c7bf7c..f449aa611c 100644
--- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
+++ b/test/org/apache/catalina/servlets/TestWebdavServletOptionsFileCOPY.java
@@ -16,11 +16,8 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -31,32 +28,11 @@ import org.junit.runners.Parameterized.Parameters;
  * of an entire test run.
  */
 @RunWith(Parameterized.class)
-public class TestWebdavServletOptionsFile extends ServletOptionsBaseTest {
+public class TestWebdavServletOptionsFileCOPY extends WebdavServletOptionsBaseTestFile {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", "PUT", "DELETE",
-                "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", "PROPPATCH" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String method : methods) {
-                        result.add(new Object[] {
-                                listingsValue, readOnlyValue, traceValue, FILE_NAME, method } );
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new WebdavServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java b/test/org/apache/catalina/servlets/TestWebdavServletOptionsFileDELETE.java
similarity index 56%
copy from test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
copy to test/org/apache/catalina/servlets/TestWebdavServletOptionsFileDELETE.java
index 7085c7bf7c..17eada5362 100644
--- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
+++ b/test/org/apache/catalina/servlets/TestWebdavServletOptionsFileDELETE.java
@@ -16,11 +16,8 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -31,32 +28,11 @@ import org.junit.runners.Parameterized.Parameters;
  * of an entire test run.
  */
 @RunWith(Parameterized.class)
-public class TestWebdavServletOptionsFile extends ServletOptionsBaseTest {
+public class TestWebdavServletOptionsFileDELETE extends WebdavServletOptionsBaseTestFile {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", "PUT", "DELETE",
-                "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", "PROPPATCH" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String method : methods) {
-                        result.add(new Object[] {
-                                listingsValue, readOnlyValue, traceValue, FILE_NAME, method } );
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new WebdavServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java b/test/org/apache/catalina/servlets/TestWebdavServletOptionsFileGET.java
similarity index 56%
copy from test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
copy to test/org/apache/catalina/servlets/TestWebdavServletOptionsFileGET.java
index 7085c7bf7c..047df6aa6a 100644
--- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
+++ b/test/org/apache/catalina/servlets/TestWebdavServletOptionsFileGET.java
@@ -16,11 +16,8 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -31,32 +28,11 @@ import org.junit.runners.Parameterized.Parameters;
  * of an entire test run.
  */
 @RunWith(Parameterized.class)
-public class TestWebdavServletOptionsFile extends ServletOptionsBaseTest {
+public class TestWebdavServletOptionsFileGET extends WebdavServletOptionsBaseTestFile {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", "PUT", "DELETE",
-                "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", "PROPPATCH" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String method : methods) {
-                        result.add(new Object[] {
-                                listingsValue, readOnlyValue, traceValue, FILE_NAME, method } );
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new WebdavServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java b/test/org/apache/catalina/servlets/TestWebdavServletOptionsFileHEAD.java
similarity index 56%
copy from test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
copy to test/org/apache/catalina/servlets/TestWebdavServletOptionsFileHEAD.java
index 7085c7bf7c..8b1e150a14 100644
--- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
+++ b/test/org/apache/catalina/servlets/TestWebdavServletOptionsFileHEAD.java
@@ -16,11 +16,8 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -31,32 +28,11 @@ import org.junit.runners.Parameterized.Parameters;
  * of an entire test run.
  */
 @RunWith(Parameterized.class)
-public class TestWebdavServletOptionsFile extends ServletOptionsBaseTest {
+public class TestWebdavServletOptionsFileHEAD extends WebdavServletOptionsBaseTestFile {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", "PUT", "DELETE",
-                "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", "PROPPATCH" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String method : methods) {
-                        result.add(new Object[] {
-                                listingsValue, readOnlyValue, traceValue, FILE_NAME, method } );
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new WebdavServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java b/test/org/apache/catalina/servlets/TestWebdavServletOptionsFileLOCK.java
similarity index 56%
copy from test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
copy to test/org/apache/catalina/servlets/TestWebdavServletOptionsFileLOCK.java
index 7085c7bf7c..3c7d98c740 100644
--- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
+++ b/test/org/apache/catalina/servlets/TestWebdavServletOptionsFileLOCK.java
@@ -16,11 +16,8 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -31,32 +28,11 @@ import org.junit.runners.Parameterized.Parameters;
  * of an entire test run.
  */
 @RunWith(Parameterized.class)
-public class TestWebdavServletOptionsFile extends ServletOptionsBaseTest {
+public class TestWebdavServletOptionsFileLOCK extends WebdavServletOptionsBaseTestFile {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", "PUT", "DELETE",
-                "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", "PROPPATCH" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String method : methods) {
-                        result.add(new Object[] {
-                                listingsValue, readOnlyValue, traceValue, FILE_NAME, method } );
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new WebdavServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java b/test/org/apache/catalina/servlets/TestWebdavServletOptionsFileMKCOL.java
similarity index 56%
copy from test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
copy to test/org/apache/catalina/servlets/TestWebdavServletOptionsFileMKCOL.java
index 7085c7bf7c..37b76e2075 100644
--- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
+++ b/test/org/apache/catalina/servlets/TestWebdavServletOptionsFileMKCOL.java
@@ -16,11 +16,8 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -31,32 +28,11 @@ import org.junit.runners.Parameterized.Parameters;
  * of an entire test run.
  */
 @RunWith(Parameterized.class)
-public class TestWebdavServletOptionsFile extends ServletOptionsBaseTest {
+public class TestWebdavServletOptionsFileMKCOL extends WebdavServletOptionsBaseTestFile {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", "PUT", "DELETE",
-                "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", "PROPPATCH" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String method : methods) {
-                        result.add(new Object[] {
-                                listingsValue, readOnlyValue, traceValue, FILE_NAME, method } );
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new WebdavServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java b/test/org/apache/catalina/servlets/TestWebdavServletOptionsFileMOVE.java
similarity index 56%
copy from test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
copy to test/org/apache/catalina/servlets/TestWebdavServletOptionsFileMOVE.java
index 7085c7bf7c..df4007f655 100644
--- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
+++ b/test/org/apache/catalina/servlets/TestWebdavServletOptionsFileMOVE.java
@@ -16,11 +16,8 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -31,32 +28,11 @@ import org.junit.runners.Parameterized.Parameters;
  * of an entire test run.
  */
 @RunWith(Parameterized.class)
-public class TestWebdavServletOptionsFile extends ServletOptionsBaseTest {
+public class TestWebdavServletOptionsFileMOVE extends WebdavServletOptionsBaseTestFile {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", "PUT", "DELETE",
-                "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", "PROPPATCH" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String method : methods) {
-                        result.add(new Object[] {
-                                listingsValue, readOnlyValue, traceValue, FILE_NAME, method } );
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new WebdavServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java b/test/org/apache/catalina/servlets/TestWebdavServletOptionsFilePOST.java
similarity index 56%
copy from test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
copy to test/org/apache/catalina/servlets/TestWebdavServletOptionsFilePOST.java
index 7085c7bf7c..dd664d5cd4 100644
--- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
+++ b/test/org/apache/catalina/servlets/TestWebdavServletOptionsFilePOST.java
@@ -16,11 +16,8 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -31,32 +28,11 @@ import org.junit.runners.Parameterized.Parameters;
  * of an entire test run.
  */
 @RunWith(Parameterized.class)
-public class TestWebdavServletOptionsFile extends ServletOptionsBaseTest {
+public class TestWebdavServletOptionsFilePOST extends WebdavServletOptionsBaseTestFile {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", "PUT", "DELETE",
-                "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", "PROPPATCH" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String method : methods) {
-                        result.add(new Object[] {
-                                listingsValue, readOnlyValue, traceValue, FILE_NAME, method } );
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new WebdavServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java b/test/org/apache/catalina/servlets/TestWebdavServletOptionsFilePROPFIND.java
similarity index 56%
copy from test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
copy to test/org/apache/catalina/servlets/TestWebdavServletOptionsFilePROPFIND.java
index 7085c7bf7c..3399aa83ad 100644
--- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
+++ b/test/org/apache/catalina/servlets/TestWebdavServletOptionsFilePROPFIND.java
@@ -16,11 +16,8 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -31,32 +28,11 @@ import org.junit.runners.Parameterized.Parameters;
  * of an entire test run.
  */
 @RunWith(Parameterized.class)
-public class TestWebdavServletOptionsFile extends ServletOptionsBaseTest {
+public class TestWebdavServletOptionsFilePROPFIND extends WebdavServletOptionsBaseTestFile {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", "PUT", "DELETE",
-                "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", "PROPPATCH" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String method : methods) {
-                        result.add(new Object[] {
-                                listingsValue, readOnlyValue, traceValue, FILE_NAME, method } );
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new WebdavServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java b/test/org/apache/catalina/servlets/TestWebdavServletOptionsFilePROPPATCH.java
similarity index 56%
copy from test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
copy to test/org/apache/catalina/servlets/TestWebdavServletOptionsFilePROPPATCH.java
index 7085c7bf7c..68e14cfeac 100644
--- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
+++ b/test/org/apache/catalina/servlets/TestWebdavServletOptionsFilePROPPATCH.java
@@ -16,11 +16,8 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -31,32 +28,11 @@ import org.junit.runners.Parameterized.Parameters;
  * of an entire test run.
  */
 @RunWith(Parameterized.class)
-public class TestWebdavServletOptionsFile extends ServletOptionsBaseTest {
+public class TestWebdavServletOptionsFilePROPPATCH extends WebdavServletOptionsBaseTestFile {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", "PUT", "DELETE",
-                "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", "PROPPATCH" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String method : methods) {
-                        result.add(new Object[] {
-                                listingsValue, readOnlyValue, traceValue, FILE_NAME, method } );
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new WebdavServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java b/test/org/apache/catalina/servlets/TestWebdavServletOptionsFilePUT.java
similarity index 56%
copy from test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
copy to test/org/apache/catalina/servlets/TestWebdavServletOptionsFilePUT.java
index 7085c7bf7c..5b7814c89f 100644
--- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
+++ b/test/org/apache/catalina/servlets/TestWebdavServletOptionsFilePUT.java
@@ -16,11 +16,8 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -31,32 +28,11 @@ import org.junit.runners.Parameterized.Parameters;
  * of an entire test run.
  */
 @RunWith(Parameterized.class)
-public class TestWebdavServletOptionsFile extends ServletOptionsBaseTest {
+public class TestWebdavServletOptionsFilePUT extends WebdavServletOptionsBaseTestFile {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", "PUT", "DELETE",
-                "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", "PROPPATCH" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String method : methods) {
-                        result.add(new Object[] {
-                                listingsValue, readOnlyValue, traceValue, FILE_NAME, method } );
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new WebdavServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java b/test/org/apache/catalina/servlets/TestWebdavServletOptionsFileTRACE.java
similarity index 56%
copy from test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
copy to test/org/apache/catalina/servlets/TestWebdavServletOptionsFileTRACE.java
index 7085c7bf7c..24a76b6658 100644
--- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
+++ b/test/org/apache/catalina/servlets/TestWebdavServletOptionsFileTRACE.java
@@ -16,11 +16,8 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -31,32 +28,11 @@ import org.junit.runners.Parameterized.Parameters;
  * of an entire test run.
  */
 @RunWith(Parameterized.class)
-public class TestWebdavServletOptionsFile extends ServletOptionsBaseTest {
+public class TestWebdavServletOptionsFileTRACE extends WebdavServletOptionsBaseTestFile {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", "PUT", "DELETE",
-                "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", "PROPPATCH" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String method : methods) {
-                        result.add(new Object[] {
-                                listingsValue, readOnlyValue, traceValue, FILE_NAME, method } );
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new WebdavServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java b/test/org/apache/catalina/servlets/TestWebdavServletOptionsFileUNLOCK.java
similarity index 56%
copy from test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
copy to test/org/apache/catalina/servlets/TestWebdavServletOptionsFileUNLOCK.java
index 7085c7bf7c..d94f3faf55 100644
--- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
+++ b/test/org/apache/catalina/servlets/TestWebdavServletOptionsFileUNLOCK.java
@@ -16,11 +16,8 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -31,32 +28,11 @@ import org.junit.runners.Parameterized.Parameters;
  * of an entire test run.
  */
 @RunWith(Parameterized.class)
-public class TestWebdavServletOptionsFile extends ServletOptionsBaseTest {
+public class TestWebdavServletOptionsFileUNLOCK extends WebdavServletOptionsBaseTestFile {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", "PUT", "DELETE",
-                "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", "PROPPATCH" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String method : methods) {
-                        result.add(new Object[] {
-                                listingsValue, readOnlyValue, traceValue, FILE_NAME, method } );
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new WebdavServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java b/test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknownCOPY.java
similarity index 56%
copy from test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
copy to test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknownCOPY.java
index 7085c7bf7c..633bf55096 100644
--- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
+++ b/test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknownCOPY.java
@@ -16,11 +16,8 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -31,32 +28,11 @@ import org.junit.runners.Parameterized.Parameters;
  * of an entire test run.
  */
 @RunWith(Parameterized.class)
-public class TestWebdavServletOptionsFile extends ServletOptionsBaseTest {
+public class TestWebdavServletOptionsUnknownCOPY extends WebdavServletOptionsBaseTestUnknown {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", "PUT", "DELETE",
-                "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", "PROPPATCH" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String method : methods) {
-                        result.add(new Object[] {
-                                listingsValue, readOnlyValue, traceValue, FILE_NAME, method } );
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new WebdavServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java b/test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknownDELETE.java
similarity index 56%
copy from test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
copy to test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknownDELETE.java
index 7085c7bf7c..dc8cf33162 100644
--- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
+++ b/test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknownDELETE.java
@@ -16,11 +16,8 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -31,32 +28,11 @@ import org.junit.runners.Parameterized.Parameters;
  * of an entire test run.
  */
 @RunWith(Parameterized.class)
-public class TestWebdavServletOptionsFile extends ServletOptionsBaseTest {
+public class TestWebdavServletOptionsUnknownDELETE extends WebdavServletOptionsBaseTestUnknown {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", "PUT", "DELETE",
-                "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", "PROPPATCH" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String method : methods) {
-                        result.add(new Object[] {
-                                listingsValue, readOnlyValue, traceValue, FILE_NAME, method } );
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new WebdavServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java b/test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknownGET.java
similarity index 56%
copy from test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
copy to test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknownGET.java
index 7085c7bf7c..fb0c0faefb 100644
--- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
+++ b/test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknownGET.java
@@ -16,11 +16,8 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -31,32 +28,11 @@ import org.junit.runners.Parameterized.Parameters;
  * of an entire test run.
  */
 @RunWith(Parameterized.class)
-public class TestWebdavServletOptionsFile extends ServletOptionsBaseTest {
+public class TestWebdavServletOptionsUnknownGET extends WebdavServletOptionsBaseTestUnknown {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", "PUT", "DELETE",
-                "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", "PROPPATCH" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String method : methods) {
-                        result.add(new Object[] {
-                                listingsValue, readOnlyValue, traceValue, FILE_NAME, method } );
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new WebdavServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java b/test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknownHEAD.java
similarity index 56%
copy from test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
copy to test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknownHEAD.java
index 7085c7bf7c..3d6b27b0a5 100644
--- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
+++ b/test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknownHEAD.java
@@ -16,11 +16,8 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -31,32 +28,11 @@ import org.junit.runners.Parameterized.Parameters;
  * of an entire test run.
  */
 @RunWith(Parameterized.class)
-public class TestWebdavServletOptionsFile extends ServletOptionsBaseTest {
+public class TestWebdavServletOptionsUnknownHEAD extends WebdavServletOptionsBaseTestUnknown {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", "PUT", "DELETE",
-                "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", "PROPPATCH" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String method : methods) {
-                        result.add(new Object[] {
-                                listingsValue, readOnlyValue, traceValue, FILE_NAME, method } );
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new WebdavServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java b/test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknownLOCK.java
similarity index 56%
copy from test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
copy to test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknownLOCK.java
index 7085c7bf7c..43f4d71682 100644
--- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
+++ b/test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknownLOCK.java
@@ -16,11 +16,8 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -31,32 +28,11 @@ import org.junit.runners.Parameterized.Parameters;
  * of an entire test run.
  */
 @RunWith(Parameterized.class)
-public class TestWebdavServletOptionsFile extends ServletOptionsBaseTest {
+public class TestWebdavServletOptionsUnknownLOCK extends WebdavServletOptionsBaseTestUnknown {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", "PUT", "DELETE",
-                "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", "PROPPATCH" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String method : methods) {
-                        result.add(new Object[] {
-                                listingsValue, readOnlyValue, traceValue, FILE_NAME, method } );
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new WebdavServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java b/test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknownMKCOL.java
similarity index 56%
copy from test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
copy to test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknownMKCOL.java
index 7085c7bf7c..76bb1dc55d 100644
--- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
+++ b/test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknownMKCOL.java
@@ -16,11 +16,8 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -31,32 +28,11 @@ import org.junit.runners.Parameterized.Parameters;
  * of an entire test run.
  */
 @RunWith(Parameterized.class)
-public class TestWebdavServletOptionsFile extends ServletOptionsBaseTest {
+public class TestWebdavServletOptionsUnknownMKCOL extends WebdavServletOptionsBaseTestUnknown {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", "PUT", "DELETE",
-                "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", "PROPPATCH" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String method : methods) {
-                        result.add(new Object[] {
-                                listingsValue, readOnlyValue, traceValue, FILE_NAME, method } );
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new WebdavServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java b/test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknownMOVE.java
similarity index 56%
copy from test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
copy to test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknownMOVE.java
index 7085c7bf7c..2aaf94a859 100644
--- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
+++ b/test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknownMOVE.java
@@ -16,11 +16,8 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -31,32 +28,11 @@ import org.junit.runners.Parameterized.Parameters;
  * of an entire test run.
  */
 @RunWith(Parameterized.class)
-public class TestWebdavServletOptionsFile extends ServletOptionsBaseTest {
+public class TestWebdavServletOptionsUnknownMOVE extends WebdavServletOptionsBaseTestUnknown {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", "PUT", "DELETE",
-                "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", "PROPPATCH" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String method : methods) {
-                        result.add(new Object[] {
-                                listingsValue, readOnlyValue, traceValue, FILE_NAME, method } );
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new WebdavServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java b/test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknownPOST.java
similarity index 56%
copy from test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
copy to test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknownPOST.java
index 7085c7bf7c..8f52705eef 100644
--- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
+++ b/test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknownPOST.java
@@ -16,11 +16,8 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -31,32 +28,11 @@ import org.junit.runners.Parameterized.Parameters;
  * of an entire test run.
  */
 @RunWith(Parameterized.class)
-public class TestWebdavServletOptionsFile extends ServletOptionsBaseTest {
+public class TestWebdavServletOptionsUnknownPOST extends WebdavServletOptionsBaseTestUnknown {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", "PUT", "DELETE",
-                "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", "PROPPATCH" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String method : methods) {
-                        result.add(new Object[] {
-                                listingsValue, readOnlyValue, traceValue, FILE_NAME, method } );
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new WebdavServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java b/test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknownPROPFIND.java
similarity index 56%
copy from test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
copy to test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknownPROPFIND.java
index 7085c7bf7c..71813b350d 100644
--- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
+++ b/test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknownPROPFIND.java
@@ -16,11 +16,8 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -31,32 +28,11 @@ import org.junit.runners.Parameterized.Parameters;
  * of an entire test run.
  */
 @RunWith(Parameterized.class)
-public class TestWebdavServletOptionsFile extends ServletOptionsBaseTest {
+public class TestWebdavServletOptionsUnknownPROPFIND extends WebdavServletOptionsBaseTestUnknown {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", "PUT", "DELETE",
-                "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", "PROPPATCH" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String method : methods) {
-                        result.add(new Object[] {
-                                listingsValue, readOnlyValue, traceValue, FILE_NAME, method } );
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new WebdavServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java b/test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknownPROPPATCH.java
similarity index 56%
copy from test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
copy to test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknownPROPPATCH.java
index 7085c7bf7c..a2e294fdb2 100644
--- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
+++ b/test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknownPROPPATCH.java
@@ -16,11 +16,8 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -31,32 +28,11 @@ import org.junit.runners.Parameterized.Parameters;
  * of an entire test run.
  */
 @RunWith(Parameterized.class)
-public class TestWebdavServletOptionsFile extends ServletOptionsBaseTest {
+public class TestWebdavServletOptionsUnknownPROPPATCH extends WebdavServletOptionsBaseTestUnknown {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", "PUT", "DELETE",
-                "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", "PROPPATCH" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String method : methods) {
-                        result.add(new Object[] {
-                                listingsValue, readOnlyValue, traceValue, FILE_NAME, method } );
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new WebdavServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java b/test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknownPUT.java
similarity index 56%
copy from test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
copy to test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknownPUT.java
index 7085c7bf7c..e3948602b4 100644
--- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
+++ b/test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknownPUT.java
@@ -16,11 +16,8 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -31,32 +28,11 @@ import org.junit.runners.Parameterized.Parameters;
  * of an entire test run.
  */
 @RunWith(Parameterized.class)
-public class TestWebdavServletOptionsFile extends ServletOptionsBaseTest {
+public class TestWebdavServletOptionsUnknownPUT extends WebdavServletOptionsBaseTestUnknown {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", "PUT", "DELETE",
-                "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", "PROPPATCH" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String method : methods) {
-                        result.add(new Object[] {
-                                listingsValue, readOnlyValue, traceValue, FILE_NAME, method } );
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new WebdavServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java b/test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknownTRACE.java
similarity index 56%
copy from test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
copy to test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknownTRACE.java
index 7085c7bf7c..ba8e8203f7 100644
--- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
+++ b/test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknownTRACE.java
@@ -16,11 +16,8 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -31,32 +28,11 @@ import org.junit.runners.Parameterized.Parameters;
  * of an entire test run.
  */
 @RunWith(Parameterized.class)
-public class TestWebdavServletOptionsFile extends ServletOptionsBaseTest {
+public class TestWebdavServletOptionsUnknownTRACE extends WebdavServletOptionsBaseTestUnknown {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", "PUT", "DELETE",
-                "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", "PROPPATCH" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String method : methods) {
-                        result.add(new Object[] {
-                                listingsValue, readOnlyValue, traceValue, FILE_NAME, method } );
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new WebdavServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java b/test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknownUNLOCK.java
similarity index 56%
copy from test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
copy to test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknownUNLOCK.java
index 7085c7bf7c..f28bac3fcb 100644
--- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
+++ b/test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknownUNLOCK.java
@@ -16,11 +16,8 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -31,32 +28,11 @@ import org.junit.runners.Parameterized.Parameters;
  * of an entire test run.
  */
 @RunWith(Parameterized.class)
-public class TestWebdavServletOptionsFile extends ServletOptionsBaseTest {
+public class TestWebdavServletOptionsUnknownUNLOCK extends WebdavServletOptionsBaseTestUnknown {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", "PUT", "DELETE",
-                "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", "PROPPATCH" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String method : methods) {
-                        result.add(new Object[] {
-                                listingsValue, readOnlyValue, traceValue, FILE_NAME, method } );
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new WebdavServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java b/test/org/apache/catalina/servlets/WebdavServletOptionBaseTestCollection.java
similarity index 67%
rename from test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
rename to test/org/apache/catalina/servlets/WebdavServletOptionBaseTestCollection.java
index 7085c7bf7c..7614dc02c9 100644
--- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
+++ b/test/org/apache/catalina/servlets/WebdavServletOptionBaseTestCollection.java
@@ -22,31 +22,22 @@ import java.util.List;
 
 import jakarta.servlet.Servlet;
 
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
-import org.junit.runners.Parameterized.Parameters;
-
 /*
  * Split into multiple tests as a single test takes so long it impacts the time
  * of an entire test run.
  */
-@RunWith(Parameterized.class)
-public class TestWebdavServletOptionsFile extends ServletOptionsBaseTest {
+public abstract class WebdavServletOptionBaseTestCollection extends ServletOptionsBaseTest {
+
+    public static Collection<Object[]> inputs(Class<?> clazz) {
 
-    @Parameters
-    public static Collection<Object[]> inputs() {
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", "PUT", "DELETE",
-                "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", "PROPPATCH" };
+        String method = clazz.getSimpleName().substring(clazz.getSuperclass().getSimpleName().length() - 4);
 
         List<Object[]> result = new ArrayList<>();
 
         for (Boolean listingsValue : booleans) {
             for (Boolean readOnlyValue : booleans) {
                 for (Boolean traceValue : booleans) {
-                    for (String method : methods) {
-                        result.add(new Object[] {
-                                listingsValue, readOnlyValue, traceValue, FILE_NAME, method } );
-                    }
+                    result.add(new Object[] { listingsValue, readOnlyValue, traceValue, COLLECTION_NAME, method });
                 }
             }
 
diff --git a/test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknown.java b/test/org/apache/catalina/servlets/WebdavServletOptionsBaseTestFile.java
similarity index 67%
rename from test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknown.java
rename to test/org/apache/catalina/servlets/WebdavServletOptionsBaseTestFile.java
index f5ca12c698..746c8e4d5b 100644
--- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknown.java
+++ b/test/org/apache/catalina/servlets/WebdavServletOptionsBaseTestFile.java
@@ -22,31 +22,22 @@ import java.util.List;
 
 import jakarta.servlet.Servlet;
 
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
-import org.junit.runners.Parameterized.Parameters;
-
 /*
  * Split into multiple tests as a single test takes so long it impacts the time
  * of an entire test run.
  */
-@RunWith(Parameterized.class)
-public class TestWebdavServletOptionsUnknown extends ServletOptionsBaseTest {
+public abstract class WebdavServletOptionsBaseTestFile extends ServletOptionsBaseTest {
+
+    public static Collection<Object[]> inputs(Class<?> clazz) {
 
-    @Parameters
-    public static Collection<Object[]> inputs() {
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", "PUT", "DELETE",
-                "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", "PROPPATCH" };
+        String method = clazz.getSimpleName().substring(clazz.getSuperclass().getSimpleName().length() - 4);
 
         List<Object[]> result = new ArrayList<>();
 
         for (Boolean listingsValue : booleans) {
             for (Boolean readOnlyValue : booleans) {
                 for (Boolean traceValue : booleans) {
-                    for (String method : methods) {
-                        result.add(new Object[] {
-                                listingsValue, readOnlyValue, traceValue, UNKNOWN_NAME, method } );
-                    }
+                    result.add(new Object[] { listingsValue, readOnlyValue, traceValue, FILE_NAME, method });
                 }
             }
 
diff --git a/test/org/apache/catalina/servlets/TestWebdavServletOptionCollection.java b/test/org/apache/catalina/servlets/WebdavServletOptionsBaseTestUnknown.java
similarity index 67%
rename from test/org/apache/catalina/servlets/TestWebdavServletOptionCollection.java
rename to test/org/apache/catalina/servlets/WebdavServletOptionsBaseTestUnknown.java
index c57408caca..23e6fe1e9e 100644
--- a/test/org/apache/catalina/servlets/TestWebdavServletOptionCollection.java
+++ b/test/org/apache/catalina/servlets/WebdavServletOptionsBaseTestUnknown.java
@@ -22,31 +22,22 @@ import java.util.List;
 
 import jakarta.servlet.Servlet;
 
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
-import org.junit.runners.Parameterized.Parameters;
-
 /*
  * Split into multiple tests as a single test takes so long it impacts the time
  * of an entire test run.
  */
-@RunWith(Parameterized.class)
-public class TestWebdavServletOptionCollection extends ServletOptionsBaseTest {
+public abstract class WebdavServletOptionsBaseTestUnknown extends ServletOptionsBaseTest {
+
+    public static Collection<Object[]> inputs(Class<?> clazz) {
 
-    @Parameters
-    public static Collection<Object[]> inputs() {
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", "PUT", "DELETE",
-                "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", "PROPPATCH" };
+        String method = clazz.getSimpleName().substring(clazz.getSuperclass().getSimpleName().length() - 4);
 
         List<Object[]> result = new ArrayList<>();
 
         for (Boolean listingsValue : booleans) {
             for (Boolean readOnlyValue : booleans) {
                 for (Boolean traceValue : booleans) {
-                    for (String method : methods) {
-                        result.add(new Object[] {
-                                listingsValue, readOnlyValue, traceValue, COLLECTION_NAME, method } );
-                    }
+                    result.add(new Object[] { listingsValue, readOnlyValue, traceValue, UNKNOWN_NAME, method });
                 }
             }
 


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org


Re: (tomcat) branch main updated: Refactor long running tests to improve parallelism

Posted by Rémy Maucherat <re...@apache.org>.
On Mon, Dec 4, 2023 at 9:37 PM Mark Thomas <ma...@apache.org> wrote:
>
> On 04/12/2023 19:06, markt@apache.org wrote:
> > This is an automated email from the ASF dual-hosted git repository.
> >
> > markt pushed a commit to branch main
> > in repository https://gitbox.apache.org/repos/asf/tomcat.git
> >
> >
> > The following commit(s) were added to refs/heads/main by this push:
> >       new c766eefed9 Refactor long running tests to improve parallelism
> > c766eefed9 is described below
> >
> > commit c766eefed99cb7004f29468d1e5546eef2a5eae8
> > Author: Mark Thomas <ma...@apache.org>
> > AuthorDate: Mon Dec 4 19:06:26 2023 +0000
> >
> >      Refactor long running tests to improve parallelism
>
> This didn't work as I hoped. The tests weren't CPU bound and this change
> actually made things worse.
>
> I've done some work with a profiler and I have a better plan for these
> tests.
>
> I'll be reverting this change and implementing an alternative.

Nice try. I thought it would do something for CI since well, lots of
slow threads there usually.

Rémy

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org


Re: (tomcat) branch main updated: Refactor long running tests to improve parallelism

Posted by Mark Thomas <ma...@apache.org>.
On 04/12/2023 19:06, markt@apache.org wrote:
> This is an automated email from the ASF dual-hosted git repository.
> 
> markt pushed a commit to branch main
> in repository https://gitbox.apache.org/repos/asf/tomcat.git
> 
> 
> The following commit(s) were added to refs/heads/main by this push:
>       new c766eefed9 Refactor long running tests to improve parallelism
> c766eefed9 is described below
> 
> commit c766eefed99cb7004f29468d1e5546eef2a5eae8
> Author: Mark Thomas <ma...@apache.org>
> AuthorDate: Mon Dec 4 19:06:26 2023 +0000
> 
>      Refactor long running tests to improve parallelism

This didn't work as I hoped. The tests weren't CPU bound and this change 
actually made things worse.

I've done some work with a profiler and I have a better plan for these 
tests.

I'll be reverting this change and implementing an alternative.

Mark

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org