You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2019/08/02 14:46:34 UTC

[camel] 06/08: CAMEL-12003: Add failFast option to mock endpoint

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

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

commit c38bd5a7a3728592c7564af3c45bf7149c9f32a4
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Fri Aug 2 16:20:04 2019 +0200

    CAMEL-12003: Add failFast option to mock endpoint
---
 .../camel/component/mock/AssertionClauseTask.java  |  3 ++
 .../apache/camel/component/mock/MockEndpoint.java  | 58 ++++++++++++++--------
 2 files changed, 41 insertions(+), 20 deletions(-)

diff --git a/components/camel-mock/src/main/java/org/apache/camel/component/mock/AssertionClauseTask.java b/components/camel-mock/src/main/java/org/apache/camel/component/mock/AssertionClauseTask.java
index 572f3d0..b613908 100644
--- a/components/camel-mock/src/main/java/org/apache/camel/component/mock/AssertionClauseTask.java
+++ b/components/camel-mock/src/main/java/org/apache/camel/component/mock/AssertionClauseTask.java
@@ -16,6 +16,9 @@
  */
 package org.apache.camel.component.mock;
 
+/**
+ * An {@link AssertionClause} that bridges with fail fast mode ({@link AssertionTask}).
+ */
 public abstract class AssertionClauseTask extends AssertionClause implements AssertionTask {
 
     public AssertionClauseTask(MockEndpoint mock) {
diff --git a/components/camel-mock/src/main/java/org/apache/camel/component/mock/MockEndpoint.java b/components/camel-mock/src/main/java/org/apache/camel/component/mock/MockEndpoint.java
index a7a613f..fb0ecff 100644
--- a/components/camel-mock/src/main/java/org/apache/camel/component/mock/MockEndpoint.java
+++ b/components/camel-mock/src/main/java/org/apache/camel/component/mock/MockEndpoint.java
@@ -945,9 +945,13 @@ public class MockEndpoint extends DefaultEndpoint implements BrowsableEndpoint,
      * of the given expression such as a user generated counter value
      */
     public void expectsAscending(final Expression expression) {
-        expects(new Runnable() {
+        expects(new AssertionTask() {
+            @Override
+            public void assertOnIndex(int index) {
+                assertMessagesSorted(expression, true, index);
+            }
+
             public void run() {
-                // TODO: Task
                 assertMessagesAscending(expression);
             }
         });
@@ -961,9 +965,7 @@ public class MockEndpoint extends DefaultEndpoint implements BrowsableEndpoint,
         final AssertionClause clause = new AssertionClauseTask(this) {
             @Override
             public void assertOnIndex(int index) {
-                // TODO: Make this smarter
-                // just run from top again
-                run();
+                assertMessagesSorted(createExpression(getCamelContext()), true, index);
             }
 
             public void run() {
@@ -979,7 +981,12 @@ public class MockEndpoint extends DefaultEndpoint implements BrowsableEndpoint,
      * of the given expression such as a user generated counter value
      */
     public void expectsDescending(final Expression expression) {
-        expects(new Runnable() {
+        expects(new AssertionTask() {
+            @Override
+            public void assertOnIndex(int index) {
+                assertMessagesSorted(expression, false, index);
+            }
+
             public void run() {
                 assertMessagesDescending(expression);
             }
@@ -991,8 +998,12 @@ public class MockEndpoint extends DefaultEndpoint implements BrowsableEndpoint,
      * of the given expression such as a user generated counter value
      */
     public AssertionClause expectsDescending() {
-        // TODO: Task
-        final AssertionClause clause = new AssertionClause(this) {
+        final AssertionClause clause = new AssertionClauseTask(this) {
+            @Override
+            public void assertOnIndex(int index) {
+                assertMessagesSorted(createExpression(getCamelContext()), false, index);
+            }
+
             public void run() {
                 assertMessagesDescending(createExpression(getCamelContext()));
             }
@@ -1075,7 +1086,6 @@ public class MockEndpoint extends DefaultEndpoint implements BrowsableEndpoint,
      * Asserts that the messages have ascending values of the given expression
      */
     public void assertMessagesAscending(Expression expression) {
-        // TODO: Task
         assertMessagesSorted(expression, true);
     }
 
@@ -1083,35 +1093,43 @@ public class MockEndpoint extends DefaultEndpoint implements BrowsableEndpoint,
      * Asserts that the messages have descending values of the given expression
      */
     public void assertMessagesDescending(Expression expression) {
-        // TODO: Task
         assertMessagesSorted(expression, false);
     }
 
     protected void assertMessagesSorted(Expression expression, boolean ascending) {
+        List<Exchange> list = getReceivedExchanges();
+        for (int i = 0; i < list.size(); i++) {
+            assertMessagesSorted(expression, ascending, i);
+        }
+    }
+
+    protected void assertMessagesSorted(Expression expression, boolean ascending, int index) {
         String type = ascending ? "ascending" : "descending";
         ExpressionComparator comparator = new ExpressionComparator(expression);
-        List<Exchange> list = getReceivedExchanges();
-        for (int i = 1; i < list.size(); i++) {
-            int j = i - 1;
-            Exchange e1 = list.get(j);
-            Exchange e2 = list.get(i);
+
+        int prev = index - 1;
+        if (prev > 0) {
+            List<Exchange> list = getReceivedExchanges();
+            Exchange e1 = list.get(prev);
+            Exchange e2 = list.get(index);
             int result = comparator.compare(e1, e2);
             if (result == 0) {
-                fail("Messages not " + type + ". Messages" + j + " and " + i + " are equal with value: "
-                    + expression.evaluate(e1, Object.class) + " for expression: " + expression + ". Exchanges: " + e1 + " and " + e2);
+                fail("Messages not " + type + ". Messages" + prev + " and " + index + " are equal with value: "
+                        + expression.evaluate(e1, Object.class) + " for expression: " + expression + ". Exchanges: " + e1 + " and " + e2);
             } else {
                 if (!ascending) {
                     result = result * -1;
                 }
                 if (result > 0) {
-                    fail("Messages not " + type + ". Message " + j + " has value: " + expression.evaluate(e1, Object.class)
-                        + " and message " + i + " has value: " + expression.evaluate(e2, Object.class) + " for expression: "
-                        + expression + ". Exchanges: " + e1 + " and " + e2);
+                    fail("Messages not " + type + ". Message " + prev + " has value: " + expression.evaluate(e1, Object.class)
+                            + " and message " + index + " has value: " + expression.evaluate(e2, Object.class) + " for expression: "
+                            + expression + ". Exchanges: " + e1 + " and " + e2);
                 }
             }
         }
     }
 
+
     /**
      * Asserts among all the current received exchanges that there are no duplicate message
      *