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:31 UTC

[camel] 03/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 b054f70029f74abb1edf09a49efb13b591f65c0e
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Fri Aug 2 07:45:43 2019 +0200

    CAMEL-12003: Add failFast option to mock endpoint
---
 ...AssertionTask.java => AssertionClauseTask.java} | 23 +++-----
 .../apache/camel/component/mock/AssertionTask.java |  4 +-
 .../apache/camel/component/mock/MockEndpoint.java  | 61 +++++++++++++++-------
 3 files changed, 53 insertions(+), 35 deletions(-)

diff --git a/components/camel-mock/src/main/java/org/apache/camel/component/mock/AssertionTask.java b/components/camel-mock/src/main/java/org/apache/camel/component/mock/AssertionClauseTask.java
similarity index 67%
copy from components/camel-mock/src/main/java/org/apache/camel/component/mock/AssertionTask.java
copy to components/camel-mock/src/main/java/org/apache/camel/component/mock/AssertionClauseTask.java
index 16daf49..572f3d0 100644
--- a/components/camel-mock/src/main/java/org/apache/camel/component/mock/AssertionTask.java
+++ b/components/camel-mock/src/main/java/org/apache/camel/component/mock/AssertionClauseTask.java
@@ -1,13 +1,13 @@
-/*
+/**
  * 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
- *
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
  * 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.
@@ -16,16 +16,9 @@
  */
 package org.apache.camel.component.mock;
 
