Skip to content

Commit

Permalink
Validate op_type for _create (#27483)
Browse files Browse the repository at this point in the history
  • Loading branch information
olcbean authored and s1monw committed Nov 23, 2017
1 parent 4017049 commit 05998f9
Show file tree
Hide file tree
Showing 3 changed files with 58 additions and 12 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
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;
Expand Down Expand Up @@ -63,9 +64,16 @@ public String getName() {

@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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,23 +55,18 @@ public void testIndexRequestOpTypeFromString() throws Exception {

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() {
Expand Down
Original file line number Diff line number Diff line change
@@ -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 + "]"));
}
}

0 comments on commit 05998f9

Please sign in to comment.