/*
* 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.test;
import org.elasticsearch.Version;
import org.elasticsearch.common.xcontent.yaml.YamlXContent;
import org.elasticsearch.test.rest.parser.RestTestSectionParser;
import org.elasticsearch.test.rest.parser.RestTestSuiteParseContext;
import org.elasticsearch.test.rest.section.*;
import org.junit.Test;
import java.util.Map;
import static org.hamcrest.Matchers.*;
public class TestSectionParserTests extends AbstractParserTestCase {
@Test
public void testParseTestSectionWithDoSection() throws Exception {
parser = YamlXContent.yamlXContent.createParser(
"\"First test section\": \n" +
" - do :\n" +
" catch: missing\n" +
" indices.get_warmer:\n" +
" index: test_index\n" +
" name: test_warmer"
);
RestTestSectionParser testSectionParser = new RestTestSectionParser();
TestSection testSection = testSectionParser.parse(new RestTestSuiteParseContext("api", "suite", parser));
assertThat(testSection, notNullValue());
assertThat(testSection.getName(), equalTo("First test section"));
assertThat(testSection.getSkipSection(), equalTo(SkipSection.EMPTY));
assertThat(testSection.getExecutableSections().size(), equalTo(1));
DoSection doSection = (DoSection)testSection.getExecutableSections().get(0);
assertThat(doSection.getCatch(), equalTo("missing"));
assertThat(doSection.getApiCallSection(), notNullValue());
assertThat(doSection.getApiCallSection().getApi(), equalTo("indices.get_warmer"));
assertThat(doSection.getApiCallSection().getParams().size(), equalTo(2));
assertThat(doSection.getApiCallSection().hasBody(), equalTo(false));
}
@Test
public void testParseTestSectionWithDoSetAndSkipSectionsNoSkip() throws Exception {
String yaml =
"\"First test section\": \n" +
" - skip:\n" +
" version: \"0.90.0 - 0.90.7\"\n" +
" reason: \"Update doesn't return metadata fields, waiting for #3259\"\n" +
" - do :\n" +
" catch: missing\n" +
" indices.get_warmer:\n" +
" index: test_index\n" +
" name: test_warmer\n" +
" - set: {_scroll_id: scroll_id}";
RestTestSectionParser testSectionParser = new RestTestSectionParser();
parser = YamlXContent.yamlXContent.createParser(yaml);
TestSection testSection = testSectionParser.parse(new RestTestSuiteParseContext("api", "suite", parser));
assertThat(testSection, notNullValue());
assertThat(testSection.getName(), equalTo("First test section"));
assertThat(testSection.getSkipSection(), notNullValue());
assertThat(testSection.getSkipSection().getLowerVersion(), equalTo(Version.V_0_90_0));
assertThat(testSection.getSkipSection().getUpperVersion(), equalTo(Version.V_0_90_7));
assertThat(testSection.getSkipSection().getReason(), equalTo("Update doesn't return metadata fields, waiting for #3259"));
assertThat(testSection.getExecutableSections().size(), equalTo(2));
DoSection doSection = (DoSection)testSection.getExecutableSections().get(0);
assertThat(doSection.getCatch(), equalTo("missing"));
assertThat(doSection.getApiCallSection(), notNullValue());
assertThat(doSection.getApiCallSection().getApi(), equalTo("indices.get_warmer"));
assertThat(doSection.getApiCallSection().getParams().size(), equalTo(2));
assertThat(doSection.getApiCallSection().hasBody(), equalTo(false));
SetSection setSection = (SetSection) testSection.getExecutableSections().get(1);
assertThat(setSection.getStash().size(), equalTo(1));
assertThat(setSection.getStash().get("_scroll_id"), equalTo("scroll_id"));
}
@Test
public void testParseTestSectionWithMultipleDoSections() throws Exception {
parser = YamlXContent.yamlXContent.createParser(
"\"Basic\":\n" +
"\n" +
" - do:\n" +
" index:\n" +
" index: test_1\n" +
" type: test\n" +
" id: 中文\n" +
" body: { \"foo\": \"Hello: 中文\" }\n" +
" - do:\n" +
" get:\n" +
" index: test_1\n" +
" type: test\n" +
" id: 中文"
);
RestTestSectionParser testSectionParser = new RestTestSectionParser();
TestSection testSection = testSectionParser.parse(new RestTestSuiteParseContext("api", "suite", parser));
assertThat(testSection, notNullValue());
assertThat(testSection.getName(), equalTo("Basic"));
assertThat(testSection.getSkipSection(), equalTo(SkipSection.EMPTY));
assertThat(testSection.getExecutableSections().size(), equalTo(2));
DoSection doSection = (DoSection)testSection.getExecutableSections().get(0);
assertThat(doSection.getCatch(), nullValue());
assertThat(doSection.getApiCallSection(), notNullValue());
assertThat(doSection.getApiCallSection().getApi(), equalTo("index"));
assertThat(doSection.getApiCallSection().getParams().size(), equalTo(3));
assertThat(doSection.getApiCallSection().hasBody(), equalTo(true));
doSection = (DoSection)testSection.getExecutableSections().get(1);
assertThat(doSection.getCatch(), nullValue());
assertThat(doSection.getApiCallSection(), notNullValue());
assertThat(doSection.getApiCallSection().getApi(), equalTo("get"));
assertThat(doSection.getApiCallSection().getParams().size(), equalTo(3));
assertThat(doSection.getApiCallSection().hasBody(), equalTo(false));
}
@Test
public void testParseTestSectionWithDoSectionsAndAssertions() throws Exception {
parser = YamlXContent.yamlXContent.createParser(
"\"Basic\":\n" +
"\n" +
" - do:\n" +
" index:\n" +
" index: test_1\n" +
" type: test\n" +
" id: 中文\n" +
" body: { \"foo\": \"Hello: 中文\" }\n" +
"\n" +
" - do:\n" +
" get:\n" +
" index: test_1\n" +
" type: test\n" +
" id: 中文\n" +
"\n" +
" - match: { _index: test_1 }\n" +
" - is_true: _source\n" +
" - match: { _source: { foo: \"Hello: 中文\" } }\n" +
"\n" +
" - do:\n" +
" get:\n" +
" index: test_1\n" +
" id: 中文\n" +
"\n" +
" - length: { _index: 6 }\n" +
" - is_false: whatever\n" +
" - gt: { size: 5 }\n" +
" - lt: { size: 10 }"
);
RestTestSectionParser testSectionParser = new RestTestSectionParser();
TestSection testSection = testSectionParser.parse(new RestTestSuiteParseContext("api", "suite", parser));
assertThat(testSection, notNullValue());
assertThat(testSection.getName(), equalTo("Basic"));
assertThat(testSection.getSkipSection(), equalTo(SkipSection.EMPTY));
assertThat(testSection.getExecutableSections().size(), equalTo(10));
DoSection doSection = (DoSection)testSection.getExecutableSections().get(0);
assertThat(doSection.getCatch(), nullValue());
assertThat(doSection.getApiCallSection(), notNullValue());
assertThat(doSection.getApiCallSection().getApi(), equalTo("index"));
assertThat(doSection.getApiCallSection().getParams().size(), equalTo(3));
assertThat(doSection.getApiCallSection().hasBody(), equalTo(true));
doSection = (DoSection)testSection.getExecutableSections().get(1);
assertThat(doSection.getCatch(), nullValue());
assertThat(doSection.getApiCallSection(), notNullValue());
assertThat(doSection.getApiCallSection().getApi(), equalTo("get"));
assertThat(doSection.getApiCallSection().getParams().size(), equalTo(3));
assertThat(doSection.getApiCallSection().hasBody(), equalTo(false));
MatchAssertion matchAssertion = (MatchAssertion)testSection.getExecutableSections().get(2);
assertThat(matchAssertion.getField(), equalTo("_index"));
assertThat(matchAssertion.getExpectedValue().toString(), equalTo("test_1"));
IsTrueAssertion trueAssertion = (IsTrueAssertion)testSection.getExecutableSections().get(3);
assertThat(trueAssertion.getField(), equalTo("_source"));
matchAssertion = (MatchAssertion)testSection.getExecutableSections().get(4);
assertThat(matchAssertion.getField(), equalTo("_source"));
assertThat(matchAssertion.getExpectedValue(), instanceOf(Map.class));
Map map = (Map) matchAssertion.getExpectedValue();
assertThat(map.size(), equalTo(1));
assertThat(map.get("foo").toString(), equalTo("Hello: 中文"));
doSection = (DoSection)testSection.getExecutableSections().get(5);
assertThat(doSection.getCatch(), nullValue());
assertThat(doSection.getApiCallSection(), notNullValue());
assertThat(doSection.getApiCallSection().getApi(), equalTo("get"));
assertThat(doSection.getApiCallSection().getParams().size(), equalTo(2));
assertThat(doSection.getApiCallSection().hasBody(), equalTo(false));
LengthAssertion lengthAssertion = (LengthAssertion) testSection.getExecutableSections().get(6);
assertThat(lengthAssertion.getField(), equalTo("_index"));
assertThat(lengthAssertion.getExpectedValue(), instanceOf(Integer.class));
assertThat((Integer) lengthAssertion.getExpectedValue(), equalTo(6));
IsFalseAssertion falseAssertion = (IsFalseAssertion)testSection.getExecutableSections().get(7);
assertThat(falseAssertion.getField(), equalTo("whatever"));
GreaterThanAssertion greaterThanAssertion = (GreaterThanAssertion) testSection.getExecutableSections().get(8);
assertThat(greaterThanAssertion.getField(), equalTo("size"));
assertThat(greaterThanAssertion.getExpectedValue(), instanceOf(Integer.class));
assertThat((Integer) greaterThanAssertion.getExpectedValue(), equalTo(5));
LessThanAssertion lessThanAssertion = (LessThanAssertion) testSection.getExecutableSections().get(9);
assertThat(lessThanAssertion.getField(), equalTo("size"));
assertThat(lessThanAssertion.getExpectedValue(), instanceOf(Integer.class));
assertThat((Integer) lessThanAssertion.getExpectedValue(), equalTo(10));
}
@Test
public void testSmallSection() throws Exception {
parser = YamlXContent.yamlXContent.createParser(
"\"node_info test\":\n" +
" - do:\n" +
" cluster.node_info: {}\n" +
" \n" +
" - is_true: nodes\n" +
" - is_true: cluster_name\n");
RestTestSectionParser testSectionParser = new RestTestSectionParser();
TestSection testSection = testSectionParser.parse(new RestTestSuiteParseContext("api", "suite", parser));
assertThat(testSection, notNullValue());
assertThat(testSection.getName(), equalTo("node_info test"));
assertThat(testSection.getExecutableSections().size(), equalTo(3));
}
}