test: re-enabled a number of Watcher tests that were disabled

Relates to elastic/elasticsearch#724

Original commit: elastic/x-pack-elasticsearch@3bdd118f2e
This commit is contained in:
Martijn van Groningen 2015-11-04 18:39:37 +07:00
parent b7b9fa3ba5
commit 418c341e32
16 changed files with 103 additions and 91 deletions

View File

@ -6,6 +6,7 @@
package org.elasticsearch.watcher.condition; package org.elasticsearch.watcher.condition;
import org.elasticsearch.watcher.condition.always.AlwaysCondition; import org.elasticsearch.watcher.condition.always.AlwaysCondition;
import org.elasticsearch.watcher.condition.compare.CompareCondition;
import org.elasticsearch.watcher.condition.compare.array.ArrayCompareCondition; import org.elasticsearch.watcher.condition.compare.array.ArrayCompareCondition;
import org.elasticsearch.watcher.condition.never.NeverCondition; import org.elasticsearch.watcher.condition.never.NeverCondition;
import org.elasticsearch.watcher.condition.script.ScriptCondition; import org.elasticsearch.watcher.condition.script.ScriptCondition;
@ -39,6 +40,10 @@ public final class ConditionBuilders {
return ScriptCondition.builder(script); return ScriptCondition.builder(script);
} }
public static CompareCondition.Builder compareCondition(String path, CompareCondition.Op op, Object value) {
return CompareCondition.builder(path, op, value);
}
public static ArrayCompareCondition.Builder arrayCompareCondition(String arrayPath, String path, ArrayCompareCondition.Op op, Object value, ArrayCompareCondition.Quantifier quantifier) { public static ArrayCompareCondition.Builder arrayCompareCondition(String arrayPath, String path, ArrayCompareCondition.Op op, Object value, ArrayCompareCondition.Quantifier quantifier) {
return ArrayCompareCondition.builder(arrayPath, path, op, value, quantifier); return ArrayCompareCondition.builder(arrayPath, path, op, value, quantifier);
} }

View File

@ -220,6 +220,10 @@ public class CompareCondition implements Condition {
} }
} }
public static Builder builder(String path, Op op, Object value) {
return new Builder(path, op, value);
}
public static class Builder implements Condition.Builder<CompareCondition> { public static class Builder implements Condition.Builder<CompareCondition> {
private String path; private String path;

View File

@ -6,10 +6,10 @@
package org.elasticsearch.watcher.actions; package org.elasticsearch.watcher.actions;
import org.apache.lucene.util.LuceneTestCase.AwaitsFix;
import org.elasticsearch.action.index.IndexResponse; import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.common.unit.TimeValue; import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.watcher.client.WatcherClient; import org.elasticsearch.watcher.client.WatcherClient;
import org.elasticsearch.watcher.condition.compare.CompareCondition;
import org.elasticsearch.watcher.execution.ExecutionState; import org.elasticsearch.watcher.execution.ExecutionState;
import org.elasticsearch.watcher.history.HistoryStore; import org.elasticsearch.watcher.history.HistoryStore;
import org.elasticsearch.watcher.history.WatchRecord; import org.elasticsearch.watcher.history.WatchRecord;
@ -24,7 +24,7 @@ import static org.elasticsearch.index.query.QueryBuilders.matchAllQuery;
import static org.elasticsearch.index.query.QueryBuilders.matchQuery; import static org.elasticsearch.index.query.QueryBuilders.matchQuery;
import static org.elasticsearch.watcher.actions.ActionBuilders.indexAction; import static org.elasticsearch.watcher.actions.ActionBuilders.indexAction;
import static org.elasticsearch.watcher.client.WatchSourceBuilders.watchBuilder; import static org.elasticsearch.watcher.client.WatchSourceBuilders.watchBuilder;
import static org.elasticsearch.watcher.condition.ConditionBuilders.scriptCondition; import static org.elasticsearch.watcher.condition.ConditionBuilders.compareCondition;
import static org.elasticsearch.watcher.input.InputBuilders.searchInput; import static org.elasticsearch.watcher.input.InputBuilders.searchInput;
import static org.elasticsearch.watcher.test.WatcherTestUtils.matchAllRequest; import static org.elasticsearch.watcher.test.WatcherTestUtils.matchAllRequest;
import static org.elasticsearch.watcher.transform.TransformBuilders.searchTransform; import static org.elasticsearch.watcher.transform.TransformBuilders.searchTransform;
@ -35,7 +35,6 @@ import static org.hamcrest.Matchers.is;
/** /**
*/ */
@AwaitsFix(bugUrl = "https://github.com/elastic/x-plugins/issues/724")
public class TimeThrottleIntegrationTests extends AbstractWatcherIntegrationTestCase { public class TimeThrottleIntegrationTests extends AbstractWatcherIntegrationTestCase {
private IndexResponse indexTestDoc() { private IndexResponse indexTestDoc() {
createIndex("actions", "events"); createIndex("actions", "events");
@ -63,7 +62,7 @@ public class TimeThrottleIntegrationTests extends AbstractWatcherIntegrationTest
.setSource(watchBuilder() .setSource(watchBuilder()
.trigger(schedule(interval("5s"))) .trigger(schedule(interval("5s")))
.input(searchInput(matchAllRequest().indices("events"))) .input(searchInput(matchAllRequest().indices("events")))
.condition(scriptCondition("ctx.payload.hits.total > 0")) .condition(compareCondition("ctx.payload.hits.total", CompareCondition.Op.GT, 0l))
.transform(searchTransform(matchAllRequest().indices("events"))) .transform(searchTransform(matchAllRequest().indices("events")))
.addAction("_id", indexAction("actions", "action")) .addAction("_id", indexAction("actions", "action"))
.defaultThrottlePeriod(TimeValue.timeValueSeconds(30))) .defaultThrottlePeriod(TimeValue.timeValueSeconds(30)))
@ -137,7 +136,7 @@ public class TimeThrottleIntegrationTests extends AbstractWatcherIntegrationTest
.setSource(watchBuilder() .setSource(watchBuilder()
.trigger(schedule(interval("1s"))) .trigger(schedule(interval("1s")))
.input(searchInput(matchAllRequest().indices("events"))) .input(searchInput(matchAllRequest().indices("events")))
.condition(scriptCondition("ctx.payload.hits.total > 0")) .condition(compareCondition("ctx.payload.hits.total", CompareCondition.Op.GT, 0l))
.transform(searchTransform(matchAllRequest().indices("events"))) .transform(searchTransform(matchAllRequest().indices("events")))
.addAction("_id", indexAction("actions", "action"))) .addAction("_id", indexAction("actions", "action")))
.get(); .get();

View File

@ -13,6 +13,7 @@ import org.elasticsearch.test.junit.annotations.TestLogging;
import org.elasticsearch.watcher.actions.email.service.EmailTemplate; import org.elasticsearch.watcher.actions.email.service.EmailTemplate;
import org.elasticsearch.watcher.actions.email.service.support.EmailServer; import org.elasticsearch.watcher.actions.email.service.support.EmailServer;
import org.elasticsearch.watcher.client.WatcherClient; import org.elasticsearch.watcher.client.WatcherClient;
import org.elasticsearch.watcher.condition.compare.CompareCondition;
import org.elasticsearch.watcher.test.AbstractWatcherIntegrationTestCase; import org.elasticsearch.watcher.test.AbstractWatcherIntegrationTestCase;
import org.elasticsearch.watcher.trigger.schedule.IntervalSchedule; import org.elasticsearch.watcher.trigger.schedule.IntervalSchedule;
import org.junit.After; import org.junit.After;
@ -27,7 +28,7 @@ import static org.elasticsearch.search.builder.SearchSourceBuilder.searchSource;
import static org.elasticsearch.test.ESIntegTestCase.Scope.SUITE; import static org.elasticsearch.test.ESIntegTestCase.Scope.SUITE;
import static org.elasticsearch.watcher.actions.ActionBuilders.emailAction; import static org.elasticsearch.watcher.actions.ActionBuilders.emailAction;
import static org.elasticsearch.watcher.client.WatchSourceBuilders.watchBuilder; import static org.elasticsearch.watcher.client.WatchSourceBuilders.watchBuilder;
import static org.elasticsearch.watcher.condition.ConditionBuilders.scriptCondition; import static org.elasticsearch.watcher.condition.ConditionBuilders.compareCondition;
import static org.elasticsearch.watcher.input.InputBuilders.searchInput; import static org.elasticsearch.watcher.input.InputBuilders.searchInput;
import static org.elasticsearch.watcher.test.WatcherTestUtils.newInputSearchRequest; import static org.elasticsearch.watcher.test.WatcherTestUtils.newInputSearchRequest;
import static org.elasticsearch.watcher.trigger.TriggerBuilders.schedule; import static org.elasticsearch.watcher.trigger.TriggerBuilders.schedule;
@ -36,7 +37,6 @@ import static org.hamcrest.Matchers.equalTo;
@TestLogging("subethamail:TRACE,watcher:TRACE") @TestLogging("subethamail:TRACE,watcher:TRACE")
@ESIntegTestCase.ClusterScope(scope = SUITE, numClientNodes = 0, transportClientRatio = 0, randomDynamicTemplates = false, numDataNodes = 1) @ESIntegTestCase.ClusterScope(scope = SUITE, numClientNodes = 0, transportClientRatio = 0, randomDynamicTemplates = false, numDataNodes = 1)
@AwaitsFix(bugUrl = "https://github.com/elastic/x-plugins/issues/724")
public class EmailActionIntegrationTests extends AbstractWatcherIntegrationTestCase { public class EmailActionIntegrationTests extends AbstractWatcherIntegrationTestCase {
static final String USERNAME = "_user"; static final String USERNAME = "_user";
static final String PASSWORD = "_passwd"; static final String PASSWORD = "_passwd";
@ -84,7 +84,7 @@ public class EmailActionIntegrationTests extends AbstractWatcherIntegrationTestC
.setSource(watchBuilder() .setSource(watchBuilder()
.trigger(schedule(interval(5, IntervalSchedule.Interval.Unit.SECONDS))) .trigger(schedule(interval(5, IntervalSchedule.Interval.Unit.SECONDS)))
.input(searchInput(searchRequest)) .input(searchInput(searchRequest))
.condition(scriptCondition("ctx.payload.hits.total > 0")) .condition(compareCondition("ctx.payload.hits.total", CompareCondition.Op.GT, 0l))
.addAction("_email", emailAction(EmailTemplate.builder().from("_from").to("_to") .addAction("_email", emailAction(EmailTemplate.builder().from("_from").to("_to")
.subject("{{ctx.payload.hits.hits.0._source.field}}")).setAuthentication(USERNAME, PASSWORD.toCharArray()))) .subject("{{ctx.payload.hits.hits.0._source.field}}")).setAuthentication(USERNAME, PASSWORD.toCharArray())))
.get(); .get();

View File

@ -59,7 +59,6 @@ import static org.mockito.Mockito.*;
/** /**
*/ */
@AwaitsFix(bugUrl = "https://github.com/elastic/x-plugins/issues/724")
public class WebhookActionTests extends ESTestCase { public class WebhookActionTests extends ESTestCase {
static final String TEST_HOST = "test.com"; static final String TEST_HOST = "test.com";
static final int TEST_PORT = 8089; static final int TEST_PORT = 8089;
@ -214,7 +213,7 @@ public class WebhookActionTests extends ESTestCase {
actionParser.parseExecutable("_watch", randomAsciiOfLength(5), parser); actionParser.parseExecutable("_watch", randomAsciiOfLength(5), parser);
fail("expected a WebhookActionException since we only provided either a host or a port but not both"); fail("expected a WebhookActionException since we only provided either a host or a port but not both");
} catch (ElasticsearchParseException e) { } catch (ElasticsearchParseException e) {
assertThat(e.getMessage(), containsString("could not parse http request template. missing required [")); assertThat(e.getMessage(), containsString("failed parsing http request template"));
} }
} }

View File

@ -15,11 +15,9 @@ import org.elasticsearch.watcher.actions.ActionStatus;
import org.elasticsearch.watcher.actions.logging.LoggingAction; import org.elasticsearch.watcher.actions.logging.LoggingAction;
import org.elasticsearch.watcher.client.WatchSourceBuilder; import org.elasticsearch.watcher.client.WatchSourceBuilder;
import org.elasticsearch.watcher.condition.always.AlwaysCondition; import org.elasticsearch.watcher.condition.always.AlwaysCondition;
import org.elasticsearch.watcher.condition.script.ScriptCondition;
import org.elasticsearch.watcher.history.HistoryStore; import org.elasticsearch.watcher.history.HistoryStore;
import org.elasticsearch.watcher.history.WatchRecord; import org.elasticsearch.watcher.history.WatchRecord;
import org.elasticsearch.watcher.input.simple.SimpleInput; import org.elasticsearch.watcher.input.simple.SimpleInput;
import org.elasticsearch.watcher.support.Script;
import org.elasticsearch.watcher.support.clock.SystemClock; import org.elasticsearch.watcher.support.clock.SystemClock;
import org.elasticsearch.watcher.support.xcontent.ObjectPath; import org.elasticsearch.watcher.support.xcontent.ObjectPath;
import org.elasticsearch.watcher.test.AbstractWatcherIntegrationTestCase; import org.elasticsearch.watcher.test.AbstractWatcherIntegrationTestCase;
@ -66,7 +64,7 @@ import static org.hamcrest.Matchers.not;
import static org.hamcrest.Matchers.notNullValue; import static org.hamcrest.Matchers.notNullValue;
import static org.hamcrest.Matchers.startsWith; import static org.hamcrest.Matchers.startsWith;
@AwaitsFix(bugUrl = "https://github.com/elastic/x-plugins/issues/724")
public class ManualExecutionTests extends AbstractWatcherIntegrationTestCase { public class ManualExecutionTests extends AbstractWatcherIntegrationTestCase {
@Override @Override
protected boolean enableShield() { protected boolean enableShield() {
@ -304,11 +302,12 @@ public class ManualExecutionTests extends AbstractWatcherIntegrationTestCase {
assertThat(ObjectPath.<String>eval("state", executeWatchResult), equalTo(ExecutionState.THROTTLED.toString())); assertThat(ObjectPath.<String>eval("state", executeWatchResult), equalTo(ExecutionState.THROTTLED.toString()));
} }
@AwaitsFix(bugUrl = "https://github.com/elastic/x-plugins/issues/724")
public void testWatchExecutionDuration() throws Exception { public void testWatchExecutionDuration() throws Exception {
WatchSourceBuilder watchBuilder = watchBuilder() WatchSourceBuilder watchBuilder = watchBuilder()
.trigger(schedule(cron("0 0 0 1 * ? 2099"))) .trigger(schedule(cron("0 0 0 1 * ? 2099")))
.input(simpleInput("foo", "bar")) .input(simpleInput("foo", "bar"))
.condition(new ScriptCondition((new Script.Builder.Inline("sleep 100; return true")).build())) // .condition(new ScriptCondition((new Script.Builder.Inline("sleep 100; return true")).build()))
.addAction("log", loggingAction("foobar")); .addAction("log", loggingAction("foobar"));
Watch watch = watchParser().parse("_id", false, watchBuilder.buildAsBytes(XContentType.JSON)); Watch watch = watchParser().parse("_id", false, watchBuilder.buildAsBytes(XContentType.JSON));
@ -317,11 +316,12 @@ public class ManualExecutionTests extends AbstractWatcherIntegrationTestCase {
assertThat(record.result().executionDurationMs(), greaterThanOrEqualTo(100L)); assertThat(record.result().executionDurationMs(), greaterThanOrEqualTo(100L));
} }
@AwaitsFix(bugUrl = "https://github.com/elastic/x-plugins/issues/724")
public void testForceDeletionOfLongRunningWatch() throws Exception { public void testForceDeletionOfLongRunningWatch() throws Exception {
WatchSourceBuilder watchBuilder = watchBuilder() WatchSourceBuilder watchBuilder = watchBuilder()
.trigger(schedule(cron("0 0 0 1 * ? 2099"))) .trigger(schedule(cron("0 0 0 1 * ? 2099")))
.input(simpleInput("foo", "bar")) .input(simpleInput("foo", "bar"))
.condition(new ScriptCondition((new Script.Builder.Inline("sleep 10000; return true")).build())) // .condition(new ScriptCondition((new Script.Builder.Inline("sleep 10000; return true")).build()))
.defaultThrottlePeriod(new TimeValue(1, TimeUnit.HOURS)) .defaultThrottlePeriod(new TimeValue(1, TimeUnit.HOURS))
.addAction("log", loggingAction("foobar")); .addAction("log", loggingAction("foobar"));

View File

@ -20,7 +20,6 @@ import static org.hamcrest.Matchers.equalTo;
/** /**
*/ */
@AwaitsFix(bugUrl = "https://github.com/elastic/x-plugins/issues/724")
public class TriggeredWatchTests extends AbstractWatcherIntegrationTestCase { public class TriggeredWatchTests extends AbstractWatcherIntegrationTestCase {
public void testParser() throws Exception { public void testParser() throws Exception {
Watch watch = WatcherTestUtils.createTestWatch("fired_test", scriptService(), watcherHttpClient(), noopEmailService(), logger); Watch watch = WatcherTestUtils.createTestWatch("fired_test", scriptService(), watcherHttpClient(), noopEmailService(), logger);

View File

@ -13,6 +13,7 @@ import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.node.Node; import org.elasticsearch.node.Node;
import org.elasticsearch.test.junit.annotations.TestLogging; import org.elasticsearch.test.junit.annotations.TestLogging;
import org.elasticsearch.watcher.client.WatcherClient; import org.elasticsearch.watcher.client.WatcherClient;
import org.elasticsearch.watcher.condition.compare.CompareCondition;
import org.elasticsearch.watcher.history.HistoryStore; import org.elasticsearch.watcher.history.HistoryStore;
import org.elasticsearch.watcher.support.http.HttpRequestTemplate; import org.elasticsearch.watcher.support.http.HttpRequestTemplate;
import org.elasticsearch.watcher.support.http.auth.basic.BasicAuth; import org.elasticsearch.watcher.support.http.auth.basic.BasicAuth;
@ -30,14 +31,13 @@ import static org.elasticsearch.index.query.QueryBuilders.termQuery;
import static org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertHitCount; import static org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertHitCount;
import static org.elasticsearch.watcher.actions.ActionBuilders.loggingAction; import static org.elasticsearch.watcher.actions.ActionBuilders.loggingAction;
import static org.elasticsearch.watcher.client.WatchSourceBuilders.watchBuilder; import static org.elasticsearch.watcher.client.WatchSourceBuilders.watchBuilder;
import static org.elasticsearch.watcher.condition.ConditionBuilders.scriptCondition; import static org.elasticsearch.watcher.condition.ConditionBuilders.compareCondition;
import static org.elasticsearch.watcher.input.InputBuilders.httpInput; import static org.elasticsearch.watcher.input.InputBuilders.httpInput;
import static org.elasticsearch.watcher.test.WatcherTestUtils.xContentSource; import static org.elasticsearch.watcher.test.WatcherTestUtils.xContentSource;
import static org.elasticsearch.watcher.trigger.TriggerBuilders.schedule; import static org.elasticsearch.watcher.trigger.TriggerBuilders.schedule;
import static org.elasticsearch.watcher.trigger.schedule.Schedules.interval; import static org.elasticsearch.watcher.trigger.schedule.Schedules.interval;
import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.equalTo;
@AwaitsFix(bugUrl = "https://github.com/elastic/x-plugins/issues/724")
public class HttpInputIntegrationTests extends AbstractWatcherIntegrationTestCase { public class HttpInputIntegrationTests extends AbstractWatcherIntegrationTestCase {
@Override @Override
protected Settings nodeSettings(int nodeOrdinal) { protected Settings nodeSettings(int nodeOrdinal) {
@ -60,7 +60,7 @@ public class HttpInputIntegrationTests extends AbstractWatcherIntegrationTestCas
.path("/index/_search") .path("/index/_search")
.body(jsonBuilder().startObject().field("size", 1).endObject()) .body(jsonBuilder().startObject().field("size", 1).endObject())
.auth(shieldEnabled() ? new BasicAuth("test", "changeme".toCharArray()) : null))) .auth(shieldEnabled() ? new BasicAuth("test", "changeme".toCharArray()) : null)))
.condition(scriptCondition("ctx.payload.hits.total == 1")) .condition(compareCondition("ctx.payload.hits.total", CompareCondition.Op.EQ, 1l))
.addAction("_id", loggingAction("watch [{{ctx.watch_id}}] matched"))) .addAction("_id", loggingAction("watch [{{ctx.watch_id}}] matched")))
.get(); .get();
@ -79,7 +79,7 @@ public class HttpInputIntegrationTests extends AbstractWatcherIntegrationTestCas
.input(httpInput(HttpRequestTemplate.builder(address.getHostString(), address.getPort()) .input(httpInput(HttpRequestTemplate.builder(address.getHostString(), address.getPort())
.path("/_cluster/stats") .path("/_cluster/stats")
.auth(shieldEnabled() ? new BasicAuth("test", "changeme".toCharArray()) : null))) .auth(shieldEnabled() ? new BasicAuth("test", "changeme".toCharArray()) : null)))
.condition(scriptCondition("ctx.payload.nodes.count.total >= 1")) .condition(compareCondition("ctx.payload.nodes.count.total", CompareCondition.Op.GTE, 1l))
.addAction("_id", loggingAction("watch [{{ctx.watch_id}}] matched"))) .addAction("_id", loggingAction("watch [{{ctx.watch_id}}] matched")))
.get(); .get();
@ -114,7 +114,7 @@ public class HttpInputIntegrationTests extends AbstractWatcherIntegrationTestCas
.setSource(watchBuilder() .setSource(watchBuilder()
.trigger(schedule(interval(10, IntervalSchedule.Interval.Unit.SECONDS))) .trigger(schedule(interval(10, IntervalSchedule.Interval.Unit.SECONDS)))
.input(httpInput(requestBuilder).extractKeys("hits.total")) .input(httpInput(requestBuilder).extractKeys("hits.total"))
.condition(scriptCondition("ctx.payload.hits.total == 1"))) .condition(compareCondition("ctx.payload.hits.total", CompareCondition.Op.EQ, 1l)))
.get(); .get();
// in this watcher the condition will fail, because max_score isn't extracted, only total: // in this watcher the condition will fail, because max_score isn't extracted, only total:
@ -122,7 +122,7 @@ public class HttpInputIntegrationTests extends AbstractWatcherIntegrationTestCas
.setSource(watchBuilder() .setSource(watchBuilder()
.trigger(schedule(interval(10, IntervalSchedule.Interval.Unit.SECONDS))) .trigger(schedule(interval(10, IntervalSchedule.Interval.Unit.SECONDS)))
.input(httpInput(requestBuilder).extractKeys("hits.total")) .input(httpInput(requestBuilder).extractKeys("hits.total"))
.condition(scriptCondition("ctx.payload.hits.max_score >= 0"))) .condition(compareCondition("ctx.payload.hits.max_score", CompareCondition.Op.GTE, 0l)))
.get(); .get();
if (timeWarped()) { if (timeWarped()) {

View File

@ -414,27 +414,38 @@ public abstract class AbstractWatcherIntegrationTestCase extends ESIntegTestCase
} }
protected void assertWatchWithNoActionNeeded(final String watchName, final long expectedWatchActionsWithNoActionNeeded) throws Exception { protected void assertWatchWithNoActionNeeded(final String watchName, final long expectedWatchActionsWithNoActionNeeded) throws Exception {
assertBusy(new Runnable() { final AtomicReference<SearchResponse> lastResponse = new AtomicReference<>();
@Override try {
public void run() { assertBusy(new Runnable() {
// The watch_history index gets created in the background when the first watch is triggered, so we to check first is this index is created and shards are started @Override
ClusterState state = client().admin().cluster().prepareState().get().getState(); public void run() {
String[] watchHistoryIndices = indexNameExpressionResolver().concreteIndices(state, IndicesOptions.lenientExpandOpen(), HistoryStore.INDEX_PREFIX + "*"); // The watch_history index gets created in the background when the first watch is triggered, so we to check first is this index is created and shards are started
assertThat(watchHistoryIndices, not(emptyArray())); ClusterState state = client().admin().cluster().prepareState().get().getState();
for (String index : watchHistoryIndices) { String[] watchHistoryIndices = indexNameExpressionResolver().concreteIndices(state, IndicesOptions.lenientExpandOpen(), HistoryStore.INDEX_PREFIX + "*");
IndexRoutingTable routingTable = state.getRoutingTable().index(index); assertThat(watchHistoryIndices, not(emptyArray()));
assertThat(routingTable, notNullValue()); for (String index : watchHistoryIndices) {
assertThat(routingTable.allPrimaryShardsActive(), is(true)); IndexRoutingTable routingTable = state.getRoutingTable().index(index);
assertThat(routingTable, notNullValue());
assertThat(routingTable.allPrimaryShardsActive(), is(true));
}
refresh();
SearchResponse searchResponse = client().prepareSearch(HistoryStore.INDEX_PREFIX + "*")
.setIndicesOptions(IndicesOptions.lenientExpandOpen())
.setQuery(boolQuery().must(matchQuery("watch_id", watchName)).must(matchQuery("state", ExecutionState.EXECUTION_NOT_NEEDED.id())))
.get();
lastResponse.set(searchResponse);
assertThat(searchResponse.getHits().getTotalHits(), greaterThanOrEqualTo(expectedWatchActionsWithNoActionNeeded));
} }
});
refresh(); } catch (AssertionError error) {
SearchResponse searchResponse = client().prepareSearch(HistoryStore.INDEX_PREFIX + "*") SearchResponse searchResponse = lastResponse.get();
.setIndicesOptions(IndicesOptions.lenientExpandOpen()) logger.info("Found [{}] records for watch [{}]", searchResponse.getHits().totalHits(), watchName);
.setQuery(boolQuery().must(matchQuery("watch_id", watchName)).must(matchQuery("state", ExecutionState.EXECUTION_NOT_NEEDED.id()))) int counter = 1;
.get(); for (SearchHit hit : searchResponse.getHits().getHits()) {
assertThat(searchResponse.getHits().getTotalHits(), greaterThanOrEqualTo(expectedWatchActionsWithNoActionNeeded)); logger.info("hit [{}]=\n {}", counter++, XContentHelper.convertToJson(hit.getSourceRef(), true, true));
} }
}); throw error;
}
} }
protected void assertWatchWithMinimumActionsCount(final String watchName, final ExecutionState recordState, final long recordCount) throws Exception { protected void assertWatchWithMinimumActionsCount(final String watchName, final ExecutionState recordState, final long recordCount) throws Exception {

View File

@ -31,6 +31,7 @@ import org.elasticsearch.watcher.actions.email.ExecutableEmailAction;
import org.elasticsearch.watcher.actions.email.service.*; import org.elasticsearch.watcher.actions.email.service.*;
import org.elasticsearch.watcher.actions.webhook.ExecutableWebhookAction; import org.elasticsearch.watcher.actions.webhook.ExecutableWebhookAction;
import org.elasticsearch.watcher.actions.webhook.WebhookAction; import org.elasticsearch.watcher.actions.webhook.WebhookAction;
import org.elasticsearch.watcher.condition.always.ExecutableAlwaysCondition;
import org.elasticsearch.watcher.condition.script.ExecutableScriptCondition; import org.elasticsearch.watcher.condition.script.ExecutableScriptCondition;
import org.elasticsearch.watcher.condition.script.ScriptCondition; import org.elasticsearch.watcher.condition.script.ScriptCondition;
import org.elasticsearch.watcher.execution.WatchExecutionContext; import org.elasticsearch.watcher.execution.WatchExecutionContext;
@ -105,7 +106,8 @@ public final class WatcherTestUtils {
} }
public static SearchRequest newInputSearchRequest(String... indices) { public static SearchRequest newInputSearchRequest(String... indices) {
SearchRequest request = new SearchRequest(indices); SearchRequest request = new SearchRequest();
request.indices(indices);
request.indicesOptions(WatcherUtils.DEFAULT_INDICES_OPTIONS); request.indicesOptions(WatcherUtils.DEFAULT_INDICES_OPTIONS);
request.searchType(ExecutableSearchInput.DEFAULT_SEARCH_TYPE); request.searchType(ExecutableSearchInput.DEFAULT_SEARCH_TYPE);
return request; return request;
@ -215,7 +217,7 @@ public final class WatcherTestUtils {
watchName, watchName,
new ScheduleTrigger(new CronSchedule("0/5 * * * * ? *")), new ScheduleTrigger(new CronSchedule("0/5 * * * * ? *")),
new ExecutableSimpleInput(new SimpleInput(new Payload.Simple(inputData)), logger), new ExecutableSimpleInput(new SimpleInput(new Payload.Simple(inputData)), logger),
new ExecutableScriptCondition(new ScriptCondition(Script.inline("return true").build()), logger, scriptService), new ExecutableAlwaysCondition(logger),
new ExecutableSearchTransform(new SearchTransform(transformRequest, null, null), logger, client, null), new ExecutableSearchTransform(new SearchTransform(transformRequest, null, null), logger, client, null),
new TimeValue(0), new TimeValue(0),
new ExecutableActions(actions), new ExecutableActions(actions),

View File

@ -5,7 +5,6 @@
*/ */
package org.elasticsearch.watcher.test.integration; package org.elasticsearch.watcher.test.integration;
import org.apache.lucene.util.LuceneTestCase.AwaitsFix;
import org.elasticsearch.ElasticsearchParseException; import org.elasticsearch.ElasticsearchParseException;
import org.elasticsearch.action.search.SearchRequest; import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchRequestBuilder; import org.elasticsearch.action.search.SearchRequestBuilder;
@ -14,13 +13,15 @@ import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.common.util.Callback; import org.elasticsearch.common.util.Callback;
import org.elasticsearch.common.xcontent.ToXContent; import org.elasticsearch.common.xcontent.ToXContent;
import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.script.ScriptService;
import org.elasticsearch.script.ScriptService.ScriptType; import org.elasticsearch.script.ScriptService.ScriptType;
import org.elasticsearch.script.Template; import org.elasticsearch.script.Template;
import org.elasticsearch.script.mustache.MustacheScriptEngineService;
import org.elasticsearch.search.builder.SearchSourceBuilder; import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.test.junit.annotations.TestLogging; import org.elasticsearch.test.junit.annotations.TestLogging;
import org.elasticsearch.watcher.client.WatchSourceBuilder; import org.elasticsearch.watcher.client.WatchSourceBuilder;
import org.elasticsearch.watcher.client.WatcherClient; import org.elasticsearch.watcher.client.WatcherClient;
import org.elasticsearch.watcher.condition.ConditionBuilders; import org.elasticsearch.watcher.condition.compare.CompareCondition;
import org.elasticsearch.watcher.support.WatcherUtils; import org.elasticsearch.watcher.support.WatcherUtils;
import org.elasticsearch.watcher.support.clock.SystemClock; import org.elasticsearch.watcher.support.clock.SystemClock;
import org.elasticsearch.watcher.support.xcontent.XContentSource; import org.elasticsearch.watcher.support.xcontent.XContentSource;
@ -35,11 +36,7 @@ import org.elasticsearch.watcher.trigger.schedule.support.WeekTimes;
import org.elasticsearch.watcher.watch.WatchStore; import org.elasticsearch.watcher.watch.WatchStore;
import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder; import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder;
import static org.elasticsearch.index.query.QueryBuilders.boolQuery; import static org.elasticsearch.index.query.QueryBuilders.*;
import static org.elasticsearch.index.query.QueryBuilders.matchAllQuery;
import static org.elasticsearch.index.query.QueryBuilders.matchQuery;
import static org.elasticsearch.index.query.QueryBuilders.rangeQuery;
import static org.elasticsearch.index.query.QueryBuilders.termQuery;
import static org.elasticsearch.search.builder.SearchSourceBuilder.searchSource; import static org.elasticsearch.search.builder.SearchSourceBuilder.searchSource;
import static org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertAcked; import static org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertAcked;
import static org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertHitCount; import static org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertHitCount;
@ -47,26 +44,24 @@ import static org.elasticsearch.watcher.actions.ActionBuilders.indexAction;
import static org.elasticsearch.watcher.actions.ActionBuilders.loggingAction; import static org.elasticsearch.watcher.actions.ActionBuilders.loggingAction;
import static org.elasticsearch.watcher.client.WatchSourceBuilders.watchBuilder; import static org.elasticsearch.watcher.client.WatchSourceBuilders.watchBuilder;
import static org.elasticsearch.watcher.condition.ConditionBuilders.alwaysCondition; import static org.elasticsearch.watcher.condition.ConditionBuilders.alwaysCondition;
import static org.elasticsearch.watcher.condition.ConditionBuilders.scriptCondition; import static org.elasticsearch.watcher.condition.ConditionBuilders.compareCondition;
import static org.elasticsearch.watcher.input.InputBuilders.searchInput; import static org.elasticsearch.watcher.input.InputBuilders.searchInput;
import static org.elasticsearch.watcher.input.InputBuilders.simpleInput; import static org.elasticsearch.watcher.input.InputBuilders.simpleInput;
import static org.elasticsearch.watcher.test.WatcherTestUtils.newInputSearchRequest; import static org.elasticsearch.watcher.test.WatcherTestUtils.newInputSearchRequest;
import static org.elasticsearch.watcher.test.WatcherTestUtils.xContentSource; import static org.elasticsearch.watcher.test.WatcherTestUtils.xContentSource;
import static org.elasticsearch.watcher.trigger.TriggerBuilders.schedule; import static org.elasticsearch.watcher.trigger.TriggerBuilders.schedule;
import static org.elasticsearch.watcher.trigger.schedule.Schedules.daily; import static org.elasticsearch.watcher.trigger.schedule.Schedules.*;
import static org.elasticsearch.watcher.trigger.schedule.Schedules.hourly; import static org.hamcrest.Matchers.*;
import static org.elasticsearch.watcher.trigger.schedule.Schedules.interval;
import static org.elasticsearch.watcher.trigger.schedule.Schedules.monthly;
import static org.elasticsearch.watcher.trigger.schedule.Schedules.weekly;
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.notNullValue;
/** /**
*/ */
@TestLogging("watcher.trigger.schedule:TRACE")
@AwaitsFix(bugUrl = "https://github.com/elastic/x-plugins/issues/724")
public class BasicWatcherTests extends AbstractWatcherIntegrationTestCase { public class BasicWatcherTests extends AbstractWatcherIntegrationTestCase {
@Override
protected boolean enableShield() {
return false;
}
public void testIndexWatch() throws Exception { public void testIndexWatch() throws Exception {
WatcherClient watcherClient = watcherClient(); WatcherClient watcherClient = watcherClient();
createIndex("idx"); createIndex("idx");
@ -78,7 +73,7 @@ public class BasicWatcherTests extends AbstractWatcherIntegrationTestCase {
.setSource(watchBuilder() .setSource(watchBuilder()
.trigger(schedule(interval(5, IntervalSchedule.Interval.Unit.SECONDS))) .trigger(schedule(interval(5, IntervalSchedule.Interval.Unit.SECONDS)))
.input(searchInput(searchRequest)) .input(searchInput(searchRequest))
.condition(scriptCondition("ctx.payload.hits.total == 1")) .condition(compareCondition("ctx.payload.hits.total", CompareCondition.Op.EQ, 1l))
.addAction("_logger", loggingAction("\n\n************\n" + .addAction("_logger", loggingAction("\n\n************\n" +
"total hits: {{ctx.payload.hits.total}}\n" + "total hits: {{ctx.payload.hits.total}}\n" +
"************\n") "************\n")
@ -104,7 +99,7 @@ public class BasicWatcherTests extends AbstractWatcherIntegrationTestCase {
.setSource(watchBuilder() .setSource(watchBuilder()
.trigger(schedule(interval(5, IntervalSchedule.Interval.Unit.SECONDS))) .trigger(schedule(interval(5, IntervalSchedule.Interval.Unit.SECONDS)))
.input(searchInput(searchRequest)) .input(searchInput(searchRequest))
.condition(scriptCondition("ctx.payload.hits.total == 1"))) .condition(compareCondition("ctx.payload.hits.total", CompareCondition.Op.EQ, 1l)))
.get(); .get();
if (timeWarped()) { if (timeWarped()) {
@ -135,7 +130,7 @@ public class BasicWatcherTests extends AbstractWatcherIntegrationTestCase {
.setSource(watchBuilder() .setSource(watchBuilder()
.trigger(schedule(interval(5, IntervalSchedule.Interval.Unit.SECONDS))) .trigger(schedule(interval(5, IntervalSchedule.Interval.Unit.SECONDS)))
.input(searchInput(searchRequest)) .input(searchInput(searchRequest))
.condition(scriptCondition("ctx.payload.hits.total == 1"))) .condition(compareCondition("ctx.payload.hits.total", CompareCondition.Op.EQ, 1l)))
.get(); .get();
assertThat(indexResponse.isCreated(), is(true)); assertThat(indexResponse.isCreated(), is(true));
@ -204,7 +199,7 @@ public class BasicWatcherTests extends AbstractWatcherIntegrationTestCase {
.addAction("_id", indexAction("idx", "action")); .addAction("_id", indexAction("idx", "action"));
watcherClient().preparePutWatch("_name") watcherClient().preparePutWatch("_name")
.setSource(source.condition(scriptCondition("ctx.payload.hits.total == 1"))) .setSource(source.condition(compareCondition("ctx.payload.hits.total", CompareCondition.Op.EQ, 1l)))
.get(); .get();
if (timeWarped()) { if (timeWarped()) {
@ -215,7 +210,7 @@ public class BasicWatcherTests extends AbstractWatcherIntegrationTestCase {
assertWatchWithMinimumPerformedActionsCount("_name", 0, false); assertWatchWithMinimumPerformedActionsCount("_name", 0, false);
watcherClient().preparePutWatch("_name") watcherClient().preparePutWatch("_name")
.setSource(source.condition(scriptCondition("ctx.payload.hits.total == 0"))) .setSource(source.condition(compareCondition("ctx.payload.hits.total", CompareCondition.Op.EQ, 0l)))
.get(); .get();
if (timeWarped()) { if (timeWarped()) {
@ -228,7 +223,7 @@ public class BasicWatcherTests extends AbstractWatcherIntegrationTestCase {
watcherClient().preparePutWatch("_name") watcherClient().preparePutWatch("_name")
.setSource(source .setSource(source
.trigger(schedule(Schedules.cron("0/1 * * * * ? 2020"))) .trigger(schedule(Schedules.cron("0/1 * * * * ? 2020")))
.condition(scriptCondition("ctx.payload.hits.total == 0"))) .condition(compareCondition("ctx.payload.hits.total", CompareCondition.Op.EQ, 0l)))
.get(); .get();
if (timeWarped()) { if (timeWarped()) {
@ -330,14 +325,14 @@ public class BasicWatcherTests extends AbstractWatcherIntegrationTestCase {
.setSource(watchBuilder() .setSource(watchBuilder()
.trigger(schedule(interval(5, IntervalSchedule.Interval.Unit.SECONDS))) .trigger(schedule(interval(5, IntervalSchedule.Interval.Unit.SECONDS)))
.input(searchInput(searchRequest).extractKeys("hits.total")) .input(searchInput(searchRequest).extractKeys("hits.total"))
.condition(scriptCondition("ctx.payload.hits.total == 1"))) .condition(compareCondition("ctx.payload.hits.total", CompareCondition.Op.EQ, 1l)))
.get(); .get();
// in this watcher the condition will fail, because max_score isn't extracted, only total: // in this watcher the condition will fail, because max_score isn't extracted, only total:
watcherClient.preparePutWatch("_name2") watcherClient.preparePutWatch("_name2")
.setSource(watchBuilder() .setSource(watchBuilder()
.trigger(schedule(interval(5, IntervalSchedule.Interval.Unit.SECONDS))) .trigger(schedule(interval(5, IntervalSchedule.Interval.Unit.SECONDS)))
.input(searchInput(searchRequest).extractKeys("hits.total")) .input(searchInput(searchRequest).extractKeys("hits.total"))
.condition(scriptCondition("ctx.payload.hits.max_score >= 0"))) .condition(compareCondition("ctx.payload.hits.max_score", CompareCondition.Op.GTE, 0l)))
.get(); .get();
if (timeWarped()) { if (timeWarped()) {
@ -444,7 +439,7 @@ public class BasicWatcherTests extends AbstractWatcherIntegrationTestCase {
.setSource(watchBuilder() .setSource(watchBuilder()
.trigger(schedule(interval("5s"))) .trigger(schedule(interval("5s")))
.input(searchInput(request)) .input(searchInput(request))
.condition(ConditionBuilders.scriptCondition("return ctx.payload.hits.total >= 3"))) .condition(compareCondition("ctx.payload.hits.total", CompareCondition.Op.GTE, 3l)))
.get(); .get();
logger.info("created watch [{}] at [{}]", watchName, SystemClock.INSTANCE.nowUTC()); logger.info("created watch [{}] at [{}]", watchName, SystemClock.INSTANCE.nowUTC());

View File

@ -15,6 +15,7 @@ import org.elasticsearch.test.junit.annotations.TestLogging;
import org.elasticsearch.watcher.WatcherState; import org.elasticsearch.watcher.WatcherState;
import org.elasticsearch.watcher.condition.Condition; import org.elasticsearch.watcher.condition.Condition;
import org.elasticsearch.watcher.condition.always.AlwaysCondition; import org.elasticsearch.watcher.condition.always.AlwaysCondition;
import org.elasticsearch.watcher.condition.compare.CompareCondition;
import org.elasticsearch.watcher.execution.ExecutionState; import org.elasticsearch.watcher.execution.ExecutionState;
import org.elasticsearch.watcher.execution.TriggeredWatch; import org.elasticsearch.watcher.execution.TriggeredWatch;
import org.elasticsearch.watcher.execution.TriggeredWatchStore; import org.elasticsearch.watcher.execution.TriggeredWatchStore;
@ -38,7 +39,7 @@ import static org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertHitC
import static org.elasticsearch.watcher.actions.ActionBuilders.indexAction; import static org.elasticsearch.watcher.actions.ActionBuilders.indexAction;
import static org.elasticsearch.watcher.client.WatchSourceBuilders.watchBuilder; import static org.elasticsearch.watcher.client.WatchSourceBuilders.watchBuilder;
import static org.elasticsearch.watcher.condition.ConditionBuilders.alwaysCondition; import static org.elasticsearch.watcher.condition.ConditionBuilders.alwaysCondition;
import static org.elasticsearch.watcher.condition.ConditionBuilders.scriptCondition; import static org.elasticsearch.watcher.condition.ConditionBuilders.compareCondition;
import static org.elasticsearch.watcher.input.InputBuilders.searchInput; import static org.elasticsearch.watcher.input.InputBuilders.searchInput;
import static org.elasticsearch.watcher.test.WatcherTestUtils.newInputSearchRequest; import static org.elasticsearch.watcher.test.WatcherTestUtils.newInputSearchRequest;
import static org.elasticsearch.watcher.trigger.TriggerBuilders.schedule; import static org.elasticsearch.watcher.trigger.TriggerBuilders.schedule;
@ -50,7 +51,6 @@ import static org.joda.time.DateTimeZone.UTC;
/** /**
*/ */
@TestLogging("watcher:TRACE") @TestLogging("watcher:TRACE")
@AwaitsFix(bugUrl = "https://github.com/elastic/x-plugins/issues/724")
public class BootStrapTests extends AbstractWatcherIntegrationTestCase { public class BootStrapTests extends AbstractWatcherIntegrationTestCase {
@Override @Override
protected boolean timeWarped() { protected boolean timeWarped() {
@ -221,7 +221,7 @@ public class BootStrapTests extends AbstractWatcherIntegrationTestCase {
.setSource(watchBuilder() .setSource(watchBuilder()
.trigger(schedule(cron("0 0/5 * * * ? 2050"))) .trigger(schedule(cron("0 0/5 * * * ? 2050")))
.input(searchInput(searchRequest)) .input(searchInput(searchRequest))
.condition(scriptCondition("ctx.payload.hits.total == 1")) .condition(compareCondition("ctx.payload.hits.total", CompareCondition.Op.EQ, 1l))
.buildAsBytes(XContentType.JSON) .buildAsBytes(XContentType.JSON)
) )
.setConsistencyLevel(WriteConsistencyLevel.ALL) .setConsistencyLevel(WriteConsistencyLevel.ALL)

View File

@ -27,6 +27,7 @@ import org.elasticsearch.watcher.WatcherState;
import org.elasticsearch.watcher.client.WatchSourceBuilder; import org.elasticsearch.watcher.client.WatchSourceBuilder;
import org.elasticsearch.watcher.client.WatchSourceBuilders; import org.elasticsearch.watcher.client.WatchSourceBuilders;
import org.elasticsearch.watcher.condition.ConditionBuilders; import org.elasticsearch.watcher.condition.ConditionBuilders;
import org.elasticsearch.watcher.condition.compare.CompareCondition;
import org.elasticsearch.watcher.execution.ExecutionService; import org.elasticsearch.watcher.execution.ExecutionService;
import org.elasticsearch.watcher.test.AbstractWatcherIntegrationTestCase; import org.elasticsearch.watcher.test.AbstractWatcherIntegrationTestCase;
import org.elasticsearch.watcher.test.WatcherTestUtils; import org.elasticsearch.watcher.test.WatcherTestUtils;
@ -41,6 +42,7 @@ import static org.elasticsearch.test.ESIntegTestCase.Scope.TEST;
import static org.elasticsearch.watcher.actions.ActionBuilders.loggingAction; import static org.elasticsearch.watcher.actions.ActionBuilders.loggingAction;
import static org.elasticsearch.watcher.client.WatchSourceBuilders.watchBuilder; import static org.elasticsearch.watcher.client.WatchSourceBuilders.watchBuilder;
import static org.elasticsearch.watcher.condition.ConditionBuilders.alwaysCondition; import static org.elasticsearch.watcher.condition.ConditionBuilders.alwaysCondition;
import static org.elasticsearch.watcher.condition.ConditionBuilders.compareCondition;
import static org.elasticsearch.watcher.input.InputBuilders.searchInput; import static org.elasticsearch.watcher.input.InputBuilders.searchInput;
import static org.elasticsearch.watcher.input.InputBuilders.simpleInput; import static org.elasticsearch.watcher.input.InputBuilders.simpleInput;
import static org.elasticsearch.watcher.trigger.TriggerBuilders.schedule; import static org.elasticsearch.watcher.trigger.TriggerBuilders.schedule;
@ -53,7 +55,6 @@ import static org.hamcrest.core.Is.is;
@TestLogging("discovery:TRACE,watcher:TRACE") @TestLogging("discovery:TRACE,watcher:TRACE")
@ClusterScope(scope = TEST, numClientNodes = 0, transportClientRatio = 0, randomDynamicTemplates = false, numDataNodes = 0) @ClusterScope(scope = TEST, numClientNodes = 0, transportClientRatio = 0, randomDynamicTemplates = false, numDataNodes = 0)
@SuppressLocalMode @SuppressLocalMode
@AwaitsFix(bugUrl = "https://github.com/elastic/x-plugins/issues/724")
public class NoMasterNodeTests extends AbstractWatcherIntegrationTestCase { public class NoMasterNodeTests extends AbstractWatcherIntegrationTestCase {
private ClusterDiscoveryConfiguration.UnicastZen config; private ClusterDiscoveryConfiguration.UnicastZen config;
@ -92,7 +93,7 @@ public class NoMasterNodeTests extends AbstractWatcherIntegrationTestCase {
WatchSourceBuilder watchSource = watchBuilder() WatchSourceBuilder watchSource = watchBuilder()
.trigger(schedule(cron("0/5 * * * * ? *"))) .trigger(schedule(cron("0/5 * * * * ? *")))
.input(searchInput(searchRequest)) .input(searchInput(searchRequest))
.condition(ConditionBuilders.scriptCondition("ctx.payload.hits.total == 1")); .condition(compareCondition("ctx.payload.hits.total", CompareCondition.Op.EQ, 1l));
// we first need to make sure the license is enabled, otherwise all APIs will be blocked // we first need to make sure the license is enabled, otherwise all APIs will be blocked
ensureLicenseEnabled(); ensureLicenseEnabled();
@ -201,7 +202,7 @@ public class NoMasterNodeTests extends AbstractWatcherIntegrationTestCase {
WatchSourceBuilder watchSource = watchBuilder() WatchSourceBuilder watchSource = watchBuilder()
.trigger(schedule(cron("0/5 * * * * ? *"))) .trigger(schedule(cron("0/5 * * * * ? *")))
.input(searchInput(searchRequest)) .input(searchInput(searchRequest))
.condition(ConditionBuilders.scriptCondition("ctx.payload.hits.total == 1")); .condition(compareCondition("ctx.payload.hits.total", CompareCondition.Op.EQ, 1l));
watcherClient().preparePutWatch(watchName).setSource(watchSource).get(); watcherClient().preparePutWatch(watchName).setSource(watchSource).get();
} }
ensureGreen(); ensureGreen();

View File

@ -5,12 +5,12 @@
*/ */
package org.elasticsearch.watcher.test.integration; package org.elasticsearch.watcher.test.integration;
import org.apache.lucene.util.LuceneTestCase.AwaitsFix;
import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.common.unit.TimeValue; import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.watcher.actions.logging.LoggingAction; import org.elasticsearch.watcher.actions.logging.LoggingAction;
import org.elasticsearch.watcher.actions.logging.LoggingLevel; import org.elasticsearch.watcher.actions.logging.LoggingLevel;
import org.elasticsearch.watcher.condition.always.AlwaysCondition; import org.elasticsearch.watcher.condition.always.AlwaysCondition;
import org.elasticsearch.watcher.condition.compare.CompareCondition;
import org.elasticsearch.watcher.execution.ActionExecutionMode; import org.elasticsearch.watcher.execution.ActionExecutionMode;
import org.elasticsearch.watcher.history.HistoryStore; import org.elasticsearch.watcher.history.HistoryStore;
import org.elasticsearch.watcher.support.text.TextTemplate; import org.elasticsearch.watcher.support.text.TextTemplate;
@ -32,7 +32,7 @@ import static org.elasticsearch.index.query.QueryBuilders.termQuery;
import static org.elasticsearch.search.builder.SearchSourceBuilder.searchSource; import static org.elasticsearch.search.builder.SearchSourceBuilder.searchSource;
import static org.elasticsearch.watcher.actions.ActionBuilders.loggingAction; import static org.elasticsearch.watcher.actions.ActionBuilders.loggingAction;
import static org.elasticsearch.watcher.client.WatchSourceBuilders.watchBuilder; import static org.elasticsearch.watcher.client.WatchSourceBuilders.watchBuilder;
import static org.elasticsearch.watcher.condition.ConditionBuilders.scriptCondition; import static org.elasticsearch.watcher.condition.ConditionBuilders.compareCondition;
import static org.elasticsearch.watcher.input.InputBuilders.searchInput; import static org.elasticsearch.watcher.input.InputBuilders.searchInput;
import static org.elasticsearch.watcher.trigger.TriggerBuilders.schedule; import static org.elasticsearch.watcher.trigger.TriggerBuilders.schedule;
import static org.elasticsearch.watcher.trigger.schedule.Schedules.cron; import static org.elasticsearch.watcher.trigger.schedule.Schedules.cron;
@ -43,7 +43,6 @@ import static org.joda.time.DateTimeZone.UTC;
/** /**
* *
*/ */
@AwaitsFix(bugUrl = "https://github.com/elastic/x-plugins/issues/724")
public class WatchMetadataTests extends AbstractWatcherIntegrationTestCase { public class WatchMetadataTests extends AbstractWatcherIntegrationTestCase {
public void testWatchMetadata() throws Exception { public void testWatchMetadata() throws Exception {
Map<String, Object> metadata = new HashMap<>(); Map<String, Object> metadata = new HashMap<>();
@ -59,7 +58,7 @@ public class WatchMetadataTests extends AbstractWatcherIntegrationTestCase {
.setSource(watchBuilder() .setSource(watchBuilder()
.trigger(schedule(cron("0/5 * * * * ? *"))) .trigger(schedule(cron("0/5 * * * * ? *")))
.input(searchInput(WatcherTestUtils.newInputSearchRequest("my-index").source(searchSource().query(matchAllQuery())))) .input(searchInput(WatcherTestUtils.newInputSearchRequest("my-index").source(searchSource().query(matchAllQuery()))))
.condition(scriptCondition("ctx.payload.hits.total == 1")) .condition(compareCondition("ctx.payload.hits.total", CompareCondition.Op.EQ, 1l))
.metadata(metadata)) .metadata(metadata))
.get(); .get();

View File

@ -6,7 +6,6 @@
package org.elasticsearch.watcher.transport.action.ack; package org.elasticsearch.watcher.transport.action.ack;
import org.apache.lucene.util.LuceneTestCase.AwaitsFix;
import org.elasticsearch.action.ActionRequestValidationException; import org.elasticsearch.action.ActionRequestValidationException;
import org.elasticsearch.action.delete.DeleteResponse; import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.action.get.GetRequest; import org.elasticsearch.action.get.GetRequest;
@ -15,6 +14,7 @@ import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.common.unit.TimeValue; import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.watcher.actions.ActionStatus; import org.elasticsearch.watcher.actions.ActionStatus;
import org.elasticsearch.watcher.client.WatcherClient; import org.elasticsearch.watcher.client.WatcherClient;
import org.elasticsearch.watcher.condition.compare.CompareCondition;
import org.elasticsearch.watcher.execution.ExecutionState; import org.elasticsearch.watcher.execution.ExecutionState;
import org.elasticsearch.watcher.history.HistoryStore; import org.elasticsearch.watcher.history.HistoryStore;
import org.elasticsearch.watcher.history.WatchRecord; import org.elasticsearch.watcher.history.WatchRecord;
@ -34,7 +34,7 @@ import static org.elasticsearch.index.query.QueryBuilders.matchAllQuery;
import static org.elasticsearch.index.query.QueryBuilders.matchQuery; import static org.elasticsearch.index.query.QueryBuilders.matchQuery;
import static org.elasticsearch.watcher.actions.ActionBuilders.indexAction; import static org.elasticsearch.watcher.actions.ActionBuilders.indexAction;
import static org.elasticsearch.watcher.client.WatchSourceBuilders.watchBuilder; import static org.elasticsearch.watcher.client.WatchSourceBuilders.watchBuilder;
import static org.elasticsearch.watcher.condition.ConditionBuilders.scriptCondition; import static org.elasticsearch.watcher.condition.ConditionBuilders.compareCondition;
import static org.elasticsearch.watcher.input.InputBuilders.searchInput; import static org.elasticsearch.watcher.input.InputBuilders.searchInput;
import static org.elasticsearch.watcher.test.WatcherTestUtils.matchAllRequest; import static org.elasticsearch.watcher.test.WatcherTestUtils.matchAllRequest;
import static org.elasticsearch.watcher.transform.TransformBuilders.searchTransform; import static org.elasticsearch.watcher.transform.TransformBuilders.searchTransform;
@ -48,7 +48,6 @@ import static org.hamcrest.core.IsEqual.equalTo;
/** /**
*/ */
@AwaitsFix(bugUrl = "https://github.com/elastic/x-plugins/issues/724")
public class WatchAckTests extends AbstractWatcherIntegrationTestCase { public class WatchAckTests extends AbstractWatcherIntegrationTestCase {
private IndexResponse indexTestDoc() { private IndexResponse indexTestDoc() {
createIndex("actions", "events"); createIndex("actions", "events");
@ -71,7 +70,7 @@ public class WatchAckTests extends AbstractWatcherIntegrationTestCase {
.setSource(watchBuilder() .setSource(watchBuilder()
.trigger(schedule(cron("0/5 * * * * ? *"))) .trigger(schedule(cron("0/5 * * * * ? *")))
.input(searchInput(matchAllRequest().indices("events"))) .input(searchInput(matchAllRequest().indices("events")))
.condition(scriptCondition("ctx.payload.hits.total > 0")) .condition(compareCondition("ctx.payload.hits.total", CompareCondition.Op.GT, 0l))
.transform(searchTransform(matchAllRequest().indices("events"))) .transform(searchTransform(matchAllRequest().indices("events")))
.addAction("_a1", indexAction("actions", "action1")) .addAction("_a1", indexAction("actions", "action1"))
.addAction("_a2", indexAction("actions", "action2")) .addAction("_a2", indexAction("actions", "action2"))
@ -143,7 +142,7 @@ public class WatchAckTests extends AbstractWatcherIntegrationTestCase {
.setSource(watchBuilder() .setSource(watchBuilder()
.trigger(schedule(cron("0/5 * * * * ? *"))) .trigger(schedule(cron("0/5 * * * * ? *")))
.input(searchInput(matchAllRequest().indices("events"))) .input(searchInput(matchAllRequest().indices("events")))
.condition(scriptCondition("ctx.payload.hits.total > 0")) .condition(compareCondition("ctx.payload.hits.total", CompareCondition.Op.GT, 0l))
.transform(searchTransform(matchAllRequest().indices("events"))) .transform(searchTransform(matchAllRequest().indices("events")))
.addAction("_a1", indexAction("actions", "action1")) .addAction("_a1", indexAction("actions", "action1"))
.addAction("_a2", indexAction("actions", "action2")) .addAction("_a2", indexAction("actions", "action2"))
@ -222,7 +221,7 @@ public class WatchAckTests extends AbstractWatcherIntegrationTestCase {
.setSource(watchBuilder() .setSource(watchBuilder()
.trigger(schedule(cron("0/5 * * * * ? *"))) .trigger(schedule(cron("0/5 * * * * ? *")))
.input(searchInput(matchAllRequest().indices("events"))) .input(searchInput(matchAllRequest().indices("events")))
.condition(scriptCondition("ctx.payload.hits.total > 0")) .condition(compareCondition("ctx.payload.hits.total", CompareCondition.Op.GT, 0l))
.transform(searchTransform(matchAllRequest().indices("events"))) .transform(searchTransform(matchAllRequest().indices("events")))
.addAction("_id", indexAction("actions", "action"))) .addAction("_id", indexAction("actions", "action")))
.get(); .get();
@ -292,7 +291,7 @@ public class WatchAckTests extends AbstractWatcherIntegrationTestCase {
watcherClient.prepareAckWatch("_id").setActionIds("id with whitespaces").get(); watcherClient.prepareAckWatch("_id").setActionIds("id with whitespaces").get();
fail("Expected ActionRequestValidationException"); fail("Expected ActionRequestValidationException");
} catch (ActionRequestValidationException e) { } catch (ActionRequestValidationException e) {
assertThat(e.getMessage(), containsString("Watch id cannot have white spaces")); assertThat(e.getMessage(), containsString("Action id cannot have white spaces"));
} }
} }
} }

View File

@ -5,7 +5,6 @@
*/ */
package org.elasticsearch.watcher.transport.action.stats; package org.elasticsearch.watcher.transport.action.stats;
import org.apache.lucene.util.LuceneTestCase.AwaitsFix;
import org.elasticsearch.action.search.SearchRequest; import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.common.unit.TimeValue; import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.test.ESIntegTestCase.ClusterScope; import org.elasticsearch.test.ESIntegTestCase.ClusterScope;
@ -13,7 +12,7 @@ import org.elasticsearch.test.junit.annotations.TestLogging;
import org.elasticsearch.watcher.WatcherBuild; import org.elasticsearch.watcher.WatcherBuild;
import org.elasticsearch.watcher.WatcherState; import org.elasticsearch.watcher.WatcherState;
import org.elasticsearch.watcher.client.WatcherClient; import org.elasticsearch.watcher.client.WatcherClient;
import org.elasticsearch.watcher.condition.ConditionBuilders; import org.elasticsearch.watcher.condition.compare.CompareCondition;
import org.elasticsearch.watcher.test.AbstractWatcherIntegrationTestCase; import org.elasticsearch.watcher.test.AbstractWatcherIntegrationTestCase;
import org.elasticsearch.watcher.test.WatcherTestUtils; import org.elasticsearch.watcher.test.WatcherTestUtils;
import org.elasticsearch.watcher.transport.actions.delete.DeleteWatchResponse; import org.elasticsearch.watcher.transport.actions.delete.DeleteWatchResponse;
@ -26,6 +25,7 @@ import static org.elasticsearch.index.query.QueryBuilders.termQuery;
import static org.elasticsearch.search.builder.SearchSourceBuilder.searchSource; import static org.elasticsearch.search.builder.SearchSourceBuilder.searchSource;
import static org.elasticsearch.test.ESIntegTestCase.Scope.TEST; import static org.elasticsearch.test.ESIntegTestCase.Scope.TEST;
import static org.elasticsearch.watcher.client.WatchSourceBuilders.watchBuilder; import static org.elasticsearch.watcher.client.WatchSourceBuilders.watchBuilder;
import static org.elasticsearch.watcher.condition.ConditionBuilders.compareCondition;
import static org.elasticsearch.watcher.input.InputBuilders.searchInput; import static org.elasticsearch.watcher.input.InputBuilders.searchInput;
import static org.elasticsearch.watcher.trigger.TriggerBuilders.schedule; import static org.elasticsearch.watcher.trigger.TriggerBuilders.schedule;
import static org.elasticsearch.watcher.trigger.schedule.Schedules.cron; import static org.elasticsearch.watcher.trigger.schedule.Schedules.cron;
@ -38,7 +38,6 @@ import static org.hamcrest.core.IsEqual.equalTo;
*/ */
@ClusterScope(scope = TEST, numClientNodes = 0, transportClientRatio = 0, randomDynamicTemplates = false) @ClusterScope(scope = TEST, numClientNodes = 0, transportClientRatio = 0, randomDynamicTemplates = false)
@TestLogging("watcher:TRACE") @TestLogging("watcher:TRACE")
@AwaitsFix(bugUrl = "https://github.com/elastic/x-plugins/issues/724")
public class WatcherStatsTests extends AbstractWatcherIntegrationTestCase { public class WatcherStatsTests extends AbstractWatcherIntegrationTestCase {
public void testStartedStats() throws Exception { public void testStartedStats() throws Exception {
WatcherStatsRequest watcherStatsRequest = watcherClient().prepareWatcherStats().request(); WatcherStatsRequest watcherStatsRequest = watcherClient().prepareWatcherStats().request();
@ -64,7 +63,7 @@ public class WatcherStatsTests extends AbstractWatcherIntegrationTestCase {
.setSource(watchBuilder() .setSource(watchBuilder()
.trigger(schedule(cron("* * * * * ? *"))) .trigger(schedule(cron("* * * * * ? *")))
.input(searchInput(searchRequest)) .input(searchInput(searchRequest))
.condition(ConditionBuilders.scriptCondition("ctx.payload.hits.total == 1")) .condition(compareCondition("ctx.payload.hits.total", CompareCondition.Op.EQ, 1l))
) )
.get(); .get();