Validate `op_type` for `_create` (#27483)
This commit is contained in:
parent
4017049bac
commit
05998f91d0
|
@ -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
|
||||
|
|
|
@ -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() {
|
||||
|
|
|
@ -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 + "]"));
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue