Skip to content

Commit 5eed6fe

Browse files
committed
add test cases for ServerlessMode and InitializationUtils
Signed-off-by: Sotaro Hikita <bering1814@gmail.com>
1 parent a434450 commit 5eed6fe

2 files changed

Lines changed: 185 additions & 0 deletions

File tree

mr/src/test/java/org/opensearch/hadoop/rest/InitializationUtilsTest.java

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,4 +169,40 @@ public void testValidateDeleteOperationVsEmptyId() {
169169
set.setProperty(OPENSEARCH_MAPPING_ID, "");
170170
validateSettings(set);
171171
}
172+
173+
@Test
174+
public void testServerlessModeSettingCanBeEnabled() {
175+
Settings set = new TestSettings();
176+
set.setProperty(OPENSEARCH_SERVERLESS, "true");
177+
validateSettings(set);
178+
179+
assertTrue(set.getServerlessMode());
180+
}
181+
182+
@Test
183+
public void testServerlessModeWithWANOnlyIsValid() {
184+
Settings set = new TestSettings();
185+
set.setProperty(OPENSEARCH_SERVERLESS, "true");
186+
set.setProperty(OPENSEARCH_NODES_WAN_ONLY, "true");
187+
validateSettings(set);
188+
189+
assertTrue(set.getServerlessMode());
190+
assertTrue(set.getNodesWANOnly());
191+
}
192+
193+
@Test
194+
public void testServerlessModeUsesAossServiceName() {
195+
Settings set = new TestSettings();
196+
set.setProperty(OPENSEARCH_SERVERLESS, "true");
197+
198+
assertEquals("aoss", set.getAwsSigV4ServiceName());
199+
}
200+
201+
@Test
202+
public void testNormalModeUsesEsServiceName() {
203+
Settings set = new TestSettings();
204+
set.setProperty(OPENSEARCH_SERVERLESS, "false");
205+
206+
assertEquals("es", set.getAwsSigV4ServiceName());
207+
}
172208
}
Lines changed: 149 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,149 @@
1+
/*
2+
* SPDX-License-Identifier: Apache-2.0
3+
*
4+
* The OpenSearch Contributors require contributions made to
5+
* this file be licensed under the Apache-2.0 license or a
6+
*
7+
* Modifications Copyright OpenSearch Contributors. See
8+
* GitHub history for details.
9+
*/
10+
11+
package org.opensearch.hadoop.rest;
12+
13+
import org.apache.commons.logging.Log;
14+
import org.apache.commons.logging.impl.NoOpLog;
15+
import org.junit.Test;
16+
import org.mockito.Mockito;
17+
import org.opensearch.hadoop.OpenSearchHadoopIllegalArgumentException;
18+
import org.opensearch.hadoop.cfg.ConfigurationOptions;
19+
import org.opensearch.hadoop.cfg.PropertiesSettings;
20+
import org.opensearch.hadoop.cfg.Settings;
21+
import org.opensearch.hadoop.util.BytesArray;
22+
import org.opensearch.hadoop.util.ClusterInfo;
23+
import org.opensearch.hadoop.util.FastByteArrayInputStream;
24+
import org.opensearch.hadoop.util.OpenSearchMajorVersion;
25+
import org.opensearch.hadoop.util.TestSettings;
26+
27+
import java.util.List;
28+
29+
import static org.junit.Assert.*;
30+
31+
public class ServerlessModeTest {
32+
33+
private static final Log LOGGER = new NoOpLog("ServerlessModeTest");
34+
35+
@Test
36+
public void testServerlessModeSettingDefault() {
37+
Settings settings = new PropertiesSettings();
38+
assertFalse(settings.getServerlessMode());
39+
}
40+
41+
@Test
42+
public void testServerlessModeSettingEnabled() {
43+
Settings settings = new PropertiesSettings();
44+
settings.setServerlessMode(true);
45+
assertTrue(settings.getServerlessMode());
46+
}
47+
48+
@Test
49+
public void testServerlessModeSettingDisabled() {
50+
Settings settings = new PropertiesSettings();
51+
settings.setServerlessMode(false);
52+
assertFalse(settings.getServerlessMode());
53+
}
54+
55+
@Test
56+
public void testFindServerlessPartitionsSingleIndex() {
57+
Settings settings = new PropertiesSettings();
58+
settings.setProperty(ConfigurationOptions.OPENSEARCH_RESOURCE_READ, "test-index");
59+
settings.setServerlessMode(true);
60+
61+
List<PartitionDefinition> partitions = RestService.findServerlessPartitions(null, settings, null, LOGGER);
62+
63+
assertEquals(1, partitions.size());
64+
assertEquals("test-index", partitions.get(0).getIndex());
65+
assertEquals(0, partitions.get(0).getShardId());
66+
}
67+
68+
@Test
69+
public void testFindServerlessPartitionsMultipleIndices() {
70+
Settings settings = new PropertiesSettings();
71+
settings.setProperty(ConfigurationOptions.OPENSEARCH_RESOURCE_READ, "index1,index2,index3");
72+
settings.setServerlessMode(true);
73+
74+
List<PartitionDefinition> partitions = RestService.findServerlessPartitions(null, settings, null, LOGGER);
75+
76+
assertEquals(3, partitions.size());
77+
assertEquals("index1", partitions.get(0).getIndex());
78+
assertEquals("index2", partitions.get(1).getIndex());
79+
assertEquals("index3", partitions.get(2).getIndex());
80+
}
81+
82+
@Test(expected = OpenSearchHadoopIllegalArgumentException.class)
83+
public void testFindServerlessPartitionsRejectsMaxDocsPerPartition() {
84+
Settings settings = new PropertiesSettings();
85+
settings.setProperty(ConfigurationOptions.OPENSEARCH_RESOURCE_READ, "test-index");
86+
settings.setServerlessMode(true);
87+
settings.setMaxDocsPerPartition(1000);
88+
89+
RestService.findServerlessPartitions(null, settings, null, LOGGER);
90+
}
91+
92+
@Test
93+
public void testRefreshSkippedInServerlessMode() throws Exception {
94+
NetworkClient mock = Mockito.mock(NetworkClient.class);
95+
Settings settings = new TestSettings();
96+
settings.setServerlessMode(true);
97+
settings.setInternalVersion(OpenSearchMajorVersion.V_2_X);
98+
settings.setResourceWrite("test-index");
99+
100+
RestClient client = new RestClient(settings, mock);
101+
Resource resource = new Resource(settings, false);
102+
103+
client.refresh(resource);
104+
105+
// Verify no network call was made
106+
Mockito.verifyZeroInteractions(mock);
107+
}
108+
109+
@Test
110+
public void testMainInfoReturnsServerlessClusterInfo() throws Exception {
111+
NetworkClient mock = Mockito.mock(NetworkClient.class);
112+
Settings settings = new TestSettings();
113+
settings.setServerlessMode(true);
114+
115+
RestClient client = new RestClient(settings, mock);
116+
ClusterInfo info = client.mainInfo();
117+
118+
assertEquals("serverless-collection", info.getClusterName().getName());
119+
assertEquals("serverless-uuid", info.getClusterName().getUUID());
120+
assertEquals(OpenSearchMajorVersion.V_2_X, info.getMajorVersion());
121+
Mockito.verifyZeroInteractions(mock);
122+
}
123+
124+
@Test
125+
public void testMainInfoNormalMode() throws Exception {
126+
String response = "{\n" +
127+
"\"name\": \"node\",\n" +
128+
"\"cluster_name\": \"my-cluster\",\n" +
129+
"\"cluster_uuid\": \"abc123\",\n" +
130+
"\"version\": {\n" +
131+
" \"number\": \"2.4.0\"\n" +
132+
"},\n" +
133+
"\"tagline\": \"The OpenSearch Project: https://opensearch.org/\"\n" +
134+
"}";
135+
136+
NetworkClient mock = Mockito.mock(NetworkClient.class);
137+
Mockito.when(mock.execute(Mockito.any(SimpleRequest.class), Mockito.eq(true)))
138+
.thenReturn(new SimpleResponse(200, new FastByteArrayInputStream(new BytesArray(response)), "localhost:9200"));
139+
140+
Settings settings = new TestSettings();
141+
settings.setServerlessMode(false);
142+
143+
RestClient client = new RestClient(settings, mock);
144+
ClusterInfo info = client.mainInfo();
145+
146+
assertEquals("my-cluster", info.getClusterName().getName());
147+
assertEquals("abc123", info.getClusterName().getUUID());
148+
}
149+
}

0 commit comments

Comments
 (0)