Skip to content

Commit c35e8d5

Browse files
committed
testing
1 parent 33d8865 commit c35e8d5

File tree

3 files changed

+170
-3
lines changed

3 files changed

+170
-3
lines changed

server/src/test/java/org/elasticsearch/action/datastreams/GetDataStreamActionTests.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import org.elasticsearch.cluster.metadata.DataStreamGlobalRetention;
1616
import org.elasticsearch.cluster.metadata.DataStreamLifecycle;
1717
import org.elasticsearch.common.Strings;
18+
import org.elasticsearch.common.compress.CompressedXContent;
1819
import org.elasticsearch.common.settings.Settings;
1920
import org.elasticsearch.common.xcontent.XContentHelper;
2021
import org.elasticsearch.core.TimeValue;
@@ -28,6 +29,7 @@
2829
import java.util.List;
2930
import java.util.Map;
3031

32+
import static org.elasticsearch.cluster.metadata.ComponentTemplateTests.randomMappings;
3133
import static org.elasticsearch.cluster.metadata.ComponentTemplateTests.randomSettings;
3234
import static org.hamcrest.Matchers.equalTo;
3335

@@ -64,6 +66,8 @@ public void testDataStreamInfoToXContent() throws IOException {
6466
assertThat(lifecycleResult.get("retention_determined_by"), equalTo("max_global_retention"));
6567
Map<String, Map<String, Object>> settingsMap = (Map<String, Map<String, Object>>) resultMap.get("settings");
6668
assertThat(Settings.builder().loadFromMap(settingsMap).build(), equalTo(dataStreamInfo.getDataStream().getSettings()));
69+
Map<String, Object> mappingsMap = (Map<String, Object>) resultMap.get("mappings");
70+
assertThat(new CompressedXContent(mappingsMap), equalTo(dataStreamInfo.getDataStream().getMappings()));
6771
}
6872
}
6973

@@ -105,6 +109,7 @@ private static DataStream newDataStreamInstance(boolean isSystem, TimeValue rete
105109
List<Index> indices = List.of(new Index(randomAlphaOfLength(10), randomAlphaOfLength(10)));
106110
DataStreamLifecycle lifecycle = DataStreamLifecycle.createDataLifecycle(true, retention, null);
107111
Settings settings = randomSettings();
112+
CompressedXContent mappings = randomMappings();
108113
return DataStream.builder(randomAlphaOfLength(50), indices)
109114
.setGeneration(randomLongBetween(1, 1000))
110115
.setMetadata(Map.of())
@@ -113,6 +118,7 @@ private static DataStream newDataStreamInstance(boolean isSystem, TimeValue rete
113118
.setReplicated(randomBoolean())
114119
.setLifecycle(lifecycle)
115120
.setSettings(settings)
121+
.setMappings(mappings)
116122
.build();
117123
}
118124
}
Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
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.action.datastreams;
11+
12+
import org.elasticsearch.common.bytes.BytesReference;
13+
import org.elasticsearch.common.compress.CompressedXContent;
14+
import org.elasticsearch.common.xcontent.XContentHelper;
15+
import org.elasticsearch.test.ESTestCase;
16+
import org.elasticsearch.xcontent.ToXContent;
17+
import org.elasticsearch.xcontent.XContentBuilder;
18+
import org.elasticsearch.xcontent.XContentType;
19+
20+
import java.io.IOException;
21+
import java.util.ArrayList;
22+
import java.util.List;
23+
import java.util.Map;
24+
25+
import static org.elasticsearch.xcontent.ToXContent.EMPTY_PARAMS;
26+
import static org.hamcrest.Matchers.equalTo;
27+
28+
public class GetDataStreamMappingsActionTests extends ESTestCase {
29+
30+
public void testResponseToXContentEmpty() throws IOException {
31+
List<GetDataStreamMappingsAction.DataStreamMappingsResponse> responseList = new ArrayList<>();
32+
GetDataStreamMappingsAction.Response response = new GetDataStreamMappingsAction.Response(responseList);
33+
try (XContentBuilder builder = XContentBuilder.builder(XContentType.JSON.xContent())) {
34+
builder.humanReadable(true);
35+
response.toXContentChunked(ToXContent.EMPTY_PARAMS).forEachRemaining(xcontent -> {
36+
try {
37+
xcontent.toXContent(builder, EMPTY_PARAMS);
38+
} catch (IOException e) {
39+
fail(e);
40+
}
41+
});
42+
Map<String, Object> xContentMap = XContentHelper.convertToMap(BytesReference.bytes(builder), false, builder.contentType()).v2();
43+
assertThat(xContentMap, equalTo(Map.of("data_streams", List.of())));
44+
}
45+
}
46+
47+
public void testResponseToXContent() throws IOException {
48+
Map<String, Object> dataStream1Mappings = Map.of(
49+
"properties",
50+
Map.of("field2", Map.of("type", "text"), "field3", Map.of("type", "keyword"))
51+
);
52+
Map<String, Object> dataStream1EffectiveMappings = Map.of(
53+
"properties",
54+
Map.of("field1", Map.of("type", "keyword"), "field2", Map.of("type", "text"), "field3", Map.of("type", "keyword"))
55+
);
56+
Map<String, Object> dataStream2Mappings = Map.of(
57+
"properties",
58+
Map.of("field4", Map.of("type", "text"), "field5", Map.of("type", "keyword"))
59+
);
60+
Map<String, Object> dataStream2EffectiveMappings = Map.of(
61+
"properties",
62+
Map.of("field4", Map.of("type", "text"), "field5", Map.of("type", "keyword"), "field6", Map.of("type", "keyword"))
63+
);
64+
GetDataStreamMappingsAction.DataStreamMappingsResponse DataStreamMappingsResponse1 =
65+
new GetDataStreamMappingsAction.DataStreamMappingsResponse(
66+
"dataStream1",
67+
new CompressedXContent(dataStream1Mappings),
68+
new CompressedXContent(dataStream1EffectiveMappings)
69+
);
70+
GetDataStreamMappingsAction.DataStreamMappingsResponse DataStreamMappingsResponse2 =
71+
new GetDataStreamMappingsAction.DataStreamMappingsResponse(
72+
"dataStream2",
73+
new CompressedXContent(dataStream2Mappings),
74+
new CompressedXContent(dataStream2EffectiveMappings)
75+
);
76+
List<GetDataStreamMappingsAction.DataStreamMappingsResponse> responseList = List.of(
77+
DataStreamMappingsResponse1,
78+
DataStreamMappingsResponse2
79+
);
80+
GetDataStreamMappingsAction.Response response = new GetDataStreamMappingsAction.Response(responseList);
81+
try (XContentBuilder builder = XContentBuilder.builder(XContentType.JSON.xContent())) {
82+
builder.humanReadable(true);
83+
response.toXContentChunked(ToXContent.EMPTY_PARAMS).forEachRemaining(xcontent -> {
84+
try {
85+
xcontent.toXContent(builder, EMPTY_PARAMS);
86+
} catch (IOException e) {
87+
fail(e);
88+
}
89+
});
90+
Map<String, Object> xContentMap = XContentHelper.convertToMap(BytesReference.bytes(builder), false, builder.contentType()).v2();
91+
assertThat(
92+
xContentMap,
93+
equalTo(
94+
Map.of(
95+
"data_streams",
96+
List.of(
97+
Map.of(
98+
"name",
99+
"dataStream1",
100+
"mappings",
101+
dataStream1Mappings,
102+
"effective_mappings",
103+
dataStream1EffectiveMappings
104+
),
105+
Map.of(
106+
"name",
107+
"dataStream2",
108+
"mappings",
109+
dataStream2Mappings,
110+
"effective_mappings",
111+
dataStream2EffectiveMappings
112+
)
113+
)
114+
)
115+
)
116+
);
117+
}
118+
}
119+
}

server/src/test/java/org/elasticsearch/cluster/metadata/DataStreamTests.java

