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 org.elasticsearch.rest.action.RestStatusToXContentListener;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.util.Locale;
|
||||||
|
|
||||||
import static org.elasticsearch.rest.RestRequest.Method.POST;
|
import static org.elasticsearch.rest.RestRequest.Method.POST;
|
||||||
import static org.elasticsearch.rest.RestRequest.Method.PUT;
|
import static org.elasticsearch.rest.RestRequest.Method.PUT;
|
||||||
|
@ -63,9 +64,16 @@ public class RestIndexAction extends BaseRestHandler {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public RestChannelConsumer prepareRequest(RestRequest request, final NodeClient client) throws IOException {
|
public RestChannelConsumer prepareRequest(RestRequest request, final NodeClient client) throws IOException {
|
||||||
|
validateOpType(request.params().get("op_type"));
|
||||||
request.params().put("op_type", "create");
|
request.params().put("op_type", "create");
|
||||||
return RestIndexAction.this.prepareRequest(request, client);
|
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
|
@Override
|
||||||
|
|
|
@ -64,15 +64,10 @@ public class IndexRequestTests extends ESTestCase {
|
||||||
assertThat(indexRequest.opType(), equalTo(DocWriteRequest.OpType.INDEX));
|
assertThat(indexRequest.opType(), equalTo(DocWriteRequest.OpType.INDEX));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testReadBogusString() {
|
public void testReadIncorrectOpType() {
|
||||||
try {
|
IllegalArgumentException e = expectThrows(IllegalArgumentException.class, () -> new IndexRequest("").opType("foobar"));
|
||||||
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]"));
|
assertThat(e.getMessage(), equalTo("opType must be 'create' or 'index', found: [foobar]"));
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public void testCreateOperationRejectsVersions() {
|
public void testCreateOperationRejectsVersions() {
|
||||||
Set<VersionType> allButInternalSet = new HashSet<>(Arrays.asList(VersionType.values()));
|
Set<VersionType> allButInternalSet = new HashSet<>(Arrays.asList(VersionType.values()));
|
||||||
|
|
|
@ -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