Skip to content

Commit 7e8a493

Browse files
committed
better tests for null mappings
1 parent cc2af67 commit 7e8a493

File tree

4 files changed

+34
-5
lines changed

4 files changed

+34
-5
lines changed

rest-api-spec/src/main/resources/rest-api-spec/test/indices.get_field_mapping/20_missing_field.yml

+1
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,4 @@
1717
fields: not_existent
1818

1919
- match: { 'test_index.mappings': {}}
20+

server/src/main/java/org/elasticsearch/action/admin/indices/mapping/get/GetFieldMappingsResponse.java

+6-4
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ public FieldMappingMetaData fieldMappings(String index, String field) {
105105

106106
@Override
107107
public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException {
108-
builder.startObject();
108+
builder.startObject();
109109
for (Map.Entry<String, Map<String, FieldMappingMetaData>> indexEntry : mappings.entrySet()) {
110110
builder.startObject(indexEntry.getKey());
111111
builder.startObject(MAPPINGS.getPreferredName());
@@ -125,9 +125,11 @@ private void addFieldMappingsToBuilder(XContentBuilder builder,
125125
Params params,
126126
Map<String, FieldMappingMetaData> mappings) throws IOException {
127127
for (Map.Entry<String, FieldMappingMetaData> fieldEntry : mappings.entrySet()) {
128-
builder.startObject(fieldEntry.getKey());
129-
fieldEntry.getValue().toXContent(builder, params);
130-
builder.endObject();
128+
if (fieldEntry.getValue().isNull() == false) {
129+
builder.startObject(fieldEntry.getKey());
130+
fieldEntry.getValue().toXContent(builder, params);
131+
builder.endObject();
132+
}
131133
}
132134
}
133135

server/src/main/java/org/elasticsearch/rest/action/admin/indices/RestGetFieldMappingAction.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -67,12 +67,13 @@ public RestChannelConsumer prepareRequest(final RestRequest request, final NodeC
6767
@Override
6868
public RestResponse buildResponse(GetFieldMappingsResponse response, XContentBuilder builder) throws Exception {
6969
Map<String, Map<String, FieldMappingMetaData>> mappingsByIndex = response.mappings();
70-
70+
7171
RestStatus status = OK;
7272
if (mappingsByIndex.isEmpty() && fields.length > 0) {
7373
status = NOT_FOUND;
7474
}
7575
response.toXContent(builder, request);
76+
logger.warn(Strings.toString(response));
7677
return new BytesRestResponse(status, builder);
7778
}
7879
});

server/src/test/java/org/elasticsearch/action/admin/indices/mapping/get/GetFieldMappingsResponseTests.java

+25
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
package org.elasticsearch.action.admin.indices.mapping.get;
2121

2222
import org.elasticsearch.action.admin.indices.mapping.get.GetFieldMappingsResponse.FieldMappingMetaData;
23+
import org.elasticsearch.common.Strings;
2324
import org.elasticsearch.common.bytes.BytesArray;
2425
import org.elasticsearch.common.io.stream.BytesStreamOutput;
2526
import org.elasticsearch.common.io.stream.StreamInput;
@@ -31,6 +32,8 @@
3132
import java.util.HashMap;
3233
import java.util.Map;
3334

35+
import static org.hamcrest.CoreMatchers.containsString;
36+
3437
public class GetFieldMappingsResponseTests extends AbstractWireSerializingTestCase<GetFieldMappingsResponse> {
3538

3639
public void testManualSerialization() throws IOException {
@@ -50,6 +53,28 @@ public void testManualSerialization() throws IOException {
5053
}
5154
}
5255

56+
public void testNullFieldMappingToXContent() {
57+
Map<String, Map<String, FieldMappingMetaData>> mappings = new HashMap<>();
58+
mappings.put("index", Collections.singletonMap("field", FieldMappingMetaData.NULL));
59+
GetFieldMappingsResponse response = new GetFieldMappingsResponse(mappings);
60+
assertEquals("{\"index\":{\"mappings\":{}}}", Strings.toString(response));
61+
}
62+
63+
public void testMixedNullAndPresentFieldMappingToXContent() {
64+
Map<String, Map<String, FieldMappingMetaData>> mappings = new HashMap<>();
65+
mappings.put("index", Map.of("field", FieldMappingMetaData.NULL,
66+
"field1", new FieldMappingMetaData("field1", new BytesArray("{\"type\":\"string\"}"))));
67+
mappings.put("index2", Map.of("field", new FieldMappingMetaData("field", new BytesArray("{}"))));
68+
mappings.put("index3", Map.of("field", FieldMappingMetaData.NULL));
69+
GetFieldMappingsResponse response = new GetFieldMappingsResponse(mappings);
70+
String respAsString = Strings.toString(response);
71+
assertThat(respAsString, containsString("\"index3\":{\"mappings\":{}}"));
72+
assertThat(respAsString,
73+
containsString("\"index\":{\"mappings\":{\"field1\":{\"full_name\":\"field1\",\"mapping\":{\"type\":\"string\"}}}}"));
74+
assertThat(respAsString,
75+
containsString("\"index2\":{\"mappings\":{\"field\":{\"full_name\":\"field\",\"mapping\":{}}}}"));
76+
}
77+
5378
@Override
5479
protected GetFieldMappingsResponse createTestInstance() {
5580
return new GetFieldMappingsResponse(randomMapping());

0 commit comments

Comments
 (0)