Skip to content

Commit 0f16a6b

Browse files
committed
Adding Integ Tests
Signed-off-by: Dharmesh 💤 <sdharms@amazon.com>
1 parent 74d4a88 commit 0f16a6b

File tree

5 files changed

+179
-1
lines changed

5 files changed

+179
-1
lines changed

plugins/repository-azure/src/test/java/org/opensearch/repositories/azure/AzureRepositorySettingsTests.java

+21
Original file line numberDiff line numberDiff line change
@@ -34,16 +34,20 @@
3434

3535
import org.opensearch.cluster.metadata.RepositoryMetadata;
3636
import org.opensearch.common.settings.ClusterSettings;
37+
import org.opensearch.common.settings.Setting;
3738
import org.opensearch.common.settings.Settings;
3839
import org.opensearch.core.common.unit.ByteSizeUnit;
3940
import org.opensearch.core.common.unit.ByteSizeValue;
4041
import org.opensearch.core.xcontent.NamedXContentRegistry;
4142
import org.opensearch.env.Environment;
4243
import org.opensearch.indices.recovery.RecoverySettings;
44+
import org.opensearch.repositories.blobstore.BlobStoreRepository;
4345
import org.opensearch.repositories.blobstore.BlobStoreTestUtil;
4446
import org.opensearch.test.OpenSearchTestCase;
4547
import org.junit.AfterClass;
4648

49+
import java.util.List;
50+
4751
import reactor.core.scheduler.Schedulers;
4852

4953
import static org.hamcrest.Matchers.is;
@@ -179,4 +183,21 @@ public void testChunkSize() {
179183
);
180184
}
181185

186+
public void testSystemRepositoryDefault() {
187+
assertThat(azureRepository(Settings.EMPTY).isSystemRepository(), is(false));
188+
}
189+
190+
public void testSystemRepositoryOn() {
191+
assertThat(azureRepository(Settings.builder().put("system_repository", true).build()).isSystemRepository(), is(true));
192+
}
193+
194+
public void testRestrictedSettingsDefault() {
195+
List<Setting<?>> restrictedSettings = azureRepository(Settings.EMPTY).getRestrictedSystemRepositorySettings();
196+
assertThat(restrictedSettings.size(), is(5));
197+
assertTrue(restrictedSettings.contains(BlobStoreRepository.SYSTEM_REPOSITORY_SETTING));
198+
assertTrue(restrictedSettings.contains(BlobStoreRepository.READONLY_SETTING));
199+
assertTrue(restrictedSettings.contains(BlobStoreRepository.REMOTE_STORE_INDEX_SHALLOW_COPY));
200+
assertTrue(restrictedSettings.contains(AzureRepository.Repository.BASE_PATH_SETTING));
201+
assertTrue(restrictedSettings.contains(AzureRepository.Repository.LOCATION_MODE_SETTING));
202+
}
182203
}

server/src/internalClusterTest/java/org/opensearch/remotestore/RemoteStoreBaseIntegTestCase.java

+7-1
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import org.opensearch.indices.replication.common.ReplicationType;
3030
import org.opensearch.node.Node;
3131
import org.opensearch.node.remotestore.RemoteStoreNodeAttribute;
32+
import org.opensearch.repositories.RepositoriesService;
3233
import org.opensearch.repositories.blobstore.BlobStoreRepository;
3334
import org.opensearch.repositories.fs.FsRepository;
3435
import org.opensearch.test.OpenSearchIntegTestCase;
@@ -302,11 +303,16 @@ public void assertRemoteStoreRepositoryOnAllNodes(String repositoryName) {
302303
.custom(RepositoriesMetadata.TYPE);
303304
RepositoryMetadata actualRepository = repositories.repository(repositoryName);
304305

306+
final RepositoriesService repositoriesService = internalCluster().getClusterManagerNodeInstance(RepositoriesService.class);
307+
final BlobStoreRepository repository = (BlobStoreRepository) repositoriesService.repository(repositoryName);
308+
305309
for (String nodeName : internalCluster().getNodeNames()) {
306310
ClusterService clusterService = internalCluster().getInstance(ClusterService.class, nodeName);
307311
DiscoveryNode node = clusterService.localNode();
308312
RepositoryMetadata expectedRepository = buildRepositoryMetadata(node, repositoryName);
309-
assertTrue(actualRepository.equalsIgnoreGenerations(expectedRepository));
313+
repository.getRestrictedSystemRepositorySettings()
314+
.stream()
315+
.forEach(setting -> assertEquals(setting.get(actualRepository.settings()), setting.get(expectedRepository.settings())));
310316
}
311317
}
312318

server/src/internalClusterTest/java/org/opensearch/remotestore/RemoteStoreRepositoryRegistrationIT.java

+68
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@
88

99
package org.opensearch.remotestore;
1010

11+
import org.opensearch.client.Client;
12+
import org.opensearch.cluster.metadata.RepositoryMetadata;
13+
import org.opensearch.common.settings.Settings;
14+
import org.opensearch.core.common.unit.ByteSizeValue;
1115
import org.opensearch.plugins.Plugin;
1216
import org.opensearch.test.OpenSearchIntegTestCase;
1317
import org.opensearch.test.disruption.NetworkDisruption;
@@ -94,4 +98,68 @@ public void testMultiNodeClusterRandomNodeRecoverNetworkIsolation() {
9498

9599
internalCluster().clearDisruptionScheme();
96100
}
101+
102+
public void testMultiNodeClusterRandomNodeRecoverNetworkIsolationPostNonRestrictedSettingsUpdate() {
103+
Set<String> nodesInOneSide = internalCluster().startNodes(3).stream().collect(Collectors.toCollection(HashSet::new));
104+
Set<String> nodesInAnotherSide = internalCluster().startNodes(3).stream().collect(Collectors.toCollection(HashSet::new));
105+
ensureStableCluster(6);
106+
107+
NetworkDisruption networkDisruption = new NetworkDisruption(
108+
new NetworkDisruption.TwoPartitions(nodesInOneSide, nodesInAnotherSide),
109+
NetworkDisruption.DISCONNECT
110+
);
111+
internalCluster().setDisruptionScheme(networkDisruption);
112+
113+
networkDisruption.startDisrupting();
114+
115+
final Client client = client(nodesInOneSide.iterator().next());
116+
RepositoryMetadata repositoryMetadata = client.admin()
117+
.cluster()
118+
.prepareGetRepositories(REPOSITORY_NAME)
119+
.get()
120+
.repositories()
121+
.get(0);
122+
Settings.Builder updatedSettings = Settings.builder().put(repositoryMetadata.settings()).put("chunk_size", new ByteSizeValue(20));
123+
updatedSettings.remove("system_repository");
124+
125+
client.admin()
126+
.cluster()
127+
.preparePutRepository(repositoryMetadata.name())
128+
.setType(repositoryMetadata.type())
129+
.setSettings(updatedSettings)
130+
.get();
131+
132+
ensureStableCluster(3, nodesInOneSide.stream().findAny().get());
133+
networkDisruption.stopDisrupting();
134+
135+
ensureStableCluster(6);
136+
137+
internalCluster().clearDisruptionScheme();
138+
}
139+
140+
public void testNodeRestartPostNonRestrictedSettingsUpdate() throws Exception {
141+
internalCluster().startClusterManagerOnlyNode();
142+
internalCluster().startNodes(3);
143+
144+
final Client client = client();
145+
RepositoryMetadata repositoryMetadata = client.admin()
146+
.cluster()
147+
.prepareGetRepositories(REPOSITORY_NAME)
148+
.get()
149+
.repositories()
150+
.get(0);
151+
Settings.Builder updatedSettings = Settings.builder().put(repositoryMetadata.settings()).put("chunk_size", new ByteSizeValue(20));
152+
updatedSettings.remove("system_repository");
153+
154+
client.admin()
155+
.cluster()
156+
.preparePutRepository(repositoryMetadata.name())
157+
.setType(repositoryMetadata.type())
158+
.setSettings(updatedSettings)
159+
.get();
160+
161+
internalCluster().restartRandomDataNode();
162+
163+
ensureStableCluster(4);
164+
}
97165
}

server/src/internalClusterTest/java/org/opensearch/repositories/RepositoriesServiceIT.java

+12
Original file line numberDiff line numberDiff line change
@@ -108,4 +108,16 @@ public void testUpdateRepository() {
108108
final Repository updatedRepository = repositoriesService.repository(repositoryName);
109109
assertThat(updatedRepository, updated ? not(sameInstance(originalRepository)) : sameInstance(originalRepository));
110110
}
111+
112+
public void testSystemRepositoryCantBeCreated() {
113+
internalCluster();
114+
final String repositoryName = "test-repo";
115+
final Client client = client();
116+
final Settings.Builder repoSettings = Settings.builder().put("system_repository", true).put("location", randomRepoPath());
117+
118+
assertThrows(
119+
RepositoryException.class,
120+
() -> client.admin().cluster().preparePutRepository(repositoryName).setType(FsRepository.TYPE).setSettings(repoSettings).get()
121+
);
122+
}
111123
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
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+
* compatible open source license.
7+
*/
8+
9+
package org.opensearch.snapshots;
10+
11+
import org.opensearch.client.Client;
12+
import org.opensearch.common.settings.Settings;
13+
import org.opensearch.core.common.unit.ByteSizeValue;
14+
import org.opensearch.repositories.RepositoryException;
15+
import org.opensearch.repositories.fs.FsRepository;
16+
import org.opensearch.test.OpenSearchIntegTestCase;
17+
import org.junit.Before;
18+
19+
import java.nio.file.Path;
20+
21+
import static org.opensearch.remotestore.RemoteStoreBaseIntegTestCase.remoteStoreClusterSettings;
22+
import static org.opensearch.test.hamcrest.OpenSearchAssertions.assertAcked;
23+
24+
@OpenSearchIntegTestCase.ClusterScope(scope = OpenSearchIntegTestCase.Scope.TEST, numDataNodes = 0)
25+
public class SystemRepositoryIT extends AbstractSnapshotIntegTestCase {
26+
protected Path absolutePath;
27+
final String systemRepoName = "system-repo-name";
28+
29+
@Before
30+
public void setup() {
31+
absolutePath = randomRepoPath().toAbsolutePath();
32+
}
33+
34+
@Override
35+
protected Settings nodeSettings(int nodeOrdinal) {
36+
return Settings.builder()
37+
.put(super.nodeSettings(nodeOrdinal))
38+
.put(remoteStoreClusterSettings(systemRepoName, absolutePath))
39+
.build();
40+
}
41+
42+
public void testRestrictedSettingsCantBeUpdated() {
43+
disableRepoConsistencyCheck("System repository is being used for the test");
44+
45+
internalCluster().startNode();
46+
final Client client = client();
47+
final Settings.Builder repoSettings = Settings.builder().put("location", randomRepoPath());
48+
49+
RepositoryException e = expectThrows(
50+
RepositoryException.class,
51+
() -> client.admin().cluster().preparePutRepository(systemRepoName).setType("mock").setSettings(repoSettings).get()
52+
);
53+
assertEquals(
54+
e.getMessage(),
55+
"[system-repo-name] trying to modify an unmodifiable attribute type of system "
56+
+ "repository from current value [fs] to new value [mock]"
57+
);
58+
}
59+
60+
public void testSystemRepositoryNonRestrictedSettingsCanBeUpdated() {
61+
disableRepoConsistencyCheck("System repository is being used for the test");
62+
63+
internalCluster().startNode();
64+
final Client client = client();
65+
final Settings.Builder repoSettings = Settings.builder().put("location", absolutePath).put("chunk_size", new ByteSizeValue(20));
66+
67+
assertAcked(
68+
client.admin().cluster().preparePutRepository(systemRepoName).setType(FsRepository.TYPE).setSettings(repoSettings).get()
69+
);
70+
}
71+
}

0 commit comments

Comments
 (0)