Skip to content
Snippets Groups Projects
Commit 37e0b852 authored by OZGCloud's avatar OZGCloud
Browse files

OZG-4453 impl reconciler#cleanup

parent a2f8565d
Branches
Tags
No related merge requests found
Showing with 315 additions and 100 deletions
package de.ozgcloud.operator; package de.ozgcloud.operator;
import java.util.logging.Level;
import org.apache.commons.collections.MapUtils; import org.apache.commons.collections.MapUtils;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
...@@ -19,17 +21,17 @@ import lombok.extern.java.Log; ...@@ -19,17 +21,17 @@ import lombok.extern.java.Log;
@Component @Component
public class ElasticsearchReconciler implements Reconciler<OzgCloudElasticsearchCustomResource>, Cleaner<OzgCloudElasticsearchCustomResource> { public class ElasticsearchReconciler implements Reconciler<OzgCloudElasticsearchCustomResource>, Cleaner<OzgCloudElasticsearchCustomResource> {
private final OzgCloudElasticsearchService searchService; private final OzgCloudElasticsearchService service;
@Override @Override
public UpdateControl<OzgCloudElasticsearchCustomResource> reconcile(OzgCloudElasticsearchCustomResource resource, Context<OzgCloudElasticsearchCustomResource> context) { public UpdateControl<OzgCloudElasticsearchCustomResource> reconcile(OzgCloudElasticsearchCustomResource resource, Context<OzgCloudElasticsearchCustomResource> context) {
try { try {
log.info("Reconcile user " + resource.getCRDName() + "..."); log.info("Reconcile user " + resource.getCRDName() + "...");
var namespace = resource.getMetadata().getNamespace(); var namespace = resource.getMetadata().getNamespace();
var secret = searchService.getOrCreateCredentialSecret(resource, context); var secret = service.getOrCreateCredentialSecret(resource, context);
searchService.createIndexIfMissing(namespace); service.createIndexIfMissing(namespace);
searchService.createSecurityRoleIfMissing(namespace); service.createSecurityRoleIfMissing(namespace);
searchService.checkSecurityUser(namespace, getPassword(secret)); service.createSecurityUserIfMissing(namespace, getPassword(secret));
log.info("Reconcile user successful."); log.info("Reconcile user successful.");
return OzgCloudElasticsearchUpdateControlBuilder.fromResource(resource).withStatus(CustomResourceStatus.OK).build(); return OzgCloudElasticsearchUpdateControlBuilder.fromResource(resource).withStatus(CustomResourceStatus.OK).build();
} catch (Exception e) { } catch (Exception e) {
...@@ -53,6 +55,15 @@ public class ElasticsearchReconciler implements Reconciler<OzgCloudElasticsearch ...@@ -53,6 +55,15 @@ public class ElasticsearchReconciler implements Reconciler<OzgCloudElasticsearch
@Override @Override
public DeleteControl cleanup(OzgCloudElasticsearchCustomResource resource, Context<OzgCloudElasticsearchCustomResource> context) { public DeleteControl cleanup(OzgCloudElasticsearchCustomResource resource, Context<OzgCloudElasticsearchCustomResource> context) {
var namespace = resource.getMetadata().getNamespace();
try {
service.deleteSecurityUserIfExists(namespace);
service.deleteSecurityRoleIfExists(namespace);
service.deleteIndexIfExists(namespace);
return DeleteControl.defaultDelete(); return DeleteControl.defaultDelete();
} catch(Exception e) {
log.log(Level.INFO, String.format("Could not cleanup elasticsearch resource in namespace %s. \n %s", namespace, e));
return DeleteControl.defaultDelete();
}
} }
} }
\ No newline at end of file
...@@ -86,7 +86,7 @@ public class OzgCloudElasticsearchService { ...@@ -86,7 +86,7 @@ public class OzgCloudElasticsearchService {
// curl -k -X POST -u elastic:$ELASTICSEARCH_PASSWORD -H 'Content-Type: application/json' // curl -k -X POST -u elastic:$ELASTICSEARCH_PASSWORD -H 'Content-Type: application/json'
// 'https://ozg-search-cluster-es-http:9200/_security/user/'$ES_NS_USER -d '{"password" : "'$ES_NS_PASSWORD'" ,"roles" : [ "'$ES_NS_USER'" ]}' // 'https://ozg-search-cluster-es-http:9200/_security/user/'$ES_NS_USER -d '{"password" : "'$ES_NS_PASSWORD'" ,"roles" : [ "'$ES_NS_USER'" ]}'
public void checkSecurityUser(String namespace, String password) throws Exception { public void createSecurityUserIfMissing(String namespace, String password) throws Exception {
log.info("Check security user..."); log.info("Check security user...");
if(!remoteService.existsSecurityUser(namespace)) { if(!remoteService.existsSecurityUser(namespace)) {
remoteService.createSecurityUser(buildPutUserRequestData(namespace, password)); remoteService.createSecurityUser(buildPutUserRequestData(namespace, password));
...@@ -98,7 +98,27 @@ public class OzgCloudElasticsearchService { ...@@ -98,7 +98,27 @@ public class OzgCloudElasticsearchService {
return PutUserRequestData.builder().username(namespace).roles(namespace).password(password).build(); return PutUserRequestData.builder().username(namespace).roles(namespace).password(password).build();
} }
public void deleteIndexIfExists(String name) { public void deleteSecurityUserIfExists(String userName) throws Exception {
log.info("Delete security user...");
if(remoteService.existsSecurityUser(userName)) {
remoteService.deleteSecurityUser(userName);
}
log.info("Delete security user successful.");
}
public void deleteSecurityRoleIfExists(String roleName) throws Exception {
log.info("Delete security role...");
if(remoteService.existsSecurityRole(roleName)) {
remoteService.deleteSecurityRole(roleName);
}
log.info("Delete security role successful.");
}
public void deleteIndexIfExists(String indexName) throws Exception {
log.info("Delete index role...");
if(remoteService.existsIndex(indexName)) {
remoteService.deleteIndex(indexName);
}
log.info("Delete index role successful.");
} }
} }
\ No newline at end of file
...@@ -7,9 +7,6 @@ import org.springframework.stereotype.Component; ...@@ -7,9 +7,6 @@ import org.springframework.stereotype.Component;
import co.elastic.clients.elasticsearch.ElasticsearchClient; import co.elastic.clients.elasticsearch.ElasticsearchClient;
import co.elastic.clients.elasticsearch._types.ElasticsearchException; import co.elastic.clients.elasticsearch._types.ElasticsearchException;
import co.elastic.clients.elasticsearch.indices.ExistsRequest;
import co.elastic.clients.elasticsearch.security.GetRoleRequest;
import co.elastic.clients.elasticsearch.security.GetUserRequest;
import co.elastic.clients.elasticsearch.security.IndicesPrivileges; import co.elastic.clients.elasticsearch.security.IndicesPrivileges;
import co.elastic.clients.elasticsearch.security.PutRoleRequest; import co.elastic.clients.elasticsearch.security.PutRoleRequest;
import co.elastic.clients.elasticsearch.security.PutUserRequest; import co.elastic.clients.elasticsearch.security.PutUserRequest;
...@@ -28,7 +25,7 @@ public class ElasticsearchRemoteService { ...@@ -28,7 +25,7 @@ public class ElasticsearchRemoteService {
public boolean existsIndex(String index) throws Exception { public boolean existsIndex(String index) throws Exception {
try { try {
log.info("Exists index " + index + "..."); log.info("Exists index " + index + "...");
var exists = client.indices().exists(createExistsRequest(index)).value(); var exists = client.indices().exists(builder -> builder.index(index)).value();
log.info("Exists index: " + exists); log.info("Exists index: " + exists);
return exists; return exists;
} catch (ElasticsearchException | IOException e) { } catch (ElasticsearchException | IOException e) {
...@@ -37,10 +34,6 @@ public class ElasticsearchRemoteService { ...@@ -37,10 +34,6 @@ public class ElasticsearchRemoteService {
} }
} }
ExistsRequest createExistsRequest(String index) {
return ExistsRequest.of(builder -> builder.index(index));
}
public void createIndex(String indexName) throws Exception { public void createIndex(String indexName) throws Exception {
try { try {
log.info("Create index " + indexName + "..."); log.info("Create index " + indexName + "...");
...@@ -53,12 +46,7 @@ public class ElasticsearchRemoteService { ...@@ -53,12 +46,7 @@ public class ElasticsearchRemoteService {
} }
public boolean existsSecurityRole(String roleName) throws Exception { public boolean existsSecurityRole(String roleName) throws Exception {
var role = client.security().getRole(createGetRoleRequest(roleName)); return !client.security().getRole(builder -> builder.name(roleName)).result().isEmpty();
return !role.result().isEmpty();
}
GetRoleRequest createGetRoleRequest(String name) {
return GetRoleRequest.of(builder -> builder.name(name));
} }
public void createSecurityRole(PutRoleRequestData requestData) throws Exception { public void createSecurityRole(PutRoleRequestData requestData) throws Exception {
...@@ -91,12 +79,7 @@ public class ElasticsearchRemoteService { ...@@ -91,12 +79,7 @@ public class ElasticsearchRemoteService {
} }
public boolean existsSecurityUser(String userName) throws Exception { public boolean existsSecurityUser(String userName) throws Exception {
var user = client.security().getUser(createGetUserRequest(userName)); return !client.security().getUser(builder -> builder.username(userName)).result().isEmpty();
return !user.result().isEmpty();
}
private GetUserRequest createGetUserRequest(String userName) {
return GetUserRequest.of(builder -> builder.username(userName));
} }
public void createSecurityUser(PutUserRequestData requestData) throws Exception { public void createSecurityUser(PutUserRequestData requestData) throws Exception {
...@@ -121,4 +104,37 @@ public class ElasticsearchRemoteService { ...@@ -121,4 +104,37 @@ public class ElasticsearchRemoteService {
return builder; return builder;
} }
public void deleteIndex(String indexName) throws Exception {
try {
log.info("Delete index " + indexName + "...");
client.indices().delete(builder -> builder.index(indexName));
log.info("Delete index successful.");
} catch(Exception e) {
log.log(Level.SEVERE, "Delete index failed." + e);
throw e;
}
}
public void deleteSecurityRole(String roleName) throws Exception {
try {
log.info("Delete security role " + roleName + "...");
client.security().deleteRole(builder -> builder.name(roleName));
log.info("Delete security role successful.");
} catch(Exception e) {
log.log(Level.SEVERE, "Delete security role failed." + e);
throw e;
}
}
public void deleteSecurityUser(String userName) throws Exception {
try {
log.info("Delete security user " + userName + "...");
client.security().deleteUser(builder -> builder.username(userName));
log.info("Delete security user successful.");
} catch(Exception e) {
log.log(Level.SEVERE, "Delete security user failed." + e);
throw e;
}
}
} }
\ No newline at end of file
...@@ -25,7 +25,7 @@ class ElasticsearchReconcilerTest { ...@@ -25,7 +25,7 @@ class ElasticsearchReconcilerTest {
@InjectMocks @InjectMocks
private ElasticsearchReconciler reconciler; private ElasticsearchReconciler reconciler;
@Mock @Mock
private OzgCloudElasticsearchService searchService; private OzgCloudElasticsearchService service;
@DisplayName("Reconcile") @DisplayName("Reconcile")
@Nested @Nested
...@@ -45,14 +45,14 @@ class ElasticsearchReconcilerTest { ...@@ -45,14 +45,14 @@ class ElasticsearchReconcilerTest {
@BeforeEach @BeforeEach
void mockCredentialSecret() { void mockCredentialSecret() {
when(searchService.getOrCreateCredentialSecret(any(), any())).thenReturn(secret); when(service.getOrCreateCredentialSecret(any(), any())).thenReturn(secret);
} }
@Test @Test
void shouldGetCredentialSecret() { void shouldGetCredentialSecret() {
reconcile(); reconcile();
verify(searchService).getOrCreateCredentialSecret(resource, context); verify(service).getOrCreateCredentialSecret(resource, context);
} }
@SneakyThrows @SneakyThrows
...@@ -60,7 +60,7 @@ class ElasticsearchReconcilerTest { ...@@ -60,7 +60,7 @@ class ElasticsearchReconcilerTest {
void shouldCheckIndex() { void shouldCheckIndex() {
reconcile(); reconcile();
verify(searchService).createIndexIfMissing(NamespaceTestFactory.NAMESPACE); verify(service).createIndexIfMissing(NamespaceTestFactory.NAMESPACE);
} }
@SneakyThrows @SneakyThrows
...@@ -68,7 +68,7 @@ class ElasticsearchReconcilerTest { ...@@ -68,7 +68,7 @@ class ElasticsearchReconcilerTest {
void shouldCheckSecurityRole() { void shouldCheckSecurityRole() {
reconcile(); reconcile();
verify(searchService).createSecurityRoleIfMissing(NamespaceTestFactory.NAMESPACE); verify(service).createSecurityRoleIfMissing(NamespaceTestFactory.NAMESPACE);
} }
@SneakyThrows @SneakyThrows
...@@ -76,7 +76,7 @@ class ElasticsearchReconcilerTest { ...@@ -76,7 +76,7 @@ class ElasticsearchReconcilerTest {
void shouldCheckSecurityUser() { void shouldCheckSecurityUser() {
reconcile(); reconcile();
verify(searchService).checkSecurityUser(NamespaceTestFactory.NAMESPACE, PASSWORD); verify(service).createSecurityUserIfMissing(NamespaceTestFactory.NAMESPACE, PASSWORD);
} }
} }
...@@ -88,7 +88,7 @@ class ElasticsearchReconcilerTest { ...@@ -88,7 +88,7 @@ class ElasticsearchReconcilerTest {
@BeforeEach @BeforeEach
void mock() { void mock() {
when(searchService.getOrCreateCredentialSecret(any(), any())).thenThrow(exception); when(service.getOrCreateCredentialSecret(any(), any())).thenThrow(exception);
} }
@Test @Test
...@@ -155,6 +155,30 @@ class ElasticsearchReconcilerTest { ...@@ -155,6 +155,30 @@ class ElasticsearchReconcilerTest {
private final OzgCloudElasticsearchCustomResource resource = ElasticsearchCustomResourceTestFactory.create(); private final OzgCloudElasticsearchCustomResource resource = ElasticsearchCustomResourceTestFactory.create();
@SneakyThrows
@Test
void shouldDeleteSecurityUser() {
reconciler.cleanup(resource, context);
verify(service).deleteSecurityUserIfExists(NamespaceTestFactory.NAMESPACE);
}
@SneakyThrows
@Test
void shouldDeleteSecurityRole() {
reconciler.cleanup(resource, context);
verify(service).deleteSecurityRoleIfExists(NamespaceTestFactory.NAMESPACE);
}
@SneakyThrows
@Test
void shouldDeleteIndex() {
reconciler.cleanup(resource, context);
verify(service).deleteIndexIfExists(NamespaceTestFactory.NAMESPACE);
}
@Test @Test
void shouldReturnDeleteControl(){ void shouldReturnDeleteControl(){
var deleteControl = reconciler.cleanup(resource, context); var deleteControl = reconciler.cleanup(resource, context);
......
...@@ -200,7 +200,7 @@ class OzgCloudElasticsearchServiceTest { ...@@ -200,7 +200,7 @@ class OzgCloudElasticsearchServiceTest {
@SneakyThrows @SneakyThrows
@Test @Test
void shouldCheckIfSecurityUserExists() { void shouldCheckIfSecurityUserExists() {
service.checkSecurityUser(NAMESPACE, PutUserRequestDataTestFactory.PASSWORD); service.createSecurityUserIfMissing(NAMESPACE, PutUserRequestDataTestFactory.PASSWORD);
verify(remoteService).existsSecurityUser(NAMESPACE); verify(remoteService).existsSecurityUser(NAMESPACE);
} }
...@@ -211,7 +211,7 @@ class OzgCloudElasticsearchServiceTest { ...@@ -211,7 +211,7 @@ class OzgCloudElasticsearchServiceTest {
when(remoteService.existsSecurityUser(any())).thenReturn(false); when(remoteService.existsSecurityUser(any())).thenReturn(false);
doReturn(putUserRequestData).when(service).buildPutUserRequestData(any(), any()); doReturn(putUserRequestData).when(service).buildPutUserRequestData(any(), any());
service.checkSecurityUser(NAMESPACE, PutUserRequestDataTestFactory.PASSWORD); service.createSecurityUserIfMissing(NAMESPACE, PutUserRequestDataTestFactory.PASSWORD);
verify(remoteService).createSecurityUser(putUserRequestData); verify(remoteService).createSecurityUser(putUserRequestData);
} }
...@@ -246,4 +246,75 @@ class OzgCloudElasticsearchServiceTest { ...@@ -246,4 +246,75 @@ class OzgCloudElasticsearchServiceTest {
} }
} }
} }
@DisplayName("Delete security user if exists")
@Nested
class TestDeleteSecurityUserIfExists {
@SneakyThrows
@Test
void shouldCheckIfSecurityUserExists() {
service.deleteSecurityUserIfExists(PutUserRequestDataTestFactory.USERNAME);
verify(remoteService).existsSecurityUser(PutUserRequestDataTestFactory.USERNAME);
}
@SneakyThrows
@Test
void shouldDeleteSecurityUserIfExists() {
when(remoteService.existsSecurityUser(any())).thenReturn(true);
service.deleteSecurityUserIfExists(PutUserRequestDataTestFactory.USERNAME);
verify(remoteService).deleteSecurityUser(PutUserRequestDataTestFactory.USERNAME);
}
}
@DisplayName("Delete security role if exists")
@Nested
class TestDeleteSecurityRoleIfExists {
@SneakyThrows
@Test
void shouldCheckIfSecurityRoleExists() {
service.deleteSecurityRoleIfExists(PutRoleRequestDataTestFactory.NAME);
verify(remoteService).existsSecurityRole(PutRoleRequestDataTestFactory.NAME);
}
@SneakyThrows
@Test
void shouldDeleteSecurityRoleIfExists() {
when(remoteService.existsSecurityRole(any())).thenReturn(true);
service.deleteSecurityRoleIfExists(PutRoleRequestDataTestFactory.NAME);
verify(remoteService).deleteSecurityRole(PutRoleRequestDataTestFactory.NAME);
}
}
@DisplayName("Delete index if exists")
@Nested
class TestDeleteIndexIfExists {
private static final String INDEX_NAME = NamespaceTestFactory.NAMESPACE;
@SneakyThrows
@Test
void shouldCheckIfIndexExists() {
service.deleteIndexIfExists(INDEX_NAME);
verify(remoteService).existsIndex(INDEX_NAME);
}
@SneakyThrows
@Test
void shouldDeleteSecurityRoleIfExists() {
when(remoteService.existsIndex(any())).thenReturn(true);
service.deleteIndexIfExists(INDEX_NAME);
verify(remoteService).deleteIndex(INDEX_NAME);
}
}
} }
\ No newline at end of file
...@@ -11,12 +11,11 @@ import org.junit.jupiter.api.Nested; ...@@ -11,12 +11,11 @@ import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import co.elastic.clients.elasticsearch.ElasticsearchClient; import co.elastic.clients.elasticsearch.ElasticsearchClient;
import co.elastic.clients.elasticsearch.indices.DeleteIndexRequest;
import co.elastic.clients.elasticsearch.indices.ExistsRequest; import co.elastic.clients.elasticsearch.indices.ExistsRequest;
import co.elastic.clients.elasticsearch.security.DeleteRoleRequest; import co.elastic.clients.elasticsearch.security.IndicesPrivileges;
import co.elastic.clients.elasticsearch.security.DeleteUserRequest; import co.elastic.clients.elasticsearch.security.PutRoleRequest;
import co.elastic.clients.elasticsearch.security.GetRoleRequest; import co.elastic.clients.elasticsearch.security.PutUserRequest;
import co.elastic.clients.elasticsearch.security.GetUserRequest; import de.ozgcloud.operator.IndicesPrivilegesDataTestFactory;
import de.ozgcloud.operator.PutRoleRequestDataTestFactory; import de.ozgcloud.operator.PutRoleRequestDataTestFactory;
import de.ozgcloud.operator.PutUserRequestDataTestFactory; import de.ozgcloud.operator.PutUserRequestDataTestFactory;
import lombok.SneakyThrows; import lombok.SneakyThrows;
...@@ -91,16 +90,6 @@ class ElasticsearchRemoteServiceITCase { ...@@ -91,16 +90,6 @@ class ElasticsearchRemoteServiceITCase {
assertThat(existsIndex()).isTrue(); assertThat(existsIndex()).isTrue();
} }
@SneakyThrows
private boolean existsIndex() {
return client.indices().exists(ExistsRequest.of(builder -> builder.index(INDEX_NAME))).value();
}
}
@SneakyThrows
private void deleteIndex() {
client.indices().delete(DeleteIndexRequest.of(builder -> builder.index(INDEX_NAME)));
} }
@DisplayName("Exists security role") @DisplayName("Exists security role")
...@@ -158,15 +147,9 @@ class ElasticsearchRemoteServiceITCase { ...@@ -158,15 +147,9 @@ class ElasticsearchRemoteServiceITCase {
assertThat(existsSecurityRole()).isTrue(); assertThat(existsSecurityRole()).isTrue();
} }
@SneakyThrows
private boolean existsSecurityRole() {
var role = client.security().getRole(GetRoleRequest.of(builder -> builder.name(PutRoleRequestDataTestFactory.NAME)));
return !role.result().isEmpty();
}
@SneakyThrows @SneakyThrows
private void deleteSecurityRole() { private void deleteSecurityRole() {
client.security().deleteRole(DeleteRoleRequest.of(builder -> builder.name(PutRoleRequestDataTestFactory.NAME))); client.security().deleteRole(builder -> builder.name(PutRoleRequestDataTestFactory.NAME));
} }
} }
...@@ -188,6 +171,7 @@ class ElasticsearchRemoteServiceITCase { ...@@ -188,6 +171,7 @@ class ElasticsearchRemoteServiceITCase {
@AfterEach @AfterEach
void cleanup() { void cleanup() {
deleteIndex(); deleteIndex();
deleteSecurityRole();
} }
@SneakyThrows @SneakyThrows
...@@ -209,8 +193,12 @@ class ElasticsearchRemoteServiceITCase { ...@@ -209,8 +193,12 @@ class ElasticsearchRemoteServiceITCase {
} }
@SneakyThrows @SneakyThrows
private void createIndex() { private void deleteSecurityRole() {
client.indices().create(builder -> builder.index(INDEX_NAME)); client.security().deleteUser(builder -> builder.username(PutUserRequestDataTestFactory.USERNAME));
}
@SneakyThrows
private void deleteIndex() {
client.indices().delete(builder -> builder.index(INDEX_NAME));
} }
@DisplayName("Create security user") @DisplayName("Create security user")
...@@ -232,13 +220,133 @@ class ElasticsearchRemoteServiceITCase { ...@@ -232,13 +220,133 @@ class ElasticsearchRemoteServiceITCase {
@SneakyThrows @SneakyThrows
private boolean existsSecurityUser() { private boolean existsSecurityUser() {
var user = client.security().getUser(GetUserRequest.of(builder -> builder.username(PutUserRequestDataTestFactory.USERNAME))); return !client.security().getUser(builder -> builder.username(PutUserRequestDataTestFactory.USERNAME)).result().isEmpty();
return !user.result().isEmpty();
} }
@SneakyThrows @SneakyThrows
private void deleteSecurityUser() { private void deleteSecurityUser() {
client.security().deleteUser(DeleteUserRequest.of(builder -> builder.username(PutUserRequestDataTestFactory.USERNAME))); client.security().deleteUser(builder -> builder.username(PutUserRequestDataTestFactory.USERNAME));
}
}
@DisplayName("Delete index")
@Nested
class TestDeleteIndex {
@BeforeEach
void init() {
createIndex();
}
@SneakyThrows
@Test
void shouldDeleteIfExists() {
service.deleteIndex(INDEX_NAME);
assertThat(existsIndex()).isFalse();
}
}
@DisplayName("Delete security role")
@Nested
class TestDeleteSecurityRole {
@BeforeEach
void init() {
createIndex();
createSecurityRole();
}
@AfterEach
void cleanup() {
deleteIndex();
}
@SneakyThrows
@Test
void shouldDeleteIfExists() {
assertThat(existsSecurityRole()).isTrue();
service.deleteSecurityRole(PutRoleRequestDataTestFactory.NAME);
assertThat(existsSecurityRole()).isFalse();
} }
} }
@DisplayName("Delete security user")
@Nested
class TestDeleteSecurityUser {
@BeforeEach
void init() {
createIndex();
createSecurityUser();
}
@AfterEach
void cleanup() {
deleteIndex();
}
@SneakyThrows
@Test
void shouldDeleteIfExists() {
assertThat(existsSecurityUser()).isTrue();
service.deleteSecurityUser(PutUserRequestDataTestFactory.USERNAME);
assertThat(existsSecurityUser()).isFalse();
}
}
@SneakyThrows
private boolean existsIndex() {
return client.indices().exists(ExistsRequest.of(builder -> builder.index(INDEX_NAME))).value();
}
@SneakyThrows
private void createIndex() {
client.indices().create(builder -> builder.index(INDEX_NAME));
}
@SneakyThrows
private void createSecurityRole() {
client.security().putRole(this::buildRequest);
}
private PutRoleRequest.Builder buildRequest(PutRoleRequest.Builder requestBuilder) {
requestBuilder.name(PutRoleRequestDataTestFactory.NAME);
requestBuilder.indices(this::buildIndicesPrivilegesRequest);
return requestBuilder;
}
private IndicesPrivileges.Builder buildIndicesPrivilegesRequest(IndicesPrivileges.Builder builder) {
builder.names(IndicesPrivilegesDataTestFactory.NAME);
builder.privileges(IndicesPrivilegesDataTestFactory.PRIVILEGES);
return builder;
}
@SneakyThrows
private boolean existsSecurityRole() {
return !client.security().getRole(builder -> builder.name(PutRoleRequestDataTestFactory.NAME)).result().isEmpty();
}
@SneakyThrows
private void createSecurityUser() {
client.security().putUser(this::buildPutUserRequest);
}
private PutUserRequest.Builder buildPutUserRequest(PutUserRequest.Builder builder) {
builder.username(PutUserRequestDataTestFactory.USERNAME);
builder.roles(PutUserRequestDataTestFactory.ROLES);
builder.password(PutUserRequestDataTestFactory.PASSWORD);
return builder;
}
@SneakyThrows
private boolean existsSecurityUser() {
return !client.security().getUser(builder -> builder.username(PutUserRequestDataTestFactory.USERNAME)).result().isEmpty();
}
} }
\ No newline at end of file
...@@ -9,8 +9,6 @@ import org.mockito.InjectMocks; ...@@ -9,8 +9,6 @@ import org.mockito.InjectMocks;
import org.mockito.Mock; import org.mockito.Mock;
import org.mockito.Spy; import org.mockito.Spy;
import com.thedeanda.lorem.LoremIpsum;
import co.elastic.clients.elasticsearch.ElasticsearchClient; import co.elastic.clients.elasticsearch.ElasticsearchClient;
import de.ozgcloud.operator.IndicesPrivilegesDataTestFactory; import de.ozgcloud.operator.IndicesPrivilegesDataTestFactory;
import de.ozgcloud.operator.PutRoleRequestDataTestFactory; import de.ozgcloud.operator.PutRoleRequestDataTestFactory;
...@@ -24,39 +22,6 @@ class ElasticsearchRemoteServiceTest { ...@@ -24,39 +22,6 @@ class ElasticsearchRemoteServiceTest {
@Mock @Mock
private ElasticsearchClient client; private ElasticsearchClient client;
@DisplayName("Create security role")
@Nested
class TestCreateIndex {
@DisplayName("create exists request")
@Nested
class TestCreateExistsRequest {
private static final String INDEX = LoremIpsum.getInstance().getFirstName();
@Test
void shouldHaveIndex() {
var request = service.createExistsRequest(INDEX);
assertThat(request.index()).containsExactly(INDEX);
}
}
}
@DisplayName("Create get role request")
@Nested
class TestCreateGetRoleRequest {
private static final String NAME = LoremIpsum.getInstance().getFirstName();
@Test
void shouldHaveName() {
var request = service.createGetRoleRequest(NAME);
assertThat(request.name()).containsExactly(NAME);
}
}
@DisplayName("Create security role") @DisplayName("Create security role")
@Nested @Nested
class TestCreateSecurityRole { class TestCreateSecurityRole {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment