diff options
author | David Pilato <david@pilato.fr> | 2016-07-28 13:28:24 +0200 |
---|---|---|
committer | David Pilato <david@pilato.fr> | 2016-07-28 13:28:24 +0200 |
commit | d406b88857a299f7995ac829abf17020d2353069 (patch) | |
tree | dbc5bfd2e02cb136a90cdbd577ad616bc328f5ce /core/src/test/java/org/elasticsearch/action/ingest | |
parent | 9fa33b6d0714bec9eb7f7889d07673ff1dd261f3 (diff) |
Fix NPE when simulating a pipeline with no id
When you simulate a pipeline without specifying an id against a node where the request is redirected to a master node,
the request and the response is throwing a NPE:
```
java.lang.NullPointerException
at __randomizedtesting.SeedInfo.seed([3B9536AC6AA23C06:DD62280CF765DA1F]:0)
at org.elasticsearch.common.io.stream.StreamOutput.writeString(StreamOutput.java:300)
at org.elasticsearch.action.ingest.SimulatePipelineRequest.writeTo(SimulatePipelineRequest.java:92)
at org.elasticsearch.transport.local.LocalTransport.sendRequest(LocalTransport.java:222)
at org.elasticsearch.test.transport.AssertingLocalTransport.sendRequest(AssertingLocalTransport.java:95)
at org.elasticsearch.transport.TransportService.sendRequest(TransportService.java:470)
at org.elasticsearch.action.TransportActionNodeProxy.execute(TransportActionNodeProxy.java:51)
at org.elasticsearch.client.transport.support.TransportProxyClient.lambda$execute$441(TransportProxyClient.java:63)
at org.elasticsearch.client.transport.TransportClientNodesService.execute(TransportClientNodesService.java:233)
at org.elasticsearch.client.transport.support.TransportProxyClient.execute(TransportProxyClient.java:63)
at org.elasticsearch.client.transport.TransportClient.doExecute(TransportClient.java:309)
at org.elasticsearch.client.support.AbstractClient.execute(AbstractClient.java:403)
at org.elasticsearch.client.FilterClient.doExecute(FilterClient.java:67)
at org.elasticsearch.client.support.AbstractClient.execute(AbstractClient.java:403)
at org.elasticsearch.client.support.AbstractClient$ClusterAdmin.execute(AbstractClient.java:710)
at org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.java:80)
at org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.java:54)
at org.elasticsearch.action.ActionRequestBuilder.get(ActionRequestBuilder.java:62)
at org.elasticsearch.ingest.bano.BanoProcessorIntegrationTest.testSimulateProcessorConfigTarget(BanoProcessorIntegrationTest.java:139)
```
This patch fixes this and adds some random tests.
Diffstat (limited to 'core/src/test/java/org/elasticsearch/action/ingest')
-rw-r--r-- | core/src/test/java/org/elasticsearch/action/ingest/SimulatePipelineRequestTests.java | 63 | ||||
-rw-r--r-- | core/src/test/java/org/elasticsearch/action/ingest/SimulatePipelineResponseTests.java | 3 |
2 files changed, 65 insertions, 1 deletions
diff --git a/core/src/test/java/org/elasticsearch/action/ingest/SimulatePipelineRequestTests.java b/core/src/test/java/org/elasticsearch/action/ingest/SimulatePipelineRequestTests.java new file mode 100644 index 0000000000..2c2506308a --- /dev/null +++ b/core/src/test/java/org/elasticsearch/action/ingest/SimulatePipelineRequestTests.java @@ -0,0 +1,63 @@ +/* + * Licensed to Elasticsearch under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.elasticsearch.action.ingest; + +import org.elasticsearch.common.bytes.BytesArray; +import org.elasticsearch.common.bytes.BytesReference; +import org.elasticsearch.common.io.stream.BytesStreamOutput; +import org.elasticsearch.common.io.stream.StreamInput; +import org.elasticsearch.ingest.IngestDocument; +import org.elasticsearch.ingest.RandomDocumentPicks; +import org.elasticsearch.test.ESTestCase; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import static org.elasticsearch.ingest.IngestDocumentTests.assertIngestDocument; +import static org.hamcrest.CoreMatchers.equalTo; +import static org.hamcrest.CoreMatchers.instanceOf; +import static org.hamcrest.CoreMatchers.nullValue; + +public class SimulatePipelineRequestTests extends ESTestCase { + + public void testSerialization() throws IOException { + SimulatePipelineRequest request = new SimulatePipelineRequest(new BytesArray("")); + // Sometimes we set an id + if (randomBoolean()) { + request.setId(randomAsciiOfLengthBetween(1, 10)); + } + + // Sometimes we explicitly set a boolean (with whatever value) + if (randomBoolean()) { + request.setVerbose(randomBoolean()); + } + + BytesStreamOutput out = new BytesStreamOutput(); + request.writeTo(out); + StreamInput streamInput = out.bytes().streamInput(); + SimulatePipelineRequest otherRequest = new SimulatePipelineRequest(); + otherRequest.readFrom(streamInput); + + assertThat(otherRequest.getId(), equalTo(request.getId())); + assertThat(otherRequest.isVerbose(), equalTo(request.isVerbose())); + } +} diff --git a/core/src/test/java/org/elasticsearch/action/ingest/SimulatePipelineResponseTests.java b/core/src/test/java/org/elasticsearch/action/ingest/SimulatePipelineResponseTests.java index 576e8e0172..485dc8934c 100644 --- a/core/src/test/java/org/elasticsearch/action/ingest/SimulatePipelineResponseTests.java +++ b/core/src/test/java/org/elasticsearch/action/ingest/SimulatePipelineResponseTests.java @@ -39,6 +39,7 @@ public class SimulatePipelineResponseTests extends ESTestCase { public void testSerialization() throws IOException { boolean isVerbose = randomBoolean(); + String id = randomBoolean() ? randomAsciiOfLengthBetween(1, 10) : null; int numResults = randomIntBetween(1, 10); List<SimulateDocumentResult> results = new ArrayList<>(numResults); for (int i = 0; i < numResults; i++) { @@ -70,7 +71,7 @@ public class SimulatePipelineResponseTests extends ESTestCase { } } - SimulatePipelineResponse response = new SimulatePipelineResponse(randomAsciiOfLengthBetween(1, 10), isVerbose, results); + SimulatePipelineResponse response = new SimulatePipelineResponse(id, isVerbose, results); BytesStreamOutput out = new BytesStreamOutput(); response.writeTo(out); StreamInput streamInput = out.bytes().streamInput(); |