From 6d8e2069e0ab53a20c371dfa38945054b4857fd2 Mon Sep 17 00:00:00 2001 From: Hendrik Muhs Date: Wed, 27 Feb 2019 13:22:27 +0100 Subject: [PATCH 1/6] check if id from body match id from the url path --- .../core/dataframe/DataFrameMessages.java | 3 ++ .../transforms/DataFrameTransformConfig.java | 11 +++++- .../DataFrameTransformConfigTests.java | 39 +++++++++++++++++-- 3 files changed, 49 insertions(+), 4 deletions(-) diff --git a/x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/dataframe/DataFrameMessages.java b/x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/dataframe/DataFrameMessages.java index a395dcdb3dfd9..df9ab53c1ce98 100644 --- a/x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/dataframe/DataFrameMessages.java +++ b/x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/dataframe/DataFrameMessages.java @@ -24,6 +24,9 @@ public class DataFrameMessages { public static final String REST_PUT_DATA_FRAME_FAILED_TO_CREATE_TARGET_INDEX = "Failed to create target index"; public static final String REST_PUT_DATA_FRAME_FAILED_TO_START_PERSISTENT_TASK = "Failed to start persistent task, configuration has been cleaned up: [{0}]"; + public static final String REST_PUT_DATA_FRAME_INCONSISTENT_ID = + "Inconsistent id; ''{0}'' specified in the body differs from ''{1}'' specified as a URL argument"; + public static final String REST_DATA_FRAME_FAILED_TO_SERIALIZE_TRANSFORM = "Failed to serialise transform [{0}]"; public static final String FAILED_TO_CREATE_DESTINATION_INDEX = "Could not create destination index [{0}] for transform[{1}]"; diff --git a/x-pack/plugin/data-frame/src/main/java/org/elasticsearch/xpack/dataframe/transforms/DataFrameTransformConfig.java b/x-pack/plugin/data-frame/src/main/java/org/elasticsearch/xpack/dataframe/transforms/DataFrameTransformConfig.java index 8bb1a2b40082b..18cfcdd94dba9 100644 --- a/x-pack/plugin/data-frame/src/main/java/org/elasticsearch/xpack/dataframe/transforms/DataFrameTransformConfig.java +++ b/x-pack/plugin/data-frame/src/main/java/org/elasticsearch/xpack/dataframe/transforms/DataFrameTransformConfig.java @@ -62,7 +62,16 @@ public class DataFrameTransformConfig extends AbstractDiffable createParser(boolean lenient) { ConstructingObjectParser parser = new ConstructingObjectParser<>(NAME, lenient, (args, optionalId) -> { - String id = args[0] != null ? (String) args[0] : optionalId; + String id = (String) args[0]; + + // if the id has been specified in the body and the path, they must match + if (id == null) { + id = optionalId; + } else if (optionalId != null && id.equals(optionalId) == false) { + throw new IllegalArgumentException( + DataFrameMessages.getMessage(DataFrameMessages.REST_PUT_DATA_FRAME_INCONSISTENT_ID, id, optionalId)); + } + String source = (String) args[1]; String dest = (String) args[2]; diff --git a/x-pack/plugin/data-frame/src/test/java/org/elasticsearch/xpack/dataframe/transforms/DataFrameTransformConfigTests.java b/x-pack/plugin/data-frame/src/test/java/org/elasticsearch/xpack/dataframe/transforms/DataFrameTransformConfigTests.java index 31ba44d73d9d1..6d043caaaf07d 100644 --- a/x-pack/plugin/data-frame/src/test/java/org/elasticsearch/xpack/dataframe/transforms/DataFrameTransformConfigTests.java +++ b/x-pack/plugin/data-frame/src/test/java/org/elasticsearch/xpack/dataframe/transforms/DataFrameTransformConfigTests.java @@ -36,8 +36,7 @@ public class DataFrameTransformConfigTests extends AbstractSerializingDataFrameT public static DataFrameTransformConfig randomDataFrameTransformConfigWithoutHeaders() { return new DataFrameTransformConfig(randomAlphaOfLengthBetween(1, 10), randomAlphaOfLengthBetween(1, 10), - randomAlphaOfLengthBetween(1, 10), null, QueryConfigTests.randomQueryConfig(), - PivotConfigTests.randomPivotConfig()); + randomAlphaOfLengthBetween(1, 10), null, QueryConfigTests.randomQueryConfig(), PivotConfigTests.randomPivotConfig()); } public static DataFrameTransformConfig randomDataFrameTransformConfig() { @@ -46,6 +45,16 @@ public static DataFrameTransformConfig randomDataFrameTransformConfig() { PivotConfigTests.randomPivotConfig()); } + public static DataFrameTransformConfig randomDataFrameTransformConfigWithoutHeaders(String id) { + return new DataFrameTransformConfig(id, randomAlphaOfLengthBetween(1, 10), randomAlphaOfLengthBetween(1, 10), null, + QueryConfigTests.randomQueryConfig(), PivotConfigTests.randomPivotConfig()); + } + + public static DataFrameTransformConfig randomDataFrameTransformConfig(String id) { + return new DataFrameTransformConfig(id, randomAlphaOfLengthBetween(1, 10), randomAlphaOfLengthBetween(1, 10), randomHeaders(), + QueryConfigTests.randomQueryConfig(), PivotConfigTests.randomPivotConfig()); + } + public static DataFrameTransformConfig randomInvalidDataFrameTransformConfig() { if (randomBoolean()) { return new DataFrameTransformConfig(randomAlphaOfLengthBetween(1, 10), randomAlphaOfLengthBetween(1, 10), @@ -74,7 +83,7 @@ protected DataFrameTransformConfig doParseInstance(XContentParser parser) throws @Override protected DataFrameTransformConfig createTestInstance() { - return runWithHeaders ? randomDataFrameTransformConfig() : randomDataFrameTransformConfigWithoutHeaders(); + return runWithHeaders ? randomDataFrameTransformConfig(transformId) : randomDataFrameTransformConfigWithoutHeaders(transformId); } @Override @@ -143,6 +152,30 @@ public void testPreventHeaderInjection() throws IOException { () -> createDataFrameTransformConfigFromString(pivotTransform, "test_header_injection")); } + public void testSetIdInBody() throws IOException { + String pivotTransform = "{" + + " \"id\" : \"body_id\"," + + " \"source\" : \"src\"," + + " \"dest\" : \"dest\"," + + " \"pivot\" : {" + + " \"group_by\": {" + + " \"id\": {" + + " \"terms\": {" + + " \"field\": \"id\"" + + "} } }," + + " \"aggs\": {" + + " \"avg\": {" + + " \"avg\": {" + + " \"field\": \"points\"" + + "} } } } }"; + + DataFrameTransformConfig dataFrameTransformConfig = createDataFrameTransformConfigFromString(pivotTransform, "body_id"); + assertEquals("body_id", dataFrameTransformConfig.getId()); + + expectThrows(IllegalArgumentException.class, + () -> createDataFrameTransformConfigFromString(pivotTransform, "other_id")); + } + private DataFrameTransformConfig createDataFrameTransformConfigFromString(String json, String id) throws IOException { final XContentParser parser = XContentType.JSON.xContent().createParser(xContentRegistry(), DeprecationHandler.THROW_UNSUPPORTED_OPERATION, json); From 5b5174b0b5b9818a73a4b4a9868744531cccca5a Mon Sep 17 00:00:00 2001 From: Hendrik Muhs Date: Wed, 27 Feb 2019 13:22:51 +0100 Subject: [PATCH 2/6] disallow body for delete --- .../RestDeleteDataFrameTransformAction.java | 4 ++ ...stDeleteDataFrameTransformActionTests.java | 43 +++++++++++++++++++ 2 files changed, 47 insertions(+) create mode 100644 x-pack/plugin/data-frame/src/test/java/org/elasticsearch/xpack/dataframe/rest/action/RestDeleteDataFrameTransformActionTests.java diff --git a/x-pack/plugin/data-frame/src/main/java/org/elasticsearch/xpack/dataframe/rest/action/RestDeleteDataFrameTransformAction.java b/x-pack/plugin/data-frame/src/main/java/org/elasticsearch/xpack/dataframe/rest/action/RestDeleteDataFrameTransformAction.java index bd3917af9a7ce..085cf8e39a74d 100644 --- a/x-pack/plugin/data-frame/src/main/java/org/elasticsearch/xpack/dataframe/rest/action/RestDeleteDataFrameTransformAction.java +++ b/x-pack/plugin/data-frame/src/main/java/org/elasticsearch/xpack/dataframe/rest/action/RestDeleteDataFrameTransformAction.java @@ -27,6 +27,10 @@ public RestDeleteDataFrameTransformAction(Settings settings, RestController cont @Override protected RestChannelConsumer prepareRequest(RestRequest restRequest, NodeClient client) throws IOException { + if (restRequest.hasContent()) { + throw new IllegalArgumentException("delete data frame transforms requests can not have a request body"); + } + String id = restRequest.param(DataFrameField.ID.getPreferredName()); DeleteDataFrameTransformAction.Request request = new DeleteDataFrameTransformAction.Request(id); diff --git a/x-pack/plugin/data-frame/src/test/java/org/elasticsearch/xpack/dataframe/rest/action/RestDeleteDataFrameTransformActionTests.java b/x-pack/plugin/data-frame/src/test/java/org/elasticsearch/xpack/dataframe/rest/action/RestDeleteDataFrameTransformActionTests.java new file mode 100644 index 0000000000000..23b650479c59e --- /dev/null +++ b/x-pack/plugin/data-frame/src/test/java/org/elasticsearch/xpack/dataframe/rest/action/RestDeleteDataFrameTransformActionTests.java @@ -0,0 +1,43 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +package org.elasticsearch.xpack.dataframe.rest.action; + +import org.elasticsearch.client.node.NodeClient; +import org.elasticsearch.common.bytes.BytesArray; +import org.elasticsearch.common.settings.Settings; +import org.elasticsearch.common.xcontent.NamedXContentRegistry; +import org.elasticsearch.common.xcontent.XContentBuilder; +import org.elasticsearch.common.xcontent.XContentType; +import org.elasticsearch.common.xcontent.json.JsonXContent; +import org.elasticsearch.rest.RestController; +import org.elasticsearch.test.ESTestCase; +import org.elasticsearch.test.rest.FakeRestRequest; + +import static org.hamcrest.Matchers.equalTo; +import static org.mockito.Mockito.mock; + +public class RestDeleteDataFrameTransformActionTests extends ESTestCase { + + public void testBodyRejection() throws Exception { + final RestDeleteDataFrameTransformAction handler = new RestDeleteDataFrameTransformAction(Settings.EMPTY, mock(RestController.class)); + try (XContentBuilder builder = JsonXContent.contentBuilder()) { + builder.startObject(); + { + builder.field("id", "my_id"); + } + builder.endObject(); + final FakeRestRequest request = new FakeRestRequest.Builder(NamedXContentRegistry.EMPTY) + .withContent(new BytesArray(builder.toString()), XContentType.JSON) + .build(); + IllegalArgumentException e = expectThrows( + IllegalArgumentException.class, + () -> handler.prepareRequest(request, mock(NodeClient.class))); + assertThat(e.getMessage(), equalTo("delete data frame transforms requests can not have a request body")); + } + } + +} From 94ba65a3c3700c1cc66c3adfd4f3f14b58d5c6c8 Mon Sep 17 00:00:00 2001 From: Hendrik Muhs Date: Wed, 27 Feb 2019 14:25:45 +0100 Subject: [PATCH 3/6] allow get and stats without an id --- .../xpack/core/dataframe/DataFrameField.java | 3 +- .../DataFrameGetAndGetStatsIT.java | 71 +++++++++++++++++++ .../integration/DataFramePivotRestIT.java | 31 -------- .../integration/DataFrameRestTestCase.java | 30 ++++++++ .../RestGetDataFrameTransformsAction.java | 1 + ...RestGetDataFrameTransformsStatsAction.java | 1 + 6 files changed, 105 insertions(+), 32 deletions(-) create mode 100644 x-pack/plugin/data-frame/qa/single-node-tests/src/test/java/org/elasticsearch/xpack/dataframe/integration/DataFrameGetAndGetStatsIT.java diff --git a/x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/dataframe/DataFrameField.java b/x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/dataframe/DataFrameField.java index b753bf777d8f1..93280fc457fe2 100644 --- a/x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/dataframe/DataFrameField.java +++ b/x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/dataframe/DataFrameField.java @@ -27,7 +27,8 @@ public final class DataFrameField { // common strings public static final String TASK_NAME = "data_frame/transforms"; public static final String REST_BASE_PATH = "/_data_frame/"; - public static final String REST_BASE_PATH_TRANSFORMS_BY_ID = REST_BASE_PATH + "transforms/{id}/"; + public static final String REST_BASE_PATH_TRANSFORMS = REST_BASE_PATH + "transforms/"; + public static final String REST_BASE_PATH_TRANSFORMS_BY_ID = REST_BASE_PATH_TRANSFORMS + "{id}/"; // note: this is used to match tasks public static final String PERSISTENT_TASK_DESCRIPTION_PREFIX = "data_frame_"; diff --git a/x-pack/plugin/data-frame/qa/single-node-tests/src/test/java/org/elasticsearch/xpack/dataframe/integration/DataFrameGetAndGetStatsIT.java b/x-pack/plugin/data-frame/qa/single-node-tests/src/test/java/org/elasticsearch/xpack/dataframe/integration/DataFrameGetAndGetStatsIT.java new file mode 100644 index 0000000000000..42eff7ae6390f --- /dev/null +++ b/x-pack/plugin/data-frame/qa/single-node-tests/src/test/java/org/elasticsearch/xpack/dataframe/integration/DataFrameGetAndGetStatsIT.java @@ -0,0 +1,71 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +package org.elasticsearch.xpack.dataframe.integration; + +import org.elasticsearch.client.Request; +import org.elasticsearch.common.xcontent.support.XContentMapValues; +import org.junit.Before; + +import java.io.IOException; +import java.util.Map; + +public class DataFrameGetAndGetStatsIT extends DataFrameRestTestCase { + + private static boolean indicesCreated = false; + + // preserve indices in order to reuse source indices in several test cases + @Override + protected boolean preserveIndicesUponCompletion() { + return true; + } + + @Before + public void createIndexes() throws IOException { + + // it's not possible to run it as @BeforeClass as clients aren't initialized then, so we need this little hack + if (indicesCreated) { + return; + } + + createReviewsIndex(); + indicesCreated = true; + } + + public void testGetAndGetStats() throws Exception { + createPivotReviewsTransform("pivot_1", "pivot_reviews_1", null); + createPivotReviewsTransform("pivot_2", "pivot_reviews_2", null); + + startAndWaitForTransform("pivot_1", "pivot_reviews_1"); + startAndWaitForTransform("pivot_2", "pivot_reviews_2"); + + // check all the different ways to retrieve all stats + Map stats = entityAsMap(client().performRequest(new Request("GET", DATAFRAME_ENDPOINT + "_stats"))); + assertEquals(2, XContentMapValues.extractValue("count", stats)); + stats = entityAsMap(client().performRequest(new Request("GET", DATAFRAME_ENDPOINT + "_all/_stats"))); + assertEquals(2, XContentMapValues.extractValue("count", stats)); + stats = entityAsMap(client().performRequest(new Request("GET", DATAFRAME_ENDPOINT + "*/_stats"))); + assertEquals(2, XContentMapValues.extractValue("count", stats)); + + // only pivot_1 + stats = entityAsMap(client().performRequest(new Request("GET", DATAFRAME_ENDPOINT + "pivot_1/_stats"))); + assertEquals(1, XContentMapValues.extractValue("count", stats)); + + // check all the different ways to retrieve all transforms + Map transforms = entityAsMap(client().performRequest(new Request("GET", DATAFRAME_ENDPOINT))); + assertEquals(2, XContentMapValues.extractValue("count", transforms)); + transforms = entityAsMap(client().performRequest(new Request("GET", DATAFRAME_ENDPOINT + "_all"))); + assertEquals(2, XContentMapValues.extractValue("count", transforms)); + transforms = entityAsMap(client().performRequest(new Request("GET", DATAFRAME_ENDPOINT + "*"))); + assertEquals(2, XContentMapValues.extractValue("count", transforms)); + + // only pivot_1 + transforms = entityAsMap(client().performRequest(new Request("GET", DATAFRAME_ENDPOINT + "pivot_1"))); + assertEquals(1, XContentMapValues.extractValue("count", transforms)); + } + + +} diff --git a/x-pack/plugin/data-frame/qa/single-node-tests/src/test/java/org/elasticsearch/xpack/dataframe/integration/DataFramePivotRestIT.java b/x-pack/plugin/data-frame/qa/single-node-tests/src/test/java/org/elasticsearch/xpack/dataframe/integration/DataFramePivotRestIT.java index 70e90c60d9e5d..bfb8c436e08c5 100644 --- a/x-pack/plugin/data-frame/qa/single-node-tests/src/test/java/org/elasticsearch/xpack/dataframe/integration/DataFramePivotRestIT.java +++ b/x-pack/plugin/data-frame/qa/single-node-tests/src/test/java/org/elasticsearch/xpack/dataframe/integration/DataFramePivotRestIT.java @@ -7,7 +7,6 @@ package org.elasticsearch.xpack.dataframe.integration; import org.elasticsearch.client.Request; -import org.elasticsearch.client.Response; import org.elasticsearch.common.xcontent.support.XContentMapValues; import org.junit.Before; @@ -17,7 +16,6 @@ import java.util.List; import java.util.Map; import java.util.Set; -import java.util.concurrent.TimeUnit; import static org.hamcrest.Matchers.equalTo; @@ -255,35 +253,6 @@ public void testPreviewTransform() throws Exception { }); } - private void startAndWaitForTransform(String transformId, String dataFrameIndex) throws IOException, Exception { - // start the transform - final Request startTransformRequest = new Request("POST", DATAFRAME_ENDPOINT + transformId + "/_start"); - Map startTransformResponse = entityAsMap(client().performRequest(startTransformRequest)); - assertThat(startTransformResponse.get("started"), equalTo(Boolean.TRUE)); - - // wait until the dataframe has been created and all data is available - waitForDataFrameGeneration(transformId); - refreshIndex(dataFrameIndex); - } - - private void waitForDataFrameGeneration(String transformId) throws Exception { - assertBusy(() -> { - long generation = getDataFrameGeneration(transformId); - assertEquals(1, generation); - }, 30, TimeUnit.SECONDS); - } - - private static int getDataFrameGeneration(String transformId) throws IOException { - Response statsResponse = client().performRequest(new Request("GET", DATAFRAME_ENDPOINT + transformId + "/_stats")); - - Map transformStatsAsMap = (Map) ((List) entityAsMap(statsResponse).get("transforms")).get(0); - return (int) XContentMapValues.extractValue("state.generation", transformStatsAsMap); - } - - private void refreshIndex(String index) throws IOException { - assertOK(client().performRequest(new Request("POST", index + "/_refresh"))); - } - private void assertOnePivotValue(String query, double expected) throws IOException { Map searchResult = getAsMap(query); diff --git a/x-pack/plugin/data-frame/qa/single-node-tests/src/test/java/org/elasticsearch/xpack/dataframe/integration/DataFrameRestTestCase.java b/x-pack/plugin/data-frame/qa/single-node-tests/src/test/java/org/elasticsearch/xpack/dataframe/integration/DataFrameRestTestCase.java index bd6812ae4896d..1fcebc232951b 100644 --- a/x-pack/plugin/data-frame/qa/single-node-tests/src/test/java/org/elasticsearch/xpack/dataframe/integration/DataFrameRestTestCase.java +++ b/x-pack/plugin/data-frame/qa/single-node-tests/src/test/java/org/elasticsearch/xpack/dataframe/integration/DataFrameRestTestCase.java @@ -23,6 +23,7 @@ import java.util.Collections; import java.util.List; import java.util.Map; +import java.util.concurrent.TimeUnit; import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder; import static org.hamcrest.Matchers.equalTo; @@ -143,6 +144,28 @@ protected void createPivotReviewsTransform(String transformId, String dataFrameI assertTrue(indexExists(dataFrameIndex)); } + protected void startAndWaitForTransform(String transformId, String dataFrameIndex) throws IOException, Exception { + // start the transform + final Request startTransformRequest = new Request("POST", DATAFRAME_ENDPOINT + transformId + "/_start"); + Map startTransformResponse = entityAsMap(client().performRequest(startTransformRequest)); + assertThat(startTransformResponse.get("started"), equalTo(Boolean.TRUE)); + + // wait until the dataframe has been created and all data is available + waitForDataFrameGeneration(transformId); + refreshIndex(dataFrameIndex); + } + + void waitForDataFrameGeneration(String transformId) throws Exception { + assertBusy(() -> { + long generation = getDataFrameGeneration(transformId); + assertEquals(1, generation); + }, 30, TimeUnit.SECONDS); + } + + void refreshIndex(String index) throws IOException { + assertOK(client().performRequest(new Request("POST", index + "/_refresh"))); + } + @SuppressWarnings("unchecked") private static List> getDataFrameTransforms() throws IOException { Response response = adminClient().performRequest(new Request("GET", DATAFRAME_ENDPOINT + "_all")); @@ -221,4 +244,11 @@ protected static void wipeIndices() throws IOException { } } } + + static int getDataFrameGeneration(String transformId) throws IOException { + Response statsResponse = client().performRequest(new Request("GET", DATAFRAME_ENDPOINT + transformId + "/_stats")); + + Map transformStatsAsMap = (Map) ((List) entityAsMap(statsResponse).get("transforms")).get(0); + return (int) XContentMapValues.extractValue("state.generation", transformStatsAsMap); + } } diff --git a/x-pack/plugin/data-frame/src/main/java/org/elasticsearch/xpack/dataframe/rest/action/RestGetDataFrameTransformsAction.java b/x-pack/plugin/data-frame/src/main/java/org/elasticsearch/xpack/dataframe/rest/action/RestGetDataFrameTransformsAction.java index 1d35f7212108f..a5281f9976af0 100644 --- a/x-pack/plugin/data-frame/src/main/java/org/elasticsearch/xpack/dataframe/rest/action/RestGetDataFrameTransformsAction.java +++ b/x-pack/plugin/data-frame/src/main/java/org/elasticsearch/xpack/dataframe/rest/action/RestGetDataFrameTransformsAction.java @@ -19,6 +19,7 @@ public class RestGetDataFrameTransformsAction extends BaseRestHandler { public RestGetDataFrameTransformsAction(Settings settings, RestController controller) { super(settings); + controller.registerHandler(RestRequest.Method.GET, DataFrameField.REST_BASE_PATH_TRANSFORMS, this); controller.registerHandler(RestRequest.Method.GET, DataFrameField.REST_BASE_PATH_TRANSFORMS_BY_ID, this); } diff --git a/x-pack/plugin/data-frame/src/main/java/org/elasticsearch/xpack/dataframe/rest/action/RestGetDataFrameTransformsStatsAction.java b/x-pack/plugin/data-frame/src/main/java/org/elasticsearch/xpack/dataframe/rest/action/RestGetDataFrameTransformsStatsAction.java index 6ae2c16166704..7588aa6401c41 100644 --- a/x-pack/plugin/data-frame/src/main/java/org/elasticsearch/xpack/dataframe/rest/action/RestGetDataFrameTransformsStatsAction.java +++ b/x-pack/plugin/data-frame/src/main/java/org/elasticsearch/xpack/dataframe/rest/action/RestGetDataFrameTransformsStatsAction.java @@ -19,6 +19,7 @@ public class RestGetDataFrameTransformsStatsAction extends BaseRestHandler { public RestGetDataFrameTransformsStatsAction(Settings settings, RestController controller) { super(settings); + controller.registerHandler(RestRequest.Method.GET, DataFrameField.REST_BASE_PATH_TRANSFORMS + "_stats", this); controller.registerHandler(RestRequest.Method.GET, DataFrameField.REST_BASE_PATH_TRANSFORMS_BY_ID + "_stats", this); } From 9a8f76677b30c51d3d03840467016dcab609ecb0 Mon Sep 17 00:00:00 2001 From: Hendrik Muhs Date: Wed, 27 Feb 2019 14:37:26 +0100 Subject: [PATCH 4/6] fix line length --- .../rest/action/RestDeleteDataFrameTransformActionTests.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/plugin/data-frame/src/test/java/org/elasticsearch/xpack/dataframe/rest/action/RestDeleteDataFrameTransformActionTests.java b/x-pack/plugin/data-frame/src/test/java/org/elasticsearch/xpack/dataframe/rest/action/RestDeleteDataFrameTransformActionTests.java index 23b650479c59e..7f0158548c11b 100644 --- a/x-pack/plugin/data-frame/src/test/java/org/elasticsearch/xpack/dataframe/rest/action/RestDeleteDataFrameTransformActionTests.java +++ b/x-pack/plugin/data-frame/src/test/java/org/elasticsearch/xpack/dataframe/rest/action/RestDeleteDataFrameTransformActionTests.java @@ -23,7 +23,8 @@ public class RestDeleteDataFrameTransformActionTests extends ESTestCase { public void testBodyRejection() throws Exception { - final RestDeleteDataFrameTransformAction handler = new RestDeleteDataFrameTransformAction(Settings.EMPTY, mock(RestController.class)); + final RestDeleteDataFrameTransformAction handler = new RestDeleteDataFrameTransformAction(Settings.EMPTY, + mock(RestController.class)); try (XContentBuilder builder = JsonXContent.contentBuilder()) { builder.startObject(); { From 8e07b0e98da7fe46108d75717fdec1d885952bae Mon Sep 17 00:00:00 2001 From: Hendrik Muhs Date: Wed, 27 Feb 2019 14:40:13 +0100 Subject: [PATCH 5/6] id in body and url must match --- .../action/PutDataFrameTransformActionRequestTests.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x-pack/plugin/data-frame/src/test/java/org/elasticsearch/xpack/dataframe/action/PutDataFrameTransformActionRequestTests.java b/x-pack/plugin/data-frame/src/test/java/org/elasticsearch/xpack/dataframe/action/PutDataFrameTransformActionRequestTests.java index 983222127c9cd..8755080a1efcc 100644 --- a/x-pack/plugin/data-frame/src/test/java/org/elasticsearch/xpack/dataframe/action/PutDataFrameTransformActionRequestTests.java +++ b/x-pack/plugin/data-frame/src/test/java/org/elasticsearch/xpack/dataframe/action/PutDataFrameTransformActionRequestTests.java @@ -68,7 +68,7 @@ protected boolean supportsUnknownFields() { @Override protected Request createTestInstance() { - DataFrameTransformConfig config = DataFrameTransformConfigTests.randomDataFrameTransformConfigWithoutHeaders(); + DataFrameTransformConfig config = DataFrameTransformConfigTests.randomDataFrameTransformConfigWithoutHeaders(transformId); return new Request(config); } } From a1ab5c9c7d6e244542ee3b5436aaa28acdf8005f Mon Sep 17 00:00:00 2001 From: Hendrik Muhs Date: Wed, 27 Feb 2019 21:00:32 +0100 Subject: [PATCH 6/6] add a test of the message string --- .../dataframe/transforms/DataFrameTransformConfigTests.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/x-pack/plugin/data-frame/src/test/java/org/elasticsearch/xpack/dataframe/transforms/DataFrameTransformConfigTests.java b/x-pack/plugin/data-frame/src/test/java/org/elasticsearch/xpack/dataframe/transforms/DataFrameTransformConfigTests.java index 6d043caaaf07d..95436bbf8ebc4 100644 --- a/x-pack/plugin/data-frame/src/test/java/org/elasticsearch/xpack/dataframe/transforms/DataFrameTransformConfigTests.java +++ b/x-pack/plugin/data-frame/src/test/java/org/elasticsearch/xpack/dataframe/transforms/DataFrameTransformConfigTests.java @@ -172,8 +172,11 @@ public void testSetIdInBody() throws IOException { DataFrameTransformConfig dataFrameTransformConfig = createDataFrameTransformConfigFromString(pivotTransform, "body_id"); assertEquals("body_id", dataFrameTransformConfig.getId()); - expectThrows(IllegalArgumentException.class, + IllegalArgumentException ex = expectThrows(IllegalArgumentException.class, () -> createDataFrameTransformConfigFromString(pivotTransform, "other_id")); + + assertEquals("Inconsistent id; 'body_id' specified in the body differs from 'other_id' specified as a URL argument", + ex.getCause().getMessage()); } private DataFrameTransformConfig createDataFrameTransformConfigFromString(String json, String id) throws IOException {