Lines changed: 45 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2606,13 +2606,18 @@ public void testGetEffectiveIndexTemplate() throws IOException {
26062606
.put("index.setting2", "dataStreamValue")
26072607
.put("index.setting3", (String) null) // This one gets removed from the effective settings
26082608
.build();
2609-
DataStream dataStream = createDataStream(dataStreamSettings, DataStream.EMPTY_MAPPINGS);
2609+
CompressedXContent dataStreamMappings = new CompressedXContent(
2610+
Map.of("properties", Map.of("field2", Map.of("type", "text"), "field3", Map.of("type", "keyword")))
2611+
);
2612+
DataStream dataStream = createDataStream(dataStreamSettings, dataStreamMappings);
26102613
Settings templateSettings = Settings.builder()
26112614
.put("index.setting1", "templateValue")
26122615
.put("index.setting3", "templateValue")
26132616
.put("index.setting4", "templateValue")
26142617
.build();
2615-
CompressedXContent templateMappings = randomMappings();
2618+
CompressedXContent templateMappings = new CompressedXContent(
2619+
Map.of("_doc", Map.of("properties", Map.of("field1", Map.of("type", "keyword"), "field2", Map.of("type", "keyword"))))
2620+
);
26162621
Template.Builder templateBuilder = Template.builder().settings(templateSettings).mappings(templateMappings);
26172622
ComposableIndexTemplate indexTemplate = ComposableIndexTemplate.builder()
26182623
.indexPatterns(List.of(dataStream.getName()))
@@ -2626,7 +2631,44 @@ public void testGetEffectiveIndexTemplate() throws IOException {
26262631
.put("index.setting2", "dataStreamValue")
26272632
.put("index.setting4", "templateValue")
26282633
.build();
2629-
Template.Builder expectedTemplateBuilder = Template.builder().settings(mergedSettings).mappings(templateMappings);
2634+
CompressedXContent mergedMappings = new CompressedXContent(
2635+
Map.of(
2636+
"properties",
2637+
Map.of("field1", Map.of("type", "keyword"), "field2", Map.of("type", "text"), "field3", Map.of("type", "keyword"))
2638+
)
2639+
);
2640+
Template.Builder expectedTemplateBuilder = Template.builder().settings(mergedSettings).mappings(mergedMappings);
2641+
ComposableIndexTemplate expectedEffectiveTemplate = ComposableIndexTemplate.builder()
2642+
.indexPatterns(List.of(dataStream.getName()))
2643+
.dataStreamTemplate(new ComposableIndexTemplate.DataStreamTemplate())
2644+
.template(expectedTemplateBuilder)
2645+
.build();
2646+
assertThat(dataStream.getEffectiveIndexTemplate(projectMetadataBuilder.build()), equalTo(expectedEffectiveTemplate));
2647+
}
2648+
2649+
public void testGetEffectiveMappingsNoMatchingTemplate() {
2650+
// No matching template, so we expect an IllegalArgumentException
2651+
DataStream dataStream = createTestInstance();
2652+
ProjectMetadata.Builder projectMetadataBuilder = ProjectMetadata.builder(randomProjectIdOrDefault());
2653+
assertThrows(IllegalArgumentException.class, () -> dataStream.getEffectiveMappings(projectMetadataBuilder.build()));
2654+
}
2655+
2656+
public void testGetEffectiveIndexTemplateDataStreamMappingsOnly() throws IOException {
2657+
// We only have mappings from the data stream, so we expect to get only those back in the effective template
2658+
CompressedXContent dataStreamMappings = randomMappings();
2659+
DataStream dataStream = createDataStream(Settings.EMPTY, dataStreamMappings);
2660+
Settings templateSettings = Settings.EMPTY;
2661+
CompressedXContent templateMappings = new CompressedXContent(Map.of("_doc", Map.of()));
2662+
;
2663+
Template.Builder templateBuilder = Template.builder().settings(templateSettings).mappings(templateMappings);
2664+
ComposableIndexTemplate indexTemplate = ComposableIndexTemplate.builder()
2665+
.indexPatterns(List.of(dataStream.getName()))
2666+
.dataStreamTemplate(new ComposableIndexTemplate.DataStreamTemplate())
2667+
.template(templateBuilder)
2668+
.build();
2669+
ProjectMetadata.Builder projectMetadataBuilder = ProjectMetadata.builder(randomProjectIdOrDefault())
2670+
.indexTemplates(Map.of(dataStream.getName(), indexTemplate));
2671+
Template.Builder expectedTemplateBuilder = Template.builder().settings(templateSettings).mappings(dataStreamMappings);
26302672
ComposableIndexTemplate expectedEffectiveTemplate = ComposableIndexTemplate.builder()
26312673
.indexPatterns(List.of(dataStream.getName()))
26322674
.dataStreamTemplate(new ComposableIndexTemplate.DataStreamTemplate())

0 commit comments

Comments
 (0)