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

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


The following commit(s) were added to refs/heads/11.0.x by this push:
     new 1eb5ba7738 Attempt to make test more robust
1eb5ba7738 is described below

commit 1eb5ba77388dd54f1bbf30c9c3eec3f40bb228ba
Author: Mark Thomas <ma...@apache.org>
AuthorDate: Wed Mar 19 05:22:20 2025 +0000

    Attempt to make test more robust
---
 .../filters/TestRateLimitFilterWithExactRateLimiter.java | 16 +++++++++++++---
 1 file changed, 13 insertions(+), 3 deletions(-)

diff --git 
a/test/org/apache/catalina/filters/TestRateLimitFilterWithExactRateLimiter.java 
b/test/org/apache/catalina/filters/TestRateLimitFilterWithExactRateLimiter.java
index a2172c1d1e..6eacfd081c 100644
--- 
a/test/org/apache/catalina/filters/TestRateLimitFilterWithExactRateLimiter.java
+++ 
b/test/org/apache/catalina/filters/TestRateLimitFilterWithExactRateLimiter.java
@@ -148,7 +148,7 @@ public class TestRateLimitFilterWithExactRateLimiter 
extends TomcatBaseTest {
         String ip;
 
         int requests;
-        int sleep;
+        int timePerRequest;
 
         int[] results;
         volatile String[] rlpHeader;
@@ -159,7 +159,7 @@ public class TestRateLimitFilterWithExactRateLimiter 
extends TomcatBaseTest {
             this.filterChain = filterChain;
             this.ip = ip;
             this.requests = requests;
-            this.sleep = 1000 / rps;
+            this.timePerRequest = 1000 / rps;
             this.results = new int[requests];
             this.rlpHeader = new String[requests];
             this.rlHeader = new String[requests];
@@ -169,6 +169,8 @@ public class TestRateLimitFilterWithExactRateLimiter 
extends TomcatBaseTest {
 
         @Override
         public void run() {
+            long start = System.nanoTime();
+
             try {
                 for (int i = 0; i < requests; i++) {
                     MockHttpServletRequest request = new 
MockHttpServletRequest();
@@ -184,7 +186,15 @@ public class TestRateLimitFilterWithExactRateLimiter 
extends TomcatBaseTest {
                     if (results[i] != 200) {
                         break;
                     }
-                    sleep(sleep);
+                    /*
+                     * Ensure requests are evenly spaced through time 
irrespective of how long each request takes to
+                     * complete. Do comparisons in milliseconds.
+                     */
+                    long expectedDuration = (i + 1) * timePerRequest;
+                    long duration = (System.nanoTime() - start)/1000000;
+                    if (expectedDuration > duration) {
+                        sleep(expectedDuration - duration);
+                    }
                 }
             } catch (Exception ex) {
                 ex.printStackTrace();


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

Reply via email to