|
18 | 18 | */
|
19 | 19 | package org.elasticsearch.action.admin.indices.datastream;
|
20 | 20 |
|
| 21 | +import org.elasticsearch.Version; |
21 | 22 | import org.elasticsearch.action.ActionRequestValidationException;
|
| 23 | +import org.elasticsearch.action.admin.indices.create.CreateIndexClusterStateUpdateRequest; |
22 | 24 | import org.elasticsearch.action.admin.indices.datastream.CreateDataStreamAction.Request;
|
23 | 25 | import org.elasticsearch.cluster.ClusterName;
|
24 | 26 | import org.elasticsearch.cluster.ClusterState;
|
25 | 27 | import org.elasticsearch.cluster.metadata.DataStream;
|
| 28 | +import org.elasticsearch.cluster.metadata.IndexMetadata; |
26 | 29 | import org.elasticsearch.cluster.metadata.Metadata;
|
| 30 | +import org.elasticsearch.cluster.metadata.MetadataCreateIndexService; |
27 | 31 | import org.elasticsearch.common.io.stream.Writeable;
|
| 32 | +import org.elasticsearch.common.settings.Settings; |
28 | 33 | import org.elasticsearch.test.AbstractWireSerializingTestCase;
|
29 | 34 |
|
30 | 35 | import java.util.Collections;
|
31 | 36 | import java.util.Map;
|
32 | 37 |
|
33 | 38 | import static org.hamcrest.Matchers.containsString;
|
34 | 39 | import static org.hamcrest.Matchers.equalTo;
|
| 40 | +import static org.hamcrest.Matchers.notNullValue; |
| 41 | +import static org.mockito.Matchers.any; |
| 42 | +import static org.mockito.Matchers.anyBoolean; |
| 43 | +import static org.mockito.Mockito.mock; |
| 44 | +import static org.mockito.Mockito.when; |
35 | 45 |
|
36 | 46 | public class CreateDataStreamRequestTests extends AbstractWireSerializingTestCase<Request> {
|
37 | 47 |
|
@@ -62,33 +72,60 @@ public void testValidateRequestWithoutTimestampField() {
|
62 | 72 | assertThat(e.validationErrors().get(0), containsString("timestamp field name is missing"));
|
63 | 73 | }
|
64 | 74 |
|
65 |
| - public void testCreateDataStream() { |
| 75 | + public void testCreateDataStream() throws Exception { |
| 76 | + final MetadataCreateIndexService metadataCreateIndexService = getMetadataCreateIndexService(); |
66 | 77 | final String dataStreamName = "my-data-stream";
|
67 | 78 | ClusterState cs = ClusterState.builder(new ClusterName("_name")).build();
|
68 | 79 | CreateDataStreamAction.Request req = new CreateDataStreamAction.Request(dataStreamName);
|
69 |
| - ClusterState newState = CreateDataStreamAction.TransportAction.createDataStream(cs, req); |
| 80 | + ClusterState newState = CreateDataStreamAction.TransportAction.createDataStream(metadataCreateIndexService, cs, req); |
70 | 81 | assertThat(newState.metadata().dataStreams().size(), equalTo(1));
|
71 | 82 | assertThat(newState.metadata().dataStreams().get(dataStreamName).getName(), equalTo(dataStreamName));
|
| 83 | + assertThat(newState.metadata().index(dataStreamName + "-000001"), notNullValue()); |
| 84 | + assertThat(newState.metadata().index(dataStreamName + "-000001").getSettings().get("index.hidden"), equalTo("true")); |
72 | 85 | }
|
73 | 86 |
|
74 |
| - public void testCreateDuplicateDataStream() { |
| 87 | + public void testCreateDuplicateDataStream() throws Exception { |
| 88 | + final MetadataCreateIndexService metadataCreateIndexService = getMetadataCreateIndexService(); |
75 | 89 | final String dataStreamName = "my-data-stream";
|
76 | 90 | DataStream existingDataStream = new DataStream(dataStreamName, "timestamp", Collections.emptyList());
|
77 | 91 | ClusterState cs = ClusterState.builder(new ClusterName("_name"))
|
78 | 92 | .metadata(Metadata.builder().dataStreams(Map.of(dataStreamName, existingDataStream)).build()).build();
|
79 | 93 | CreateDataStreamAction.Request req = new CreateDataStreamAction.Request(dataStreamName);
|
80 | 94 |
|
81 | 95 | IllegalArgumentException e = expectThrows(IllegalArgumentException.class,
|
82 |
| - () -> CreateDataStreamAction.TransportAction.createDataStream(cs, req)); |
| 96 | + () -> CreateDataStreamAction.TransportAction.createDataStream(metadataCreateIndexService, cs, req)); |
83 | 97 | assertThat(e.getMessage(), containsString("data_stream [" + dataStreamName + "] already exists"));
|
84 | 98 | }
|
85 | 99 |
|
86 |
| - public void testCreateDataStreamWithInvalidName() { |
| 100 | + public void testCreateDataStreamWithInvalidName() throws Exception { |
| 101 | + final MetadataCreateIndexService metadataCreateIndexService = getMetadataCreateIndexService(); |
87 | 102 | final String dataStreamName = "_My-da#ta- ,stream-";
|
88 | 103 | ClusterState cs = ClusterState.builder(new ClusterName("_name")).build();
|
89 | 104 | CreateDataStreamAction.Request req = new CreateDataStreamAction.Request(dataStreamName);
|
90 | 105 | IllegalArgumentException e = expectThrows(IllegalArgumentException.class,
|
91 |
| - () -> CreateDataStreamAction.TransportAction.createDataStream(cs, req)); |
| 106 | + () -> CreateDataStreamAction.TransportAction.createDataStream(metadataCreateIndexService, cs, req)); |
92 | 107 | assertThat(e.getMessage(), containsString("must not contain the following characters"));
|
93 | 108 | }
|
| 109 | + |
| 110 | + private static MetadataCreateIndexService getMetadataCreateIndexService() throws Exception { |
| 111 | + MetadataCreateIndexService s = mock(MetadataCreateIndexService.class); |
| 112 | + when(s.applyCreateIndexRequest(any(ClusterState.class), any(CreateIndexClusterStateUpdateRequest.class), anyBoolean())) |
| 113 | + .thenAnswer(mockInvocation -> { |
| 114 | + ClusterState currentState = (ClusterState) mockInvocation.getArguments()[0]; |
| 115 | + CreateIndexClusterStateUpdateRequest request = (CreateIndexClusterStateUpdateRequest) mockInvocation.getArguments()[1]; |
| 116 | + |
| 117 | + Metadata.Builder b = Metadata.builder(currentState.metadata()) |
| 118 | + .put(IndexMetadata.builder(request.index()) |
| 119 | + .settings(Settings.builder() |
| 120 | + .put(IndexMetadata.SETTING_VERSION_CREATED, Version.CURRENT) |
| 121 | + .put(request.settings()) |
| 122 | + .build()) |
| 123 | + .numberOfShards(1) |
| 124 | + .numberOfReplicas(1) |
| 125 | + .build(), false); |
| 126 | + return ClusterState.builder(currentState).metadata(b.build()).build(); |
| 127 | + }); |
| 128 | + |
| 129 | + return s; |
| 130 | + } |
94 | 131 | }
|
0 commit comments