Skip to content

Commit 1425f49

Browse files
committed
[Test] Reconcile TestProjectResolvers
This PR updates the different methods in TestProjectResolvers so that their names are more accurate and behaviours to be more as expected.
1 parent bfa4203 commit 1425f49

File tree

2 files changed

+48
-7
lines changed

2 files changed

+48
-7
lines changed

test/framework/src/main/java/org/elasticsearch/cluster/project/TestProjectResolvers.java

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import org.elasticsearch.common.util.concurrent.ThreadContext;
1717
import org.elasticsearch.core.CheckedRunnable;
1818
import org.elasticsearch.tasks.Task;
19+
import org.elasticsearch.test.ESTestCase;
1920

2021
import java.util.Collection;
2122
import java.util.Objects;
@@ -60,7 +61,7 @@ public boolean supportsMultipleProjects() {
6061
* with the executeOnProject method. This is mostly useful in places where we just need a placeholder to satisfy
6162
* the constructor signature.
6263
*/
63-
public static ProjectResolver singleProjectOnly() {
64+
public static ProjectResolver mustExecuteFirst() {
6465
return new ProjectResolver() {
6566

6667
private ProjectId enforceProjectId = null;
@@ -102,12 +103,25 @@ public boolean supportsMultipleProjects() {
102103

103104
/**
104105
* This method returns a ProjectResolver that gives back the specified project-id when its getProjectId method is called.
105-
* It also assumes it is the only project in the cluster state and throws if that is not the case.
106+
* The ProjectResolver can work with cluster state containing multiple projects and its supportsMultipleProjects returns true.
106107
*/
107108
public static ProjectResolver singleProject(ProjectId projectId) {
108109
return singleProject(projectId, false);
109110
}
110111

112+
/**
113+
* This method returns a ProjectResolver that returns a random unique project-id.
114+
* It also assumes it is the only project in the cluster state and throws if that is not the case.
115+
* In addition, the ProjectResolvers returns false for supportsMultipleProjects.
116+
*/
117+
public static ProjectResolver singleProjectOnly() {
118+
return singleProjectOnly(ESTestCase.randomUniqueProjectId());
119+
}
120+
121+
public static ProjectResolver singleProjectOnly(ProjectId projectId) {
122+
return singleProject(projectId, true);
123+
}
124+
111125
private static ProjectResolver singleProject(ProjectId projectId, boolean only) {
112126
Objects.requireNonNull(projectId);
113127
return new ProjectResolver() {

test/framework/src/test/java/org/elasticsearch/cluster/project/TestProjectResolversTests.java

Lines changed: 32 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,11 @@
1717
import org.elasticsearch.test.ESTestCase;
1818

1919
import static org.hamcrest.Matchers.contains;
20+
import static org.hamcrest.Matchers.containsString;
2021
import static org.hamcrest.Matchers.equalTo;
2122
import static org.hamcrest.Matchers.greaterThan;
2223
import static org.hamcrest.Matchers.hasSize;
24+
import static org.hamcrest.Matchers.is;
2325
import static org.hamcrest.Matchers.notNullValue;
2426

2527
public class TestProjectResolversTests extends ESTestCase {
@@ -37,17 +39,42 @@ public void testAllProjects() {
3739
public void testSingleProject() {
3840
final ProjectId projectId = randomUniqueProjectId();
3941
final ProjectResolver projectResolver = TestProjectResolvers.singleProject(projectId);
42+
assertThat(projectResolver.supportsMultipleProjects(), is(true));
4043
assertThat(projectResolver.getProjectId(), equalTo(projectId));
4144

4245
ClusterState state = buildClusterState(projectId, randomIntBetween(0, 10));
4346
assertThat(projectResolver.getProjectMetadata(state), notNullValue());
4447
}
4548

46-
public void testSingleProjectOnly_getProjectIdAndMetadata() {
49+
public void testSingleProjectOnly() {
50+
final ProjectResolver projectResolver = TestProjectResolvers.singleProjectOnly();
51+
assertThat(projectResolver.supportsMultipleProjects(), is(false));
52+
final var projectId = projectResolver.getProjectId();
53+
54+
ClusterState state = buildClusterState(projectId, 0);
55+
assertThat(projectResolver.getProjectMetadata(state), notNullValue());
56+
57+
final IllegalStateException e = expectThrows(
58+
IllegalStateException.class,
59+
() -> projectResolver.getProjectMetadata(buildClusterState(projectId, randomIntBetween(1, 10)))
60+
);
61+
assertThat(e.getMessage(), containsString("Cluster has multiple projects"));
62+
}
63+
64+
public void testDefaultProjectOnly() {
65+
final ProjectResolver projectResolver = TestProjectResolvers.DEFAULT_PROJECT_ONLY;
66+
assertThat(projectResolver.supportsMultipleProjects(), is(false));
67+
assertThat(projectResolver.getProjectId(), equalTo(ProjectId.DEFAULT));
68+
69+
ClusterState state = buildClusterState(ProjectId.DEFAULT, 0);
70+
assertThat(projectResolver.getProjectMetadata(state), notNullValue());
71+
}
72+
73+
public void testMustExecuteFirst_getProjectIdAndMetadata() {
4774
final ProjectId projectId = randomUniqueProjectId();
4875
final ClusterState state = buildClusterState(projectId);
4976

50-
final ProjectResolver projectResolver = TestProjectResolvers.singleProjectOnly();
77+
final ProjectResolver projectResolver = TestProjectResolvers.mustExecuteFirst();
5178
expectThrows(UnsupportedOperationException.class, projectResolver::getProjectId);
5279
expectThrows(UnsupportedOperationException.class, () -> projectResolver.getProjectMetadata(state));
5380

@@ -57,9 +84,9 @@ public void testSingleProjectOnly_getProjectIdAndMetadata() {
5784
});
5885
}
5986

60-
public void testSingleProjectOnly_getProjectIds() {
87+
public void testMustExecuteFirst_getProjectIds() {
6188
{
62-
final ProjectResolver projectResolver = TestProjectResolvers.singleProjectOnly();
89+
final ProjectResolver projectResolver = TestProjectResolvers.mustExecuteFirst();
6390
final ProjectId projectId = randomUniqueProjectId();
6491
ClusterState state = buildClusterState(projectId);
6592
assertThat(state.metadata().projects().values(), hasSize(1));
@@ -71,7 +98,7 @@ public void testSingleProjectOnly_getProjectIds() {
7198
});
7299
}
73100
{
74-
final ProjectResolver projectResolver = TestProjectResolvers.singleProjectOnly();
101+
final ProjectResolver projectResolver = TestProjectResolvers.mustExecuteFirst();
75102
final ProjectId projectId = randomUniqueProjectId();
76103
ClusterState state = buildClusterState(projectId, randomIntBetween(1, 10));
77104
assertThat(state.metadata().projects().values().size(), greaterThan(1));

0 commit comments

Comments
 (0)