Skip to content

Commit 0761a91

Browse files
test data stream APIs behaviour
1 parent d07b993 commit 0761a91

File tree

1 file changed

+101
-3
lines changed

1 file changed

+101
-3
lines changed

x-pack/plugin/security/qa/security-trial/src/javaRestTest/java/org/elasticsearch/xpack/security/failurestore/FailureStoreSecurityRestIT.java

Lines changed: 101 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
import java.util.List;
4848
import java.util.Locale;
4949
import java.util.Map;
50+
import java.util.Objects;
5051
import java.util.Set;
5152
import java.util.stream.Collectors;
5253
import java.util.stream.Stream;
@@ -57,6 +58,7 @@
5758
import static org.hamcrest.Matchers.equalTo;
5859
import static org.hamcrest.Matchers.hasItem;
5960
import static org.hamcrest.Matchers.is;
61+
import static org.hamcrest.Matchers.iterableWithSize;
6062
import static org.hamcrest.Matchers.notNullValue;
6163

6264
public class FailureStoreSecurityRestIT extends ESRestTestCase {
@@ -2016,9 +2018,105 @@ private Response modifyFailureStoreBackingIndex(String user, String action, Stri
20162018
return performRequest(user, request);
20172019
}
20182020

2019-
public void testDataStreamApi() {
2020-
// test get data stream
2021-
// test data stream stats
2021+
public void testDataStreamApis() throws Exception {
2022+
setupDataStream();
2023+
setupOtherDataStream();
2024+
2025+
final String username = "user";
2026+
final String roleName = "role";
2027+
createUser(username, PASSWORD, roleName);
2028+
{
2029+
// manage_failure_store does not grant access to _data_stream APIs
2030+
createOrUpdateRoleAndApiKey(username, roleName, """
2031+
{
2032+
"cluster": ["all"],
2033+
"indices": [
2034+
{
2035+
"names": ["test1", "other1"],
2036+
"privileges": ["manage_failure_store"]
2037+
}
2038+
]
2039+
}
2040+
""");
2041+
2042+
expectThrows(() -> performRequest(username, new Request("GET", "/_data_stream/test1")), 403);
2043+
expectThrows(() -> performRequest(username, new Request("GET", "/_data_stream/test1/_stats")), 403);
2044+
expectThrows(() -> performRequest(username, new Request("GET", "/_data_stream/test1/_options")), 403);
2045+
expectThrows(() -> performRequest(username, new Request("GET", "/_data_stream/test1/_lifecycle")), 403);
2046+
expectThrows(() -> putDataStreamLifecycle(username, "test1", """
2047+
{
2048+
"data_retention": "7d"
2049+
}"""), 403);
2050+
expectEmptyDataStreamStats(username, new Request("GET", "/_data_stream/_stats"));
2051+
expectEmptyDataStreamStats(username, new Request("GET", "/_data_stream/" + randomFrom("test*", "*") + "/_stats"));
2052+
}
2053+
{
2054+
createOrUpdateRoleAndApiKey(username, roleName, """
2055+
{
2056+
"cluster": ["all"],
2057+
"indices": [
2058+
{
2059+
"names": ["test1"],
2060+
"privileges": ["manage"]
2061+
}
2062+
]
2063+
}
2064+
""");
2065+
2066+
expectDataStreamStats(username, new Request("GET", "/_data_stream/_stats"), "test1", 2);
2067+
expectDataStreamStats(
2068+
username,
2069+
new Request("GET", "/_data_stream/" + randomFrom("test1", "test*", "*") + "/_stats"),
2070+
"test1",
2071+
2
2072+
);
2073+
expectDataStreams(username, new Request("GET", "/_data_stream/" + randomFrom("test1", "test*", "*")), "test1");
2074+
putDataStreamLifecycle(username, "test1", """
2075+
{
2076+
"data_retention": "7d"
2077+
}""");
2078+
2079+
var lifecycleResponse = assertOKAndCreateObjectPath(
2080+
performRequest(username, new Request("GET", "/_data_stream/" + randomFrom("test1", "test*", "*") + "/_lifecycle"))
2081+
);
2082+
assertThat(lifecycleResponse.evaluate("data_streams"), iterableWithSize(1));
2083+
assertThat(lifecycleResponse.evaluate("data_streams.0.name"), equalTo("test1"));
2084+
2085+
var optionsResponse = assertOKAndCreateObjectPath(
2086+
performRequest(username, new Request("GET", "/_data_stream/" + randomFrom("test1", "test*", "*") + "/_options"))
2087+
);
2088+
assertThat(optionsResponse.evaluate("data_streams"), iterableWithSize(1));
2089+
assertThat(optionsResponse.evaluate("data_streams.0.name"), equalTo("test1"));
2090+
}
2091+
}
2092+
2093+
private void putDataStreamLifecycle(String user, String dataStreamName, String lifecyclePolicy) throws IOException {
2094+
Request request = new Request("PUT", "/_data_stream/" + dataStreamName + "/_lifecycle");
2095+
request.setJsonEntity(lifecyclePolicy);
2096+
assertOK(performRequest(user, request));
2097+
}
2098+
2099+
private void expectDataStreams(String user, Request dataStreamRequest, String dataStreamName) throws IOException {
2100+
Response response = performRequest(user, dataStreamRequest);
2101+
ObjectPath path = assertOKAndCreateObjectPath(response);
2102+
List<Objects> dataStreams = path.evaluate("data_streams");
2103+
assertThat(dataStreams.size(), equalTo(1));
2104+
assertThat(path.evaluate("data_streams.0.name"), equalTo(dataStreamName));
2105+
}
2106+
2107+
private void expectDataStreamStats(String user, Request statsRequest, String dataStreamName, int backingIndices) throws IOException {
2108+
Response response = performRequest(user, statsRequest);
2109+
ObjectPath path = assertOKAndCreateObjectPath(response);
2110+
assertThat(path.evaluate("data_stream_count"), equalTo(1));
2111+
assertThat(path.evaluate("backing_indices"), equalTo(backingIndices));
2112+
assertThat(path.evaluate("data_streams.0.data_stream"), equalTo(dataStreamName));
2113+
}
2114+
2115+
private void expectEmptyDataStreamStats(String user, Request request) throws IOException {
2116+
Response response = performRequest(user, request);
2117+
ObjectPath path = assertOKAndCreateObjectPath(response);
2118+
assertThat(path.evaluate("data_stream_count"), equalTo(0));
2119+
assertThat(path.evaluate("backing_indices"), equalTo(0));
20222120
}
20232121

20242122
public void testAliasBasedAccess() throws Exception {

0 commit comments

Comments
 (0)