Skip to content

Commit 0c16cab

Browse files
committed
Fix tests that expected an InetAddressPoint
1 parent 58c2611 commit 0c16cab

File tree

4 files changed

+110
-81
lines changed

4 files changed

+110
-81
lines changed
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
/*
2+
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
3+
* or more contributor license agreements. Licensed under the "Elastic License
4+
* 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side
5+
* Public License v 1"; you may not use this file except in compliance with, at
6+
* your election, the "Elastic License 2.0", the "GNU Affero General Public
7+
* License v3.0 only", or the "Server Side Public License, v 1".
8+
*/
9+
10+
package org.elasticsearch.index.mapper;
11+
12+
import org.apache.lucene.document.Field;
13+
import org.apache.lucene.document.FieldType;
14+
import org.apache.lucene.document.InetAddressPoint;
15+
import org.apache.lucene.util.BytesRef;
16+
import org.elasticsearch.common.network.CIDRUtils;
17+
import org.elasticsearch.common.network.InetAddresses;
18+
import org.elasticsearch.core.SuppressForbidden;
19+
import org.elasticsearch.xcontent.XContentString;
20+
21+
import java.net.InetAddress;
22+
23+
/**
24+
* A Lucene {@link Field} that stores an IP address as a point.
25+
* This is similar to {@link InetAddressPoint} but uses a more efficient way to parse IP addresses
26+
* that doesn't require the address to be an {@link InetAddress} object.
27+
* Otherwise, it behaves just like the {@link InetAddressPoint} field.
28+
*/
29+
class ESInetAddressPoint extends Field {
30+
private static final FieldType TYPE;
31+
32+
static {
33+
TYPE = new FieldType();
34+
TYPE.setDimensions(1, InetAddressPoint.BYTES);
35+
TYPE.freeze();
36+
}
37+
38+
private final XContentString ipString;
39+
private final InetAddress inetAddress;
40+
41+
protected ESInetAddressPoint(String name, XContentString ipString) {
42+
super(name, TYPE);
43+
this.fieldsData = new BytesRef(InetAddresses.encodeAsIpv6(ipString));
44+
this.ipString = ipString;
45+
this.inetAddress = null;
46+
}
47+
48+
protected ESInetAddressPoint(String name, InetAddress inetAddress) {
49+
super(name, TYPE);
50+
this.fieldsData = new BytesRef(CIDRUtils.encode(inetAddress.getAddress()));
51+
this.inetAddress = inetAddress;
52+
this.ipString = null;
53+
}
54+
55+
public InetAddress getInetAddress() {
56+
if (ipString != null) {
57+
return InetAddresses.forString(ipString.bytes());
58+
}
59+
if (inetAddress != null) {
60+
return inetAddress;
61+
}
62+
throw new IllegalStateException("Neither ipString nor inetAddress is set");
63+
}
64+
65+
@Override
66+
@SuppressForbidden(
67+
reason = "Calling InetAddress#getHostAddress to mimic what InetAddressPoint does. "
68+
+ "Some tests depend on the exact string representation."
69+
)
70+
public String toString() {
71+
StringBuilder result = new StringBuilder();
72+
result.append(getClass().getSimpleName());
73+
result.append(" <");
74+
result.append(name);
75+
result.append(':');
76+
77+
// IPv6 addresses are bracketed, to not cause confusion with historic field:value representation
78+
BytesRef bytes = (BytesRef) fieldsData;
79+
InetAddress address = InetAddressPoint.decode(BytesRef.deepCopyOf(bytes).bytes);
80+
if (address.getAddress().length == 16) {
81+
result.append('[');
82+
result.append(address.getHostAddress());
83+
result.append(']');
84+
} else {
85+
result.append(address.getHostAddress());
86+
}
87+
88+
result.append('>');
89+
return result.toString();
90+
}
91+
}

server/src/main/java/org/elasticsearch/index/mapper/IpFieldMapper.java

Lines changed: 0 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,6 @@
99

1010
package org.elasticsearch.index.mapper;
1111

