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
*