/* * 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.test.rest.yaml.restspec; import org.elasticsearch.common.xcontent.yaml.YamlXContent; import org.elasticsearch.test.rest.yaml.section.AbstractClientYamlTestFragmentParserTestCase; import static org.hamcrest.Matchers.contains; import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.notNullValue; public class ClientYamlSuiteRestApiParserTests extends AbstractClientYamlTestFragmentParserTestCase { public void testParseRestSpecIndexApi() throws Exception { parser = createParser(YamlXContent.yamlXContent, REST_SPEC_INDEX_API); ClientYamlSuiteRestApi restApi = new ClientYamlSuiteRestApiParser().parse("location", parser); assertThat(restApi, notNullValue()); assertThat(restApi.getName(), equalTo("index")); assertThat(restApi.getMethods().size(), equalTo(2)); assertThat(restApi.getMethods().get(0), equalTo("POST")); assertThat(restApi.getMethods().get(1), equalTo("PUT")); assertThat(restApi.getPaths().size(), equalTo(2)); assertThat(restApi.getPaths().get(0), equalTo("/{index}/{type}")); assertThat(restApi.getPaths().get(1), equalTo("/{index}/{type}/{id}")); assertThat(restApi.getPathParts().size(), equalTo(3)); assertThat(restApi.getPathParts().get(0), equalTo("id")); assertThat(restApi.getPathParts().get(1), equalTo("index")); assertThat(restApi.getPathParts().get(2), equalTo("type")); assertThat(restApi.getParams().size(), equalTo(4)); assertThat(restApi.getParams(), contains("wait_for_active_shards", "op_type", "parent", "refresh")); assertThat(restApi.isBodySupported(), equalTo(true)); assertThat(restApi.isBodyRequired(), equalTo(true)); } public void testParseRestSpecGetTemplateApi() throws Exception { parser = createParser(YamlXContent.yamlXContent, REST_SPEC_GET_TEMPLATE_API); ClientYamlSuiteRestApi restApi = new ClientYamlSuiteRestApiParser().parse("location", parser); assertThat(restApi, notNullValue()); assertThat(restApi.getName(), equalTo("indices.get_template")); assertThat(restApi.getMethods().size(), equalTo(1)); assertThat(restApi.getMethods().get(0), equalTo("GET")); assertThat(restApi.getPaths().size(), equalTo(2)); assertThat(restApi.getPaths().get(0), equalTo("/_template")); assertThat(restApi.getPaths().get(1), equalTo("/_template/{name}")); assertThat(restApi.getPathParts().size(), equalTo(1)); assertThat(restApi.getPathParts().get(0), equalTo("name")); assertThat(restApi.getParams().size(), equalTo(0)); assertThat(restApi.isBodySupported(), equalTo(false)); assertThat(restApi.isBodyRequired(), equalTo(false)); } public void testParseRestSpecCountApi() throws Exception { parser = createParser(YamlXContent.yamlXContent, REST_SPEC_COUNT_API); ClientYamlSuiteRestApi restApi = new ClientYamlSuiteRestApiParser().parse("location", parser); assertThat(restApi, notNullValue()); assertThat(restApi.getName(), equalTo("count")); assertThat(restApi.getMethods().size(), equalTo(2)); assertThat(restApi.getMethods().get(0), equalTo("POST")); assertThat(restApi.getMethods().get(1), equalTo("GET")); assertThat(restApi.getPaths().size(), equalTo(3)); assertThat(restApi.getPaths().get(0), equalTo("/_count")); assertThat(restApi.getPaths().get(1), equalTo("/{index}/_count")); assertThat(restApi.getPaths().get(2), equalTo("/{index}/{type}/_count")); assertThat(restApi.getPathParts().size(), equalTo(2)); assertThat(restApi.getPathParts().get(0), equalTo("index")); assertThat(restApi.getPathParts().get(1), equalTo("type")); assertThat(restApi.getParams().size(), equalTo(1)); assertThat(restApi.getParams().get(0), equalTo("ignore_unavailable")); assertThat(restApi.isBodySupported(), equalTo(true)); assertThat(restApi.isBodyRequired(), equalTo(false)); } private static final String REST_SPEC_COUNT_API = "{\n" + " \"count\": {\n" + " \"documentation\": \"http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-count.html\",\n" + " \"methods\": [\"POST\", \"GET\"],\n" + " \"url\": {\n" + " \"path\": \"/_count\",\n" + " \"paths\": [\"/_count\", \"/{index}/_count\", \"/{index}/{type}/_count\"],\n" + " \"parts\": {\n" + " \"index\": {\n" + " \"type\" : \"list\",\n" + " \"description\" : \"A comma-separated list of indices to restrict the results\"\n" + " },\n" + " \"type\": {\n" + " \"type\" : \"list\",\n" + " \"description\" : \"A comma-separated list of types to restrict the results\"\n" + " }\n" + " },\n" + " \"params\": {\n" + " \"ignore_unavailable\": {\n" + " \"type\" : \"boolean\",\n" + " \"description\" : \"Whether specified concrete indices should be ignored when unavailable (missing or closed)\"\n" + " } \n" + " }\n" + " },\n" + " \"body\": {\n" + " \"description\" : \"A query to restrict the results specified with the Query DSL (optional)\"\n" + " }\n" + " }\n" + "}\n"; private static final String REST_SPEC_GET_TEMPLATE_API = "{\n" + " \"indices.get_template\": {\n" + " \"documentation\": \"http://www.elasticsearch.org/guide/reference/api/admin-indices-templates/\",\n" + " \"methods\": [\"GET\"],\n" + " \"url\": {\n" + " \"path\": \"/_template/{name}\",\n" + " \"paths\": [\"/_template\", \"/_template/{name}\"],\n" + " \"parts\": {\n" + " \"name\": {\n" + " \"type\" : \"string\",\n" + " \"required\" : false,\n" + " \"description\" : \"The name of the template\"\n" + " }\n" + " },\n" + " \"params\": {\n" + " }\n" + " },\n" + " \"body\": null\n" + " }\n" + "}"; private static final String REST_SPEC_INDEX_API = "{\n" + " \"index\": {\n" + " \"documentation\": \"http://elasticsearch.org/guide/reference/api/index_/\",\n" + " \"methods\": [\"POST\", \"PUT\"],\n" + " \"url\": {\n" + " \"path\": \"/{index}/{type}\",\n" + " \"paths\": [\"/{index}/{type}\", \"/{index}/{type}/{id}\"],\n" + " \"parts\": {\n" + " \"id\": {\n" + " \"type\" : \"string\",\n" + " \"description\" : \"Document ID\"\n" + " },\n" + " \"index\": {\n" + " \"type\" : \"string\",\n" + " \"required\" : true,\n" + " \"description\" : \"The name of the index\"\n" + " },\n" + " \"type\": {\n" + " \"type\" : \"string\",\n" + " \"required\" : true,\n" + " \"description\" : \"The type of the document\"\n" + " }\n" + " } ,\n" + " \"params\": {\n" + " \"wait_for_active_shards\": {\n" + " \"type\" : \"string\",\n" + " \"description\" : \"The number of active shard copies required to perform the operation\"\n" + " },\n" + " \"op_type\": {\n" + " \"type\" : \"enum\",\n" + " \"options\" : [\"index\", \"create\"],\n" + " \"default\" : \"index\",\n" + " \"description\" : \"Explicit operation type\"\n" + " },\n" + " \"parent\": {\n" + " \"type\" : \"string\",\n" + " \"description\" : \"ID of the parent document\"\n" + " },\n" + " \"refresh\": {\n" + " \"type\" : \"boolean\",\n" + " \"description\" : \"Refresh the index after performing the operation\"\n" + " }\n" + " }\n" + " },\n" + " \"body\": {\n" + " \"description\" : \"The document\",\n" + " \"required\" : true\n" + " }\n" + " }\n" + "}\n"; }