Validate `op_type` for `_create` (#27483)

This commit is contained in:
olcbean 2017-11-23 07:19:47 +01:00 committed by Simon Willnauer
parent 4017049bac
commit 05998f91d0
3 changed files with 58 additions and 12 deletions

View File

@ -31,6 +31,7 @@ import org.elasticsearch.rest.action.RestActions;
import org.elasticsearch.rest.action.RestStatusToXContentListener;
import java.io.IOException;
import java.util.Locale;
import static org.elasticsearch.rest.RestRequest.Method.POST;
import static org.elasticsearch.rest.RestRequest.Method.PUT;
@ -63,9 +64,16 @@ public class RestIndexAction extends BaseRestHandler {
@Override
public RestChannelConsumer prepareRequest(RestRequest request, final NodeClient client) throws IOException {
validateOpType(request.params().get("op_type"));
request.params().put("op_type", "create");
return RestIndexAction.this.prepareRequest(request, client);
}
void validateOpType(String opType) {
if (null != opType && false == "create".equals(opType.toLowerCase(Locale.ROOT))) {
throw new IllegalArgumentException("opType must be 'create', found: [" + opType + "]");
}
}
}
@Override

View File

@ -55,23 +55,18 @@ public class IndexRequestTests extends ESTestCase {
IndexRequest indexRequest = new IndexRequest("");
indexRequest.opType(create);
assertThat(indexRequest.opType() , equalTo(DocWriteRequest.OpType.CREATE));
assertThat(indexRequest.opType(), equalTo(DocWriteRequest.OpType.CREATE));
indexRequest.opType(createUpper);
assertThat(indexRequest.opType() , equalTo(DocWriteRequest.OpType.CREATE));
assertThat(indexRequest.opType(), equalTo(DocWriteRequest.OpType.CREATE));
indexRequest.opType(index);
assertThat(indexRequest.opType() , equalTo(DocWriteRequest.OpType.INDEX));
assertThat(indexRequest.opType(), equalTo(DocWriteRequest.OpType.INDEX));
indexRequest.opType(indexUpper);
assertThat(indexRequest.opType() , equalTo(DocWriteRequest.OpType.INDEX));
assertThat(indexRequest.opType(), equalTo(DocWriteRequest.OpType.INDEX));
}
public void testReadBogusString() {
try {
IndexRequest indexRequest = new IndexRequest("");
indexRequest.opType("foobar");
fail("Expected IllegalArgumentException");
} catch (IllegalArgumentException e) {
assertThat(e.getMessage(), equalTo("opType must be 'create' or 'index', found: [foobar]"));
}
public void testReadIncorrectOpType() {
IllegalArgumentException e = expectThrows(IllegalArgumentException.class, () -> new IndexRequest("").opType("foobar"));
assertThat(e.getMessage(), equalTo("opType must be 'create' or 'index', found: [foobar]"));
}
public void testCreateOperationRejectsVersions() {

View File

@ -0,0 +1,43 @@
/*
* 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.rest.action.document;
import org.elasticsearch.Version;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.rest.RestController;
import org.elasticsearch.test.ESTestCase;
import static org.hamcrest.Matchers.equalTo;
import static org.mockito.Mockito.mock;
public class RestIndexActionTests extends ESTestCase {
public void testCreateOpTypeValidation() throws Exception {
Settings settings = settings(Version.CURRENT).build();
RestIndexAction.CreateHandler create = new RestIndexAction(settings, mock(RestController.class)).new CreateHandler(settings);
String opType = randomFrom("CREATE", null);
create.validateOpType(opType);
String illegalOpType = randomFrom("index", "unknown", "");
IllegalArgumentException e = expectThrows(IllegalArgumentException.class, () -> create.validateOpType(illegalOpType));
assertThat(e.getMessage(), equalTo("opType must be 'create', found: [" + illegalOpType + "]"));
}
}