|
@@ -21,6 +21,8 @@ package org.elasticsearch.index.mapper.ip;
|
|
|
import java.net.InetAddress;
|
|
|
|
|
|
import org.apache.lucene.document.InetAddressPoint;
|
|
|
+import org.apache.lucene.document.XInetAddressPoint;
|
|
|
+import org.apache.lucene.search.MatchNoDocsQuery;
|
|
|
import org.apache.lucene.util.BytesRef;
|
|
|
import org.elasticsearch.common.network.InetAddresses;
|
|
|
import org.elasticsearch.index.mapper.FieldTypeTestCase;
|
|
@@ -66,10 +68,93 @@ public class IpFieldTypeTests extends FieldTypeTestCase {
|
|
|
|
|
|
ip = "2001:db8::2:1";
|
|
|
String prefix = ip + "/64";
|
|
|
- assertEquals(InetAddressPoint.newPrefixQuery("field", InetAddresses.forString(ip), 64), ft.termQuery(prefix, null));
|
|
|
+ assertEquals(XInetAddressPoint.newPrefixQuery("field", InetAddresses.forString(ip), 64), ft.termQuery(prefix, null));
|
|
|
|
|
|
ip = "192.168.1.7";
|
|
|
prefix = ip + "/16";
|
|
|
- assertEquals(InetAddressPoint.newPrefixQuery("field", InetAddresses.forString(ip), 16), ft.termQuery(prefix, null));
|
|
|
+ assertEquals(XInetAddressPoint.newPrefixQuery("field", InetAddresses.forString(ip), 16), ft.termQuery(prefix, null));
|
|
|
+ }
|
|
|
+
|
|
|
+ public void testRangeQuery() {
|
|
|
+ MappedFieldType ft = createDefaultFieldType();
|
|
|
+ ft.setName("field");
|
|
|
+
|
|
|
+ assertEquals(
|
|
|
+ InetAddressPoint.newRangeQuery("field",
|
|
|
+ InetAddresses.forString("::"),
|
|
|
+ XInetAddressPoint.MAX_VALUE),
|
|
|
+ ft.rangeQuery(null, null, randomBoolean(), randomBoolean()));
|
|
|
+
|
|
|
+ assertEquals(
|
|
|
+ InetAddressPoint.newRangeQuery("field",
|
|
|
+ InetAddresses.forString("::"),
|
|
|
+ InetAddresses.forString("192.168.2.0")),
|
|
|
+ ft.rangeQuery(null, "192.168.2.0", randomBoolean(), true));
|
|
|
+
|
|
|
+ assertEquals(
|
|
|
+ InetAddressPoint.newRangeQuery("field",
|
|
|
+ InetAddresses.forString("::"),
|
|
|
+ InetAddresses.forString("192.168.1.255")),
|
|
|
+ ft.rangeQuery(null, "192.168.2.0", randomBoolean(), false));
|
|
|
+
|
|
|
+ assertEquals(
|
|
|
+ InetAddressPoint.newRangeQuery("field",
|
|
|
+ InetAddresses.forString("2001:db8::"),
|
|
|
+ XInetAddressPoint.MAX_VALUE),
|
|
|
+ ft.rangeQuery("2001:db8::", null, true, randomBoolean()));
|
|
|
+
|
|
|
+ assertEquals(
|
|
|
+ InetAddressPoint.newRangeQuery("field",
|
|
|
+ InetAddresses.forString("2001:db8::1"),
|
|
|
+ XInetAddressPoint.MAX_VALUE),
|
|
|
+ ft.rangeQuery("2001:db8::", null, false, randomBoolean()));
|
|
|
+
|
|
|
+ assertEquals(
|
|
|
+ InetAddressPoint.newRangeQuery("field",
|
|
|
+ InetAddresses.forString("2001:db8::"),
|
|
|
+ InetAddresses.forString("2001:db8::ffff")),
|
|
|
+ ft.rangeQuery("2001:db8::", "2001:db8::ffff", true, true));
|
|
|
+
|
|
|
+ assertEquals(
|
|
|
+ InetAddressPoint.newRangeQuery("field",
|
|
|
+ InetAddresses.forString("2001:db8::1"),
|
|
|
+ InetAddresses.forString("2001:db8::fffe")),
|
|
|
+ ft.rangeQuery("2001:db8::", "2001:db8::ffff", false, false));
|
|
|
+
|
|
|
+ assertEquals(
|
|
|
+ InetAddressPoint.newRangeQuery("field",
|
|
|
+ InetAddresses.forString("2001:db8::2"),
|
|
|
+ InetAddresses.forString("2001:db8::")),
|
|
|
+ // same lo/hi values but inclusive=false so this won't match anything
|
|
|
+ ft.rangeQuery("2001:db8::1", "2001:db8::1", false, false));
|
|
|
+
|
|
|
+ // Upper bound is the min IP and is not inclusive
|
|
|
+ assertEquals(new MatchNoDocsQuery(),
|
|
|
+ ft.rangeQuery("::", "::", true, false));
|
|
|
+
|
|
|
+ // Lower bound is the max IP and is not inclusive
|
|
|
+ assertEquals(new MatchNoDocsQuery(),
|
|
|
+ ft.rangeQuery("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff", "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff", false, true));
|
|
|
+
|
|
|
+ assertEquals(
|
|
|
+ InetAddressPoint.newRangeQuery("field",
|
|
|
+ InetAddresses.forString("::"),
|
|
|
+ InetAddresses.forString("::fffe:ffff:ffff")),
|
|
|
+ // same lo/hi values but inclusive=false so this won't match anything
|
|
|
+ ft.rangeQuery("::", "0.0.0.0", true, false));
|
|
|
+
|
|
|
+ assertEquals(
|
|
|
+ InetAddressPoint.newRangeQuery("field",
|
|
|
+ InetAddresses.forString("::1:0:0:0"),
|
|
|
+ XInetAddressPoint.MAX_VALUE),
|
|
|
+ // same lo/hi values but inclusive=false so this won't match anything
|
|
|
+ ft.rangeQuery("255.255.255.255", "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff", false, true));
|
|
|
+
|
|
|
+ assertEquals(
|
|
|
+ // lower bound is ipv4, upper bound is ipv6
|
|
|
+ InetAddressPoint.newRangeQuery("field",
|
|
|
+ InetAddresses.forString("192.168.1.7"),
|
|
|
+ InetAddresses.forString("2001:db8::")),
|
|
|
+ ft.rangeQuery("::ffff:c0a8:107", "2001:db8::", true, true));
|
|
|
}
|
|
|
}
|