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

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


The following commit(s) were added to refs/heads/main by this push:
     new e218a66b6ed CAMEL-19986: Improved ThrottlingExecutor, so it can 
execute more different tasks (#11942)
e218a66b6ed is described below

commit e218a66b6eda5a2cff962bd88d82cab1610bcc42
Author: LostArtist <[email protected]>
AuthorDate: Wed Nov 8 16:19:03 2023 +0100

    CAMEL-19986: Improved ThrottlingExecutor, so it can execute more different 
tasks (#11942)
    
    Co-authored-by: Nikita Konovalov <[email protected]>
---
 .../camel/test/junit5/ThrottlingExecutor.java      | 89 ++++++++++++++++++++++
 1 file changed, 89 insertions(+)

diff --git 
a/components/camel-test/camel-test-junit5/src/main/java/org/apache/camel/test/junit5/ThrottlingExecutor.java
 
b/components/camel-test/camel-test-junit5/src/main/java/org/apache/camel/test/junit5/ThrottlingExecutor.java
new file mode 100644
index 00000000000..fbeab6f3938
--- /dev/null
+++ 
b/components/camel-test/camel-test-junit5/src/main/java/org/apache/camel/test/junit5/ThrottlingExecutor.java
@@ -0,0 +1,89 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.camel.test.junit5;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+import java.util.function.IntConsumer;
+
+public final class ThrottlingExecutor {
+
+    private List<IntConsumer> beforeTasks = new ArrayList<>();
+    private List<IntConsumer> afterTasks = new ArrayList<>();
+    private int repetitions;
+    private long beforeWait;
+    private long awaiting;
+    private TimeUnit timeUnit;
+
+    private ThrottlingExecutor() {
+
+    }
+
+    public static ThrottlingExecutor slowly() {
+        return new ThrottlingExecutor();
+    }
+
+    public ThrottlingExecutor repeat(int repetitions) {
+        this.repetitions = repetitions;
+
+        return this;
+    }
+
+    public ThrottlingExecutor beforeWait() throws InterruptedException {
+        Thread.sleep(timeUnit.toMillis(awaiting));
+
+        return this;
+    }
+
+    public ThrottlingExecutor awaiting(long awaiting, TimeUnit timeUnit) {
+        this.awaiting = awaiting;
+        this.timeUnit = timeUnit;
+
+        return this;
+    }
+
+    public ThrottlingExecutor beforeEach(IntConsumer beforeTask) {
+        beforeTasks.add(beforeTask);
+
+        return this;
+    }
+
+    public ThrottlingExecutor afterEach(IntConsumer afterTask) {
+        afterTasks.add(afterTask);
+
+        return this;
+    }
+
+    private static void runTasks(List<IntConsumer> taskList, Integer index) {
+        for (IntConsumer consumer : taskList) {
+            consumer.accept(index);
+        }
+    }
+
+    public void execute() throws InterruptedException {
+        for (int i = 0; i < repetitions; i++) {
+            runTasks(beforeTasks, i);
+
+            Thread.sleep(timeUnit.toMillis(awaiting));
+
+            runTasks(afterTasks, i);
+        }
+
+    }
+}

Reply via email to