-/**
- * Assertion task that supports fail fast mode by running the assertion asap on the n'th received message.
- */
-public abstract class AssertionTask implements Runnable {
-
-    /**
-     * Asserts on the n'th received message
-     *
-     * @param index the n'th received message
-     */
-    abstract void assertOnIndex(int index);
+public abstract class AssertionClauseTask extends AssertionClause implements AssertionTask {
 
+    public AssertionClauseTask(MockEndpoint mock) {
+        super(mock);
+    }
 }
diff --git a/components/camel-mock/src/main/java/org/apache/camel/component/mock/AssertionTask.java b/components/camel-mock/src/main/java/org/apache/camel/component/mock/AssertionTask.java
index 16daf49..347ba0d 100644
--- a/components/camel-mock/src/main/java/org/apache/camel/component/mock/AssertionTask.java
+++ b/components/camel-mock/src/main/java/org/apache/camel/component/mock/AssertionTask.java
@@ -19,13 +19,13 @@ package org.apache.camel.component.mock;
 /**
  * Assertion task that supports fail fast mode by running the assertion asap on the n'th received message.
  */
-public abstract class AssertionTask implements Runnable {
+public interface AssertionTask extends Runnable {
 
     /**
      * Asserts on the n'th received message
      *
      * @param index the n'th received message
      */
-    abstract void assertOnIndex(int index);
+    public void assertOnIndex(int index);
 
 }
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 cdb42de..3465f1c 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
@@ -541,7 +541,7 @@ public class MockEndpoint extends DefaultEndpoint implements BrowsableEndpoint,
             // we just wants to expects to be called once
             expects(new AssertionTask() {
                 @Override
-                void assertOnIndex(int i) {
+                public void assertOnIndex(int i) {
                     Exchange exchange = getReceivedExchange(i);
                     for (Map.Entry<String, Object> entry : expectedHeaderValues.entrySet()) {
                         String key = entry.getKey();
@@ -635,7 +635,7 @@ public class MockEndpoint extends DefaultEndpoint implements BrowsableEndpoint,
 
         expects(new AssertionTask() {
             @Override
-            void assertOnIndex(int i) {
+            public void assertOnIndex(int i) {
                 Exchange exchange = getReceivedExchange(i);
                 for (Map.Entry<String, Object> entry : expectedPropertyValues.entrySet()) {
                     String key = entry.getKey();
@@ -729,7 +729,7 @@ public class MockEndpoint extends DefaultEndpoint implements BrowsableEndpoint,
 
         expects(new AssertionTask() {
             @Override
-            void assertOnIndex(int i) {
+            public void assertOnIndex(int i) {
                 Exchange exchange = getReceivedExchange(i);
                 assertTrue("No exchange received for counter: " + i, exchange != null);
 
@@ -783,6 +783,7 @@ public class MockEndpoint extends DefaultEndpoint implements BrowsableEndpoint,
             final AssertionClause clause = new AssertionClause(this) {
                 public void run() {
                     addPredicate(predicate);
+                    // TODO: Is this correct
                     applyAssertionOn(MockEndpoint.this, messageIndex, assertExchangeReceived(messageIndex));
                 }
             };
@@ -809,16 +810,23 @@ public class MockEndpoint extends DefaultEndpoint implements BrowsableEndpoint,
      */
     public AssertionClause expectedBodyReceived() {
         expectedMessageCount(1);
-        final AssertionClause clause = new AssertionClause(this) {
-            public void run() {
-                Exchange exchange = getReceivedExchange(0);
-                assertTrue("No exchange received for counter: " + 0, exchange != null);
+        final AssertionClause clause = new AssertionClauseTask(this) {
+            @Override
+            public void assertOnIndex(int index) {
+                if (index == 0) {
+                    Exchange exchange = getReceivedExchange(index);
+                    assertTrue("No exchange received for counter: " + index, exchange != null);
 
-                Object actualBody = exchange.getIn().getBody();
-                Expression exp = createExpression(getCamelContext());
-                Object expectedBody = exp.evaluate(exchange, Object.class);
+                    Object actualBody = exchange.getIn().getBody();
+                    Expression exp = createExpression(getCamelContext());
+                    Object expectedBody = exp.evaluate(exchange, Object.class);
 
-                assertEquals("Body of message: " + 0, expectedBody, actualBody);
+                    assertEquals("Body of message: " + index, expectedBody, actualBody);
+                }
+            }
+
+            public void run() {
+                assertOnIndex(0);
             }
         };
         expects(clause);
@@ -941,6 +949,7 @@ public class MockEndpoint extends DefaultEndpoint implements BrowsableEndpoint,
      * of the given expression such as a user generated counter value
      */
     public AssertionClause expectsAscending() {
+        // TODO: Task
         final AssertionClause clause = new AssertionClause(this) {
             public void run() {
                 assertMessagesAscending(createExpression(getCamelContext()));
@@ -967,6 +976,7 @@ 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) {
             public void run() {
                 assertMessagesDescending(createExpression(getCamelContext()));
@@ -999,6 +1009,7 @@ public class MockEndpoint extends DefaultEndpoint implements BrowsableEndpoint,
      * the expression to determine the message ID
      */
     public AssertionClause expectsNoDuplicates() {
+        // TODO: Task
         final AssertionClause clause = new AssertionClause(this) {
             public void run() {
                 assertNoDuplicates(createExpression(getCamelContext()));
@@ -1012,6 +1023,7 @@ 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);
     }
 
@@ -1019,6 +1031,7 @@ 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);
     }
 
@@ -1076,9 +1089,16 @@ public class MockEndpoint extends DefaultEndpoint implements BrowsableEndpoint,
      * @return the assertion clause
      */
     public AssertionClause message(final int messageIndex) {
-        final AssertionClause clause = new AssertionClause(this) {
+        final AssertionClause clause = new AssertionClauseTask(this) {
+            @Override
+            public void assertOnIndex(int index) {
+                if (index == messageIndex) {
+                    applyAssertionOn(MockEndpoint.this, index, assertExchangeReceived(index));
+                }
+            }
+
             public void run() {
-                applyAssertionOn(MockEndpoint.this, messageIndex, assertExchangeReceived(messageIndex));
+                assertOnIndex(messageIndex);
             }
         };
         expects(clause);
@@ -1091,12 +1111,15 @@ public class MockEndpoint extends DefaultEndpoint implements BrowsableEndpoint,
      * @return the assertion clause
      */
     public AssertionClause allMessages() {
-        final AssertionClause clause = new AssertionClause(this) {
+        final AssertionClause clause = new AssertionClauseTask(this) {
+            @Override
+            public void assertOnIndex(int index) {
+                applyAssertionOn(MockEndpoint.this, index, assertExchangeReceived(index));
+            }
+
             public void run() {
-                List<Exchange> list = getReceivedExchanges();
-                int index = 0;
-                for (Exchange exchange : list) {
-                    applyAssertionOn(MockEndpoint.this, index++, exchange);
+                for (int i = 0; i < getReceivedCounter(); i++) {
+                    assertOnIndex(i);
                 }
             }
         };
@@ -1411,6 +1434,8 @@ public class MockEndpoint extends DefaultEndpoint implements BrowsableEndpoint,
                             while (latch != null && latch.getCount() > 0) {
                                 latch.countDown();
                             }
+                            // we are failing fast
+                            break;
                         }
                     }
                 }