|
11 | 11 |
|
12 | 12 | package org.opensearch.security.privileges; |
13 | 13 |
|
| 14 | +import java.util.Set; |
| 15 | + |
| 16 | +import org.junit.Test; |
| 17 | + |
| 18 | +import org.opensearch.action.admin.cluster.stats.ClusterStatsRequest; |
| 19 | +import org.opensearch.action.search.SearchRequest; |
| 20 | +import org.opensearch.action.support.ActionRequestMetadata; |
14 | 21 | import org.opensearch.cluster.ClusterState; |
15 | 22 | import org.opensearch.cluster.metadata.IndexNameExpressionResolver; |
16 | 23 | import org.opensearch.cluster.metadata.Metadata; |
| 24 | +import org.opensearch.cluster.metadata.OptionallyResolvedIndices; |
| 25 | +import org.opensearch.cluster.metadata.ResolvedIndices; |
17 | 26 | import org.opensearch.common.settings.Settings; |
18 | 27 | import org.opensearch.common.util.concurrent.ThreadContext; |
19 | 28 | import org.opensearch.security.util.MockIndexMetadataBuilder; |
| 29 | +import org.opensearch.security.util.MockPrivilegeEvaluationContextBuilder; |
| 30 | + |
| 31 | +import static org.junit.Assert.assertEquals; |
| 32 | +import static org.junit.Assert.assertFalse; |
| 33 | +import static org.junit.Assert.fail; |
| 34 | +import static org.mockito.Mockito.mock; |
| 35 | +import static org.mockito.Mockito.when; |
20 | 36 |
|
21 | 37 | public class IndicesRequestResolverTest { |
22 | 38 |
|
23 | | - static final Metadata metadata = MockIndexMetadataBuilder.indices("index1", "index2", "index3").build(); |
| 39 | + static final Metadata metadata = MockIndexMetadataBuilder.indices("index_a1", "index_a2", "index_b1", "index_b2").build(); |
24 | 40 | final static ClusterState clusterState = ClusterState.builder(ClusterState.EMPTY_STATE).metadata(metadata).build(); |
25 | 41 | static final IndicesRequestResolver subject = new IndicesRequestResolver( |
26 | 42 | new IndexNameExpressionResolver(new ThreadContext(Settings.EMPTY)) |
27 | 43 | ); |
28 | | - /* |
| 44 | + |
29 | 45 | @Test |
30 | 46 | public void resolve_normal() { |
31 | 47 | SearchRequest request = new SearchRequest("index1"); |
32 | 48 | ActionRequestMetadata<SearchRequest, ?> actionRequestMetadata = mock(); |
33 | 49 | ResolvedIndices resolvedIndices = ResolvedIndices.of("index1"); |
34 | | - when(actionRequestMetadata.resolvedIndices()).thenReturn(Optional.of(resolvedIndices)); |
| 50 | + when(actionRequestMetadata.resolvedIndices()).thenReturn(resolvedIndices); |
35 | 51 |
|
36 | | - ResolvedIndices returnedResolvedIndices = subject.resolve(request, actionRequestMetadata, () -> clusterState); |
| 52 | + OptionallyResolvedIndices returnedResolvedIndices = subject.resolve(request, actionRequestMetadata, () -> clusterState); |
37 | 53 | assertEquals(resolvedIndices, returnedResolvedIndices); |
38 | 54 | } |
39 | 55 |
|
40 | 56 | @Test |
41 | 57 | public void resolve_fallback() { |
42 | 58 | SearchRequest request = new SearchRequest("index1"); |
43 | 59 | ActionRequestMetadata<SearchRequest, ?> actionRequestMetadata = mock(); |
44 | | - when(actionRequestMetadata.resolvedIndices()).thenReturn(Optional.empty()); |
| 60 | + when(actionRequestMetadata.resolvedIndices()).thenReturn(OptionallyResolvedIndices.unknown()); |
45 | 61 |
|
46 | | - ResolvedIndices returnedResolvedIndices = subject.resolve(request, actionRequestMetadata, () -> clusterState); |
47 | | - assertEquals(Set.of("index1"), returnedResolvedIndices.local().names()); |
| 62 | + OptionallyResolvedIndices returnedResolvedIndices = subject.resolve(request, actionRequestMetadata, () -> clusterState); |
| 63 | + if (returnedResolvedIndices instanceof ResolvedIndices castReturnedResovledIndices) { |
| 64 | + assertEquals(Set.of("index1"), castReturnedResovledIndices.local().names()); |
| 65 | + } else { |
| 66 | + fail("Expected ResolvedIndices, got: " + returnedResolvedIndices); |
| 67 | + } |
48 | 68 | } |
49 | 69 |
|
50 | 70 | @Test |
51 | 71 | public void resolve_fallbackUnsupported() { |
52 | 72 | ClusterStatsRequest request = new ClusterStatsRequest(); |
53 | 73 | ActionRequestMetadata<SearchRequest, ?> actionRequestMetadata = mock(); |
54 | | - when(actionRequestMetadata.resolvedIndices()).thenReturn(Optional.empty()); |
| 74 | + when(actionRequestMetadata.resolvedIndices()).thenReturn(OptionallyResolvedIndices.unknown()); |
55 | 75 |
|
56 | | - ResolvedIndices returnedResolvedIndices = subject.resolve(request, actionRequestMetadata, () -> clusterState); |
57 | | - assertTrue("Expected isAll(), got: " + returnedResolvedIndices, returnedResolvedIndices.local().isAll()); |
| 76 | + OptionallyResolvedIndices returnedResolvedIndices = subject.resolve(request, actionRequestMetadata, () -> clusterState); |
| 77 | + assertFalse(returnedResolvedIndices instanceof ResolvedIndices); |
58 | 78 | } |
59 | 79 |
|
60 | 80 | @Test |
61 | 81 | public void resolve_withPrivilegesEvaluationContext() { |
62 | | - SearchRequest request = new SearchRequest("index*"); |
| 82 | + SearchRequest request = new SearchRequest("index_a*"); |
63 | 83 | ActionRequestMetadata<SearchRequest, ?> actionRequestMetadata = mock(); |
64 | | - when(actionRequestMetadata.resolvedIndices()).thenReturn(Optional.empty()); |
| 84 | + when(actionRequestMetadata.resolvedIndices()).thenReturn(OptionallyResolvedIndices.unknown()); |
65 | 85 | PrivilegesEvaluationContext context = MockPrivilegeEvaluationContextBuilder.ctx().clusterState(clusterState).get(); |
66 | 86 |
|
67 | | - ResolvedIndices returnedResolvedIndices = subject.resolve(request, actionRequestMetadata, context); |
68 | | - assertEquals(Set.of("index1", "index2", "index3"), returnedResolvedIndices.local().names()); |
69 | | - }*/ |
| 87 | + OptionallyResolvedIndices returnedResolvedIndices = subject.resolve(request, actionRequestMetadata, context); |
| 88 | + assertEquals(Set.of("index_a1", "index_a2"), returnedResolvedIndices.local().names(clusterState)); |
| 89 | + } |
70 | 90 | } |
0 commit comments