12-
import org.apache.lucene.document.Field;
13-
import org.apache.lucene.document.FieldType;
1412
import org.apache.lucene.document.InetAddressPoint;
1513
import org.apache.lucene.document.SortedSetDocValuesField;
1614
import org.apache.lucene.document.StoredField;
@@ -26,7 +24,6 @@
2624
import org.apache.lucene.util.automaton.CompiledAutomaton;
2725
import org.elasticsearch.common.logging.DeprecationCategory;
2826
import org.elasticsearch.common.logging.DeprecationLogger;
29-
import org.elasticsearch.common.network.CIDRUtils;
3027
import org.elasticsearch.common.network.InetAddresses;
3128
import org.elasticsearch.common.network.NetworkAddress;
3229
import org.elasticsearch.core.Nullable;
@@ -696,64 +693,6 @@ private void indexValue(DocumentParserContext context, ESInetAddressPoint addres
696693
}
697694
}
698695

699-
private static class ESInetAddressPoint extends Field {
700-
private static final FieldType TYPE;
701-
702-
static {
703-
TYPE = new FieldType();
704-
TYPE.setDimensions(1, InetAddressPoint.BYTES);
705-
TYPE.freeze();
706-
}
707-
708-
private final XContentString ipString;
709-
private final InetAddress inetAddress;
710-
711-
protected ESInetAddressPoint(String name, XContentString ipString) {
712-
super(name, TYPE);
713-
this.fieldsData = new BytesRef(InetAddresses.encodeAsIpv6(ipString));
714-
this.ipString = ipString;
715-
this.inetAddress = null;
716-
}
717-
718-
protected ESInetAddressPoint(String name, InetAddress inetAddress) {
719-
super(name, TYPE);
720-
this.fieldsData = new BytesRef(CIDRUtils.encode(inetAddress.getAddress()));
721-
this.inetAddress = inetAddress;
722-
this.ipString = null;
723-
}
724-
725-
public InetAddress getInetAddress() {
726-
if (ipString != null) {
727-
return InetAddresses.forString(ipString.bytes());
728-
}
729-
if (inetAddress != null) {
730-
return inetAddress;
731-
}
732-
throw new IllegalStateException("Neither ipString nor inetAddress is set");
733-
}
734-
735-
@Override
736-
public String toString() {
737-
StringBuilder result = new StringBuilder();
738-
result.append(getClass().getSimpleName());
739-
result.append(" <");
740-
result.append(name);
741-
result.append(':');
742-
743-
InetAddress address = getInetAddress();
744-
if (address.getAddress().length == 16) {
745-
result.append('[');
746-
result.append(NetworkAddress.format(address));
747-
result.append(']');
748-
} else {
749-
result.append(NetworkAddress.format(address));
750-
}
751-
752-
result.append('>');
753-
return result.toString();
754-
}
755-
}
756-
757696
@Override
758697
protected void indexScriptValues(
759698
SearchLookup searchLookup,

server/src/test/java/org/elasticsearch/index/mapper/DynamicTemplatesTests.java

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99

1010
package org.elasticsearch.index.mapper;
1111

12-
import org.apache.lucene.document.InetAddressPoint;
1312
import org.apache.lucene.document.IntField;
1413
import org.apache.lucene.document.LongField;
1514
import org.apache.lucene.index.IndexOptions;
@@ -2205,22 +2204,22 @@ public void testMatchAndUnmatchWithArrayOfFieldNamesMapToIpType() throws IOExcep
22052204
merge(mapperService, dynamicMapping(parsedDoc.dynamicMappingsUpdate()));
22062205
LuceneDocument doc = parsedDoc.rootDoc();
22072206

2208-
assertNotEquals(InetAddressPoint.class, doc.getField("one_ip").getClass());
2207+
assertNotEquals(ESInetAddressPoint.class, doc.getField("one_ip").getClass());
22092208
Mapper fieldMapper = mapperService.documentMapper().mappers().getMapper("one_ip");
22102209
assertNotNull(fieldMapper);
22112210
assertEquals("text", fieldMapper.typeName());
22122211

2213-
assertNotEquals(InetAddressPoint.class, doc.getField("ip_two").getClass());
2212+
assertNotEquals(ESInetAddressPoint.class, doc.getField("ip_two").getClass());
22142213
fieldMapper = mapperService.documentMapper().mappers().getMapper("ip_two");
22152214
assertNotNull(fieldMapper);
22162215
assertEquals("text", fieldMapper.typeName());
22172216

2218-
assertEquals(InetAddressPoint.class, doc.getField("three_ip").getClass());
2217+
assertEquals(ESInetAddressPoint.class, doc.getField("three_ip").getClass());
22192218
fieldMapper = mapperService.documentMapper().mappers().getMapper("three_ip");
22202219
assertNotNull(fieldMapper);
22212220
assertEquals("ip", fieldMapper.typeName());
22222221

2223-
assertEquals(InetAddressPoint.class, doc.getField("ip_four").getClass());
2222+
assertEquals(ESInetAddressPoint.class, doc.getField("ip_four").getClass());
22242223
fieldMapper = mapperService.documentMapper().mappers().getMapper("ip_four");
22252224
assertNotNull(fieldMapper);
22262225
assertEquals("ip", fieldMapper.typeName());
@@ -2257,17 +2256,17 @@ public void testMatchWithArrayOfFieldNamesUsingRegex() throws IOException {
22572256
merge(mapperService, dynamicMapping(parsedDoc.dynamicMappingsUpdate()));
22582257
LuceneDocument doc = parsedDoc.rootDoc();
22592258

2260-
assertEquals(InetAddressPoint.class, doc.getField("one100_ip").getClass());
2259+
assertEquals(ESInetAddressPoint.class, doc.getField("one100_ip").getClass());
22612260
Mapper fieldMapper = mapperService.documentMapper().mappers().getMapper("one100_ip");
22622261
assertNotNull(fieldMapper);
22632262
assertEquals("ip", fieldMapper.typeName());
22642263

2265-
assertEquals(InetAddressPoint.class, doc.getField("iptwo").getClass());
2264+
assertEquals(ESInetAddressPoint.class, doc.getField("iptwo").getClass());
22662265
fieldMapper = mapperService.documentMapper().mappers().getMapper("iptwo");
22672266
assertNotNull(fieldMapper);
22682267
assertEquals("ip", fieldMapper.typeName());
22692268

2270-
assertNotEquals(InetAddressPoint.class, doc.getField("threeip").getClass());
2269+
assertNotEquals(ESInetAddressPoint.class, doc.getField("threeip").getClass());
22712270
fieldMapper = mapperService.documentMapper().mappers().getMapper("threeip");
22722271
assertNotNull(fieldMapper);
22732272
assertEquals("text", fieldMapper.typeName());
@@ -2303,18 +2302,18 @@ public void testSimpleMatchWithArrayOfFieldNamesMixingGlobsAndRegex() throws IOE
23032302
merge(mapperService, dynamicMapping(parsedDoc.dynamicMappingsUpdate()));
23042303
LuceneDocument doc = parsedDoc.rootDoc();
23052304

2306-
assertEquals(InetAddressPoint.class, doc.getField("oneip").getClass());
2305+
assertEquals(ESInetAddressPoint.class, doc.getField("oneip").getClass());
23072306
Mapper fieldMapper = mapperService.documentMapper().mappers().getMapper("oneip");
23082307
assertNotNull(fieldMapper);
23092308
assertEquals("ip", fieldMapper.typeName());
23102309

23112310
// this one will not match and be an IP field because it was specified with a regex but match_pattern is implicit "simple"
2312-
assertNotEquals(InetAddressPoint.class, doc.getField("iptwo").getClass());
2311+
assertNotEquals(ESInetAddressPoint.class, doc.getField("iptwo").getClass());
23132312
fieldMapper = mapperService.documentMapper().mappers().getMapper("iptwo");
23142313
assertNotNull(fieldMapper);
23152314
assertEquals("text", fieldMapper.typeName());
23162315

2317-
assertNotEquals(InetAddressPoint.class, doc.getField("threeip").getClass());
2316+
assertNotEquals(ESInetAddressPoint.class, doc.getField("threeip").getClass());
23182317
fieldMapper = mapperService.documentMapper().mappers().getMapper("threeip");
23192318
assertNotNull(fieldMapper);
23202319
assertEquals("text", fieldMapper.typeName());
@@ -2362,18 +2361,18 @@ public void testDefaultMatchTypeWithArrayOfFieldNamesMixingGlobsAndRegexInPathMa
23622361

23632362
LuceneDocument doc = parsedDoc.rootDoc();
23642363

2365-
assertEquals(InetAddressPoint.class, doc.getField("outer.oneip").getClass());
2364+
assertEquals(ESInetAddressPoint.class, doc.getField("outer.oneip").getClass());
23662365
Mapper fieldMapper = mapperService.documentMapper().mappers().getMapper("outer.oneip");
23672366
assertNotNull(fieldMapper);
23682367
assertEquals("ip", fieldMapper.typeName());
23692368

23702369
// this one will not match and be an IP field because it was specified with a regex but match_pattern is implicit "simple"
2371-
assertNotEquals(InetAddressPoint.class, doc.getField("outer.iptwo").getClass());
2370+
assertNotEquals(ESInetAddressPoint.class, doc.getField("outer.iptwo").getClass());
23722371
fieldMapper = mapperService.documentMapper().mappers().getMapper("outer.iptwo");
23732372
assertNotNull(fieldMapper);
23742373
assertEquals("text", fieldMapper.typeName());
23752374

2376-
assertEquals(InetAddressPoint.class, doc.getField("outer.threeip").getClass());
2375+
assertEquals(ESInetAddressPoint.class, doc.getField("outer.threeip").getClass());
23772376
fieldMapper = mapperService.documentMapper().mappers().getMapper("outer.threeip");
23782377
assertNotNull(fieldMapper);
23792378
assertEquals("ip", fieldMapper.typeName());
@@ -2421,18 +2420,18 @@ public void testSimpleMatchTypeWithArrayOfFieldNamesMixingGlobsAndRegexInPathMat
24212420

24222421
LuceneDocument doc = parsedDoc.rootDoc();
24232422

2424-
assertEquals(InetAddressPoint.class, doc.getField("outer.oneip").getClass());
2423+
assertEquals(ESInetAddressPoint.class, doc.getField("outer.oneip").getClass());
24252424
Mapper fieldMapper = mapperService.documentMapper().mappers().getMapper("outer.oneip");
24262425
assertNotNull(fieldMapper);
24272426
assertEquals("ip", fieldMapper.typeName());
24282427

24292428
// this one will not match and be an IP field because it was specified with a regex but match_pattern is implicit "simple"
2430-
assertNotEquals(InetAddressPoint.class, doc.getField("outer.iptwo").getClass());
2429+
assertNotEquals(ESInetAddressPoint.class, doc.getField("outer.iptwo").getClass());
24312430
fieldMapper = mapperService.documentMapper().mappers().getMapper("outer.iptwo");
24322431
assertNotNull(fieldMapper);
24332432
assertEquals("text", fieldMapper.typeName());
24342433

2435-
assertEquals(InetAddressPoint.class, doc.getField("outer.threeip").getClass());
2434+
assertEquals(ESInetAddressPoint.class, doc.getField("outer.threeip").getClass());
24362435
fieldMapper = mapperService.documentMapper().mappers().getMapper("outer.threeip");
24372436
assertNotNull(fieldMapper);
24382437
assertEquals("ip", fieldMapper.typeName());

server/src/test/java/org/elasticsearch/index/mapper/IpScriptMapperTests.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -75,16 +75,16 @@ protected IpFieldScript.Factory multipleValuesScript() {
7575
@Override
7676
protected void assertMultipleValues(List<IndexableField> fields) {
7777
assertEquals(4, fields.size());
78-
assertEquals("InetAddressPoint <field:[0:0:0:0:0:0:0:1]>", fields.get(0).toString());
78+
assertEquals("ESInetAddressPoint <field:[0:0:0:0:0:0:0:1]>", fields.get(0).toString());
7979
assertEquals("docValuesType=SORTED_SET<field:[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1]>", fields.get(1).toString());
80-
assertEquals("InetAddressPoint <field:[0:0:0:0:0:0:0:2]>", fields.get(2).toString());
80+
assertEquals("ESInetAddressPoint <field:[0:0:0:0:0:0:0:2]>", fields.get(2).toString());
8181
assertEquals("docValuesType=SORTED_SET<field:[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2]>", fields.get(3).toString());
8282
}
8383

8484
@Override
8585
protected void assertDocValuesDisabled(List<IndexableField> fields) {
8686
assertEquals(1, fields.size());
87-
assertEquals("InetAddressPoint <field:[0:0:0:0:0:0:0:1]>", fields.get(0).toString());
87+
assertEquals("ESInetAddressPoint <field:[0:0:0:0:0:0:0:1]>", fields.get(0).toString());
8888
}
8989

9090
@Override

0 commit comments

Comments
 (0)