From fca7058995a3ed7459bea5d1b7ce3724f8b61b68 Mon Sep 17 00:00:00 2001 From: Nils Bandener Date: Mon, 2 Sep 2024 09:36:10 +0200 Subject: [PATCH] Cleanups Signed-off-by: Nils Bandener --- .../privileges/ActionPrivilegesTest.java | 0 .../PrivilegeEvaluatorResponseMatcher.java | 0 .../util/MockIndexMetadataBuilder.java | 114 +++++++++++------- .../util/MockIndexMetadataBuilder.java | 3 + 4 files changed, 72 insertions(+), 45 deletions(-) rename src/{test => integrationTest}/java/org/opensearch/security/privileges/ActionPrivilegesTest.java (100%) rename src/{test => integrationTest}/java/org/opensearch/security/privileges/PrivilegeEvaluatorResponseMatcher.java (100%) diff --git a/src/test/java/org/opensearch/security/privileges/ActionPrivilegesTest.java b/src/integrationTest/java/org/opensearch/security/privileges/ActionPrivilegesTest.java similarity index 100% rename from src/test/java/org/opensearch/security/privileges/ActionPrivilegesTest.java rename to src/integrationTest/java/org/opensearch/security/privileges/ActionPrivilegesTest.java diff --git a/src/test/java/org/opensearch/security/privileges/PrivilegeEvaluatorResponseMatcher.java b/src/integrationTest/java/org/opensearch/security/privileges/PrivilegeEvaluatorResponseMatcher.java similarity index 100% rename from src/test/java/org/opensearch/security/privileges/PrivilegeEvaluatorResponseMatcher.java rename to src/integrationTest/java/org/opensearch/security/privileges/PrivilegeEvaluatorResponseMatcher.java diff --git a/src/integrationTest/java/org/opensearch/security/util/MockIndexMetadataBuilder.java b/src/integrationTest/java/org/opensearch/security/util/MockIndexMetadataBuilder.java index 77549eba99..83e7f2ed7e 100644 --- a/src/integrationTest/java/org/opensearch/security/util/MockIndexMetadataBuilder.java +++ b/src/integrationTest/java/org/opensearch/security/util/MockIndexMetadataBuilder.java @@ -12,16 +12,19 @@ import java.util.ArrayList; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.stream.Collectors; + +import com.google.common.collect.ImmutableMap; import org.opensearch.Version; import org.opensearch.cluster.metadata.AliasMetadata; import org.opensearch.cluster.metadata.DataStream; import org.opensearch.cluster.metadata.IndexAbstraction; import org.opensearch.cluster.metadata.IndexMetadata; -import org.opensearch.cluster.metadata.Metadata; import org.opensearch.common.settings.Settings; import org.opensearch.core.index.Index; @@ -31,15 +34,12 @@ */ public class MockIndexMetadataBuilder { - private static final Settings INDEX_SETTINGS = Settings.builder() + private final static Settings INDEX_SETTINGS = Settings.builder() .put(IndexMetadata.SETTING_INDEX_VERSION_CREATED.getKey(), Version.CURRENT) .put(IndexMetadata.SETTING_NUMBER_OF_SHARDS, 1) .put(IndexMetadata.SETTING_NUMBER_OF_REPLICAS, 1) .build(); - private Metadata.Builder delegate = new Metadata.Builder(); - private Map nameToIndexMetadataBuilderMap = new HashMap<>(); - private Map nameToIndexAbstractionMap = new HashMap<>(); private Map nameToIndexMetadataMap = new HashMap<>(); private Map> indicesToAliases = new HashMap<>(); @@ -65,16 +65,55 @@ public static MockIndexMetadataBuilder dataStreams(String... dataStreams) { return builder; } - public Metadata build() { - for (IndexMetadata.Builder indexMetadataBuilder : nameToIndexMetadataBuilderMap.values()) { - this.delegate.put(indexMetadataBuilder); + public ImmutableMap build() { + Map aliasMetadataMap = new HashMap<>(); + + for (Map.Entry> aliasEntry : this.aliasesToIndices.entrySet()) { + String alias = aliasEntry.getKey(); + AliasMetadata aliasMetadata = AliasMetadata.builder(alias).build(); + aliasMetadataMap.put(alias, aliasMetadata); + } + + for (Map.Entry> indexEntry : this.indicesToAliases.entrySet()) { + String index = indexEntry.getKey(); + Set aliases = indexEntry.getValue(); + + IndexMetadata.Builder indexMetadataBuilder = IndexMetadata.builder(index).settings(INDEX_SETTINGS); + + for (String alias : aliases) { + indexMetadataBuilder.putAlias(aliasMetadataMap.get(alias)); + } + + IndexMetadata indexMetadata = indexMetadataBuilder.build(); + nameToIndexMetadataMap.put(index, indexMetadata); + nameToIndexAbstractionMap.put(index, new IndexAbstraction.Index(indexMetadata)); + } + + for (Map.Entry> aliasEntry : this.aliasesToIndices.entrySet()) { + String alias = aliasEntry.getKey(); + Set indices = aliasEntry.getValue(); + AliasMetadata aliasMetadata = aliasMetadataMap.get(alias); + + String firstIndex = indices.iterator().next(); + indices.remove(firstIndex); + + IndexMetadata firstIndexMetadata = nameToIndexMetadataMap.get(firstIndex); + IndexAbstraction.Alias indexAbstraction = new IndexAbstraction.Alias(aliasMetadata, firstIndexMetadata); + + for (String index : indices) { + indexAbstraction.getIndices().add(nameToIndexMetadataMap.get(index)); + } + + nameToIndexAbstractionMap.put(alias, indexAbstraction); } - return this.delegate.build(); + return ImmutableMap.copyOf(this.nameToIndexAbstractionMap); } - public MockIndexMetadataBuilder index(String indexName) { - getIndexMetadataBuilder(indexName); + public MockIndexMetadataBuilder index(String index) { + if (!this.indicesToAliases.containsKey(index)) { + this.indicesToAliases.put(index, new HashSet<>()); + } return this; } @@ -92,11 +131,21 @@ public MockIndexMetadataBuilder dataStream(String dataStream, int generations) { for (int i = 1; i <= generations; i++) { String backingIndexName = DataStream.getDefaultBackingIndexName(dataStream, i); backingIndices.add(new Index(backingIndexName, backingIndexName)); - getIndexMetadata(backingIndexName); } DataStream dataStreamMetadata = new DataStream(dataStream, new DataStream.TimestampField("@timestamp"), backingIndices); - this.delegate.put(dataStreamMetadata); + IndexAbstraction.DataStream dataStreamIndexAbstraction = new IndexAbstraction.DataStream( + dataStreamMetadata, + backingIndices.stream().map(i -> getIndexMetadata(i.getName())).collect(Collectors.toList()) + ); + this.nameToIndexAbstractionMap.put(dataStream, dataStreamIndexAbstraction); + + for (Index backingIndex : backingIndices) { + this.nameToIndexAbstractionMap.put( + backingIndex.getName(), + new IndexAbstraction.Index(getIndexMetadata(backingIndex.getName()), dataStreamIndexAbstraction) + ); + } return this; } @@ -116,51 +165,26 @@ private IndexMetadata getIndexMetadata(String index) { return result; } - private IndexMetadata.Builder getIndexMetadataBuilder(String indexName) { - IndexMetadata.Builder result = this.nameToIndexMetadataBuilderMap.get(indexName); - - if (result != null) { - return result; - } - - result = new IndexMetadata.Builder(indexName).settings(INDEX_SETTINGS); - - this.nameToIndexMetadataBuilderMap.put(indexName, result); - - return result; - } - public class AliasBuilder { - private String aliasName; + private String alias; private AliasBuilder(String alias) { - this.aliasName = alias; + this.alias = alias; } - public MockIndexMetadataBuilder of(String... indices) { - AliasMetadata aliasMetadata = new AliasMetadata.Builder(aliasName).build(); - - for (String index : indices) { - IndexMetadata.Builder indexMetadataBuilder = getIndexMetadataBuilder(index); - indexMetadataBuilder.putAlias(aliasMetadata); - } - - /* - - MockIndexMetadataBuilder.this.delegate.put(aliasMetadata); - - MockIndexMetadataBuilder.this.indicesToAliases.computeIfAbsent(firstIndex, (k) -> new HashSet<>()).add(this.aliasName); + public MockIndexMetadataBuilder of(String firstIndex, String... moreIndices) { + MockIndexMetadataBuilder.this.indicesToAliases.computeIfAbsent(firstIndex, (k) -> new HashSet<>()).add(this.alias); Set indices = new HashSet<>(); indices.add(firstIndex); for (String index : moreIndices) { - MockIndexMetadataBuilder.this.indicesToAliases.computeIfAbsent(index, (k) -> new HashSet<>()).add(this.aliasName); + MockIndexMetadataBuilder.this.indicesToAliases.computeIfAbsent(index, (k) -> new HashSet<>()).add(this.alias); indices.add(index); } - MockIndexMetadataBuilder.this.aliasesToIndices.put(this.aliasName, indices); - */ + MockIndexMetadataBuilder.this.aliasesToIndices.put(this.alias, indices); + return MockIndexMetadataBuilder.this; } } diff --git a/src/test/java/org/opensearch/security/util/MockIndexMetadataBuilder.java b/src/test/java/org/opensearch/security/util/MockIndexMetadataBuilder.java index 83e7f2ed7e..e8af0f1384 100644 --- a/src/test/java/org/opensearch/security/util/MockIndexMetadataBuilder.java +++ b/src/test/java/org/opensearch/security/util/MockIndexMetadataBuilder.java @@ -31,6 +31,9 @@ /** * Creates mocks of org.opensearch.cluster.metadata.IndexAbstraction maps. Useful for unit testing code which * operates on index metadata. + * + * TODO: This is the evil twin of the same class in the integrationTest module. Possibly tests depending on this + * should be moved to the integrationTest module? */ public class MockIndexMetadataBuilder {