Browse Source

Add tests for IntervalsSourceProvider.Wildcard and Prefix (#50306)

This PR adds unit tests for wire and xContent serialization of `IntervalsSourceProvider.Wildcard`
and `IntervalsSourceProvider.Prefix`.

Relates #50150
Nikita Glashenko 5 years ago
parent
commit
a7ec68d06b

+ 29 - 5
server/src/main/java/org/elasticsearch/index/query/IntervalsSourceProvider.java

@@ -87,7 +87,7 @@ public abstract class IntervalsSourceProvider implements NamedWriteable, ToXCont
                 return Wildcard.fromXContent(parser);
         }
         throw new ParsingException(parser.getTokenLocation(),
-            "Unknown interval type [" + parser.currentName() + "], expecting one of [match, any_of, all_of, prefix]");
+            "Unknown interval type [" + parser.currentName() + "], expecting one of [match, any_of, all_of, prefix, wildcard]");
     }
 
     private static IntervalsSourceProvider parseInnerIntervals(XContentParser parser) throws IOException {
@@ -548,6 +548,18 @@ public abstract class IntervalsSourceProvider implements NamedWriteable, ToXCont
         public static Prefix fromXContent(XContentParser parser) throws IOException {
             return PARSER.parse(parser, null);
         }
+
+        String getPrefix() {
+            return prefix;
+        }
+
+        String getAnalyzer() {
+            return analyzer;
+        }
+
+        String getUseField() {
+            return useField;
+        }
     }
 
     public static class Wildcard extends IntervalsSourceProvider {
@@ -613,10 +625,10 @@ public abstract class IntervalsSourceProvider implements NamedWriteable, ToXCont
         public boolean equals(Object o) {
             if (this == o) return true;
             if (o == null || getClass() != o.getClass()) return false;
-            Prefix prefix = (Prefix) o;
-            return Objects.equals(pattern, prefix.prefix) &&
-                Objects.equals(analyzer, prefix.analyzer) &&
-                Objects.equals(useField, prefix.useField);
+            Wildcard wildcard = (Wildcard) o;
+            return Objects.equals(pattern, wildcard.pattern) &&
+                Objects.equals(analyzer, wildcard.analyzer) &&
+                Objects.equals(useField, wildcard.useField);
         }
 
         @Override
@@ -665,6 +677,18 @@ public abstract class IntervalsSourceProvider implements NamedWriteable, ToXCont
         public static Wildcard fromXContent(XContentParser parser) throws IOException {
             return PARSER.parse(parser, null);
         }
+
+        String getPattern() {
+            return pattern;
+        }
+
+        String getAnalyzer() {
+            return analyzer;
+        }
+
+        String getUseField() {
+            return useField;
+        }
     }
 
     static class ScriptFilterSource extends FilteredIntervalsSource {

+ 76 - 0
server/src/test/java/org/elasticsearch/index/query/PrefixIntervalsSourceProviderTests.java

@@ -0,0 +1,76 @@
+/*
+ * 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.index.query;
+
+import org.elasticsearch.common.io.stream.Writeable;
+import org.elasticsearch.common.xcontent.XContentParser;
+import org.elasticsearch.test.AbstractSerializingTestCase;
+
+import java.io.IOException;
+
+import static org.elasticsearch.index.query.IntervalsSourceProvider.Prefix;
+
+public class PrefixIntervalsSourceProviderTests extends AbstractSerializingTestCase<Prefix> {
+
+    @Override
+    protected Prefix createTestInstance() {
+        return new Prefix(
+            randomAlphaOfLength(10),
+            randomBoolean() ? randomAlphaOfLength(10) : null,
+            randomBoolean() ? randomAlphaOfLength(10) : null
+        );
+    }
+
+    @Override
+    protected Prefix mutateInstance(Prefix instance) throws IOException {
+        String prefix = instance.getPrefix();
+        String analyzer = instance.getAnalyzer();
+        String useField = instance.getUseField();
+        switch (between(0, 2)) {
+            case 0:
+                prefix += "a";
+                break;
+            case 1:
+                analyzer = randomAlphaOfLength(5);
+                break;
+            case 2:
+                useField = useField == null ? randomAlphaOfLength(5) : null;
+                break;
+            default:
+                throw new AssertionError("Illegal randomisation branch");
+        }
+        return new Prefix(prefix, analyzer, useField);
+    }
+
+    @Override
+    protected Writeable.Reader<Prefix> instanceReader() {
+        return Prefix::new;
+    }
+
+    @Override
+    protected Prefix doParseInstance(XContentParser parser) throws IOException {
+        if (parser.nextToken() == XContentParser.Token.START_OBJECT) {
+            parser.nextToken();
+        }
+        Prefix prefix = (Prefix) IntervalsSourceProvider.fromXContent(parser);
+        assertEquals(XContentParser.Token.END_OBJECT, parser.nextToken());
+        return prefix;
+    }
+}

+ 76 - 0
server/src/test/java/org/elasticsearch/index/query/WildcardIntervalsSourceProviderTests.java

@@ -0,0 +1,76 @@
+/*
+ * 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.index.query;
+
+import org.elasticsearch.common.io.stream.Writeable;
+import org.elasticsearch.common.xcontent.XContentParser;
+import org.elasticsearch.test.AbstractSerializingTestCase;
+
+import java.io.IOException;
+
+import static org.elasticsearch.index.query.IntervalsSourceProvider.Wildcard;
+
+public class WildcardIntervalsSourceProviderTests extends AbstractSerializingTestCase<Wildcard> {
+
+    @Override
+    protected Wildcard createTestInstance() {
+        return new Wildcard(
+            randomAlphaOfLength(10),
+            randomBoolean() ? randomAlphaOfLength(10) : null,
+            randomBoolean() ? randomAlphaOfLength(10) : null
+        );
+    }
+
+    @Override
+    protected Wildcard mutateInstance(Wildcard instance) throws IOException {
+        String wildcard = instance.getPattern();
+        String analyzer = instance.getAnalyzer();
+        String useField = instance.getUseField();
+        switch (between(0, 2)) {
+            case 0:
+                wildcard += "a";
+                break;
+            case 1:
+                analyzer = randomAlphaOfLength(5);
+                break;
+            case 2:
+                useField = useField == null ? randomAlphaOfLength(5) : null;
+                break;
+            default:
+                throw new AssertionError("Illegal randomisation branch");
+        }
+        return new Wildcard(wildcard, analyzer, useField);
+    }
+
+    @Override
+    protected Writeable.Reader<Wildcard> instanceReader() {
+        return Wildcard::new;
+    }
+
+    @Override
+    protected Wildcard doParseInstance(XContentParser parser) throws IOException {
+        if (parser.nextToken() == XContentParser.Token.START_OBJECT) {
+            parser.nextToken();
+        }
+        Wildcard wildcard = (Wildcard) IntervalsSourceProvider.fromXContent(parser);
+        assertEquals(XContentParser.Token.END_OBJECT, parser.nextToken());
+        return wildcard;
+    }
+}