From f07ea85226b2cf2df0d966e1cd9846729202ca15 Mon Sep 17 00:00:00 2001 From: Jakub Schwan Date: Wed, 13 May 2020 17:00:24 +0200 Subject: [PATCH] Implement test scenarios using persistent test scenarioold test provider and change user impl will be removed in following commit --- .../scenario/WorkbenchKieServerScenario.java | 4 +- .../provider/KieServerClientProvider.java | 12 +- .../KieServerControllerClientProvider.java | 10 +- ...rkbenchKieServerPersistentScenarioApb.java | 5 + .../WorkbenchKieServerScenarioApb.java | 5 + ...kbenchKieServerPersistentScenarioImpl.java | 11 ++ .../WorkbenchKieServerScenarioImpl.java | 25 +++- ...kbenchKieServerPersistentScenarioImpl.java | 42 ++++++ .../WorkbenchKieServerScenarioImpl.java | 42 ++++++ ...chAdminUserPersistenceIntegrationTest.java | 10 +- .../PersistenceTestProvider.java | 135 +++++++++++++++++- 11 files changed, 279 insertions(+), 22 deletions(-) diff --git a/framework-cloud/framework-cloud-api/src/main/java/org/kie/cloud/api/scenario/WorkbenchKieServerScenario.java b/framework-cloud/framework-cloud-api/src/main/java/org/kie/cloud/api/scenario/WorkbenchKieServerScenario.java index 515648917..cf85d4a1f 100644 --- a/framework-cloud/framework-cloud-api/src/main/java/org/kie/cloud/api/scenario/WorkbenchKieServerScenario.java +++ b/framework-cloud/framework-cloud-api/src/main/java/org/kie/cloud/api/scenario/WorkbenchKieServerScenario.java @@ -50,5 +50,7 @@ public interface WorkbenchKieServerScenario extends KieDeploymentScenario getPrometheusDeployment() { return Optional.empty(); - }; + } + + void changeUsernameAndPassword(String username, String password); } diff --git a/framework-cloud/framework-cloud-common/src/main/java/org/kie/cloud/common/provider/KieServerClientProvider.java b/framework-cloud/framework-cloud-common/src/main/java/org/kie/cloud/common/provider/KieServerClientProvider.java index 0a29500d8..b3522d658 100644 --- a/framework-cloud/framework-cloud-common/src/main/java/org/kie/cloud/common/provider/KieServerClientProvider.java +++ b/framework-cloud/framework-cloud-common/src/main/java/org/kie/cloud/common/provider/KieServerClientProvider.java @@ -66,8 +66,13 @@ public static KieServicesClient getKieServerClient(KieServerDeployment kieServer kieServerDeployment.getUrl().toString() + "/services/rest/server", kieServerDeployment.getUsername(), kieServerDeployment.getPassword(), clientTimeout); configuration.addExtraClasses(extraClasses); - KieServicesClient kieServerClient = KieServicesFactory.newKieServicesClient(configuration); - return kieServerClient; + return KieServicesFactory.newKieServicesClient(configuration); + } + + public static KieServicesClient getKieServerClient(String url, String username, String password) { + KieServicesConfiguration configuration = KieServicesFactory.newRestConfiguration( + url + "/services/rest/server", username, password, KIE_SERVER_TIMEOUT); + return KieServicesFactory.newKieServicesClient(configuration); } public static KieServicesClient getKieServerJmsClient(URL amqHost) { @@ -139,8 +144,7 @@ public static KieServicesClient getSmartRouterClient(SmartRouterDeployment smart KieServerConstants.CAPABILITY_CASE, KieServerConstants.CAPABILITY_DMN); configuration.setCapabilities(capabilities); - KieServicesClient kieServerClient = KieServicesFactory.newKieServicesClient(configuration); - return kieServerClient; + return KieServicesFactory.newKieServicesClient(configuration); } public static ProcessServicesClient getProcessClient(KieServerDeployment kieServerDeployment) { diff --git a/framework-cloud/framework-cloud-common/src/main/java/org/kie/cloud/common/provider/KieServerControllerClientProvider.java b/framework-cloud/framework-cloud-common/src/main/java/org/kie/cloud/common/provider/KieServerControllerClientProvider.java index e0411058f..020d82889 100644 --- a/framework-cloud/framework-cloud-common/src/main/java/org/kie/cloud/common/provider/KieServerControllerClientProvider.java +++ b/framework-cloud/framework-cloud-common/src/main/java/org/kie/cloud/common/provider/KieServerControllerClientProvider.java @@ -29,15 +29,17 @@ public class KieServerControllerClientProvider { public static KieServerControllerClient getKieServerControllerClient(WorkbenchDeployment workbenchDeployment) { - KieServerControllerClient kieServerControllerClient = KieServerControllerClientFactory.newRestClient(workbenchDeployment.getUrl().toString() + "/rest/controller", + return KieServerControllerClientFactory.newRestClient(workbenchDeployment.getUrl().toString() + "/rest/controller", workbenchDeployment.getUsername(), workbenchDeployment.getPassword()); - return kieServerControllerClient; + } + + public static KieServerControllerClient getKieServerControllerClient(String url, String username, String password) { + return KieServerControllerClientFactory.newRestClient(url + "/rest/controller", username, password); } public static KieServerControllerClient getKieServerControllerClient(ControllerDeployment controllerDeployment) { - KieServerControllerClient kieServerControllerClient = KieServerControllerClientFactory.newRestClient(controllerDeployment.getUrl().toString() + "/rest/controller", + return KieServerControllerClientFactory.newRestClient(controllerDeployment.getUrl().toString() + "/rest/controller", controllerDeployment.getUsername(), controllerDeployment.getPassword()); - return kieServerControllerClient; } /** diff --git a/framework-cloud/framework-openshift-apb/src/main/java/org/kie/cloud/openshift/scenario/WorkbenchKieServerPersistentScenarioApb.java b/framework-cloud/framework-openshift-apb/src/main/java/org/kie/cloud/openshift/scenario/WorkbenchKieServerPersistentScenarioApb.java index c346e516f..54e1dc5b7 100644 --- a/framework-cloud/framework-openshift-apb/src/main/java/org/kie/cloud/openshift/scenario/WorkbenchKieServerPersistentScenarioApb.java +++ b/framework-cloud/framework-openshift-apb/src/main/java/org/kie/cloud/openshift/scenario/WorkbenchKieServerPersistentScenarioApb.java @@ -182,4 +182,9 @@ public List getSmartRouterDeployments() { public List getControllerDeployments() { return Collections.emptyList(); } + + @Override + public void changeUsernameAndPassword(String username, String password) { + throw new UnsupportedOperationException("Not supported."); + } } diff --git a/framework-cloud/framework-openshift-apb/src/main/java/org/kie/cloud/openshift/scenario/WorkbenchKieServerScenarioApb.java b/framework-cloud/framework-openshift-apb/src/main/java/org/kie/cloud/openshift/scenario/WorkbenchKieServerScenarioApb.java index e72d5e57b..d1507dcbe 100644 --- a/framework-cloud/framework-openshift-apb/src/main/java/org/kie/cloud/openshift/scenario/WorkbenchKieServerScenarioApb.java +++ b/framework-cloud/framework-openshift-apb/src/main/java/org/kie/cloud/openshift/scenario/WorkbenchKieServerScenarioApb.java @@ -173,4 +173,9 @@ public List getControllerDeployments() { public Optional getPrometheusDeployment() { return Optional.ofNullable(prometheusDeployment); } + + @Override + public void changeUsernameAndPassword(String username, String password) { + throw new UnsupportedOperationException("Not supported."); + } } diff --git a/framework-cloud/framework-openshift-operator/src/main/java/org/kie/cloud/openshift/operator/scenario/WorkbenchKieServerPersistentScenarioImpl.java b/framework-cloud/framework-openshift-operator/src/main/java/org/kie/cloud/openshift/operator/scenario/WorkbenchKieServerPersistentScenarioImpl.java index 136397383..b6e029f48 100644 --- a/framework-cloud/framework-openshift-operator/src/main/java/org/kie/cloud/openshift/operator/scenario/WorkbenchKieServerPersistentScenarioImpl.java +++ b/framework-cloud/framework-openshift-operator/src/main/java/org/kie/cloud/openshift/operator/scenario/WorkbenchKieServerPersistentScenarioImpl.java @@ -169,4 +169,15 @@ public List getControllerDeployments() { public SsoDeployment getSsoDeployment() { return ssoDeployment; } + + @Override + public void changeUsernameAndPassword(final String username, final String password) { + if(getDeployments().stream().allMatch(Deployment::isReady)) { + kieApp.getSpec().getCommonConfig().setAdminUser(username); + kieApp.getSpec().getCommonConfig().setAdminPassword(password); + deployCustomResource(); + } else{ + throw new RuntimeException("Application is not ready for Username and password change. Please check first that application is ready."); + } + } } diff --git a/framework-cloud/framework-openshift-operator/src/main/java/org/kie/cloud/openshift/operator/scenario/WorkbenchKieServerScenarioImpl.java b/framework-cloud/framework-openshift-operator/src/main/java/org/kie/cloud/openshift/operator/scenario/WorkbenchKieServerScenarioImpl.java index 895187c6a..415ac75ac 100644 --- a/framework-cloud/framework-openshift-operator/src/main/java/org/kie/cloud/openshift/operator/scenario/WorkbenchKieServerScenarioImpl.java +++ b/framework-cloud/framework-openshift-operator/src/main/java/org/kie/cloud/openshift/operator/scenario/WorkbenchKieServerScenarioImpl.java @@ -49,12 +49,12 @@ public class WorkbenchKieServerScenarioImpl extends OpenShiftOperatorScenario(() -> getKieAppClient().withName(OpenShiftConstants.getKieApplicationName()).get(), kieApp -> kieApp.getStatus() != null).reason("Waiting for reconciliation to initialize all fields.").timeout(TimeUnit.MINUTES,1).waitFor(); @@ -82,7 +82,7 @@ protected void deployCustomResource() { try { new SimpleWaiter(() -> workbenchDeployment.isReady()).reason("Waiting for Workbench service to be created.").timeout(TimeUnit.MINUTES, 1).waitFor(); new SimpleWaiter(() -> kieServerDeployment.isReady()).reason("Waiting for Kie server service to be created.").timeout(TimeUnit.MINUTES, 1).waitFor(); - } catch (WaiterException e) { + } catch (final WaiterException e) { throw new RuntimeException("Timeout while deploying application.", e); } @@ -119,13 +119,13 @@ public KieServerDeployment getKieServerDeployment() { @Override public List getDeployments() { - List deployments = new ArrayList(Arrays.asList(workbenchDeployment, kieServerDeployment)); + final List deployments = new ArrayList(Arrays.asList(workbenchDeployment, kieServerDeployment)); deployments.removeAll(Collections.singleton(null)); return deployments; } - private void storeProjectInfoToPersistentVolume(Deployment deployment, String persistentVolumeMountPath) { - String storeCommand = "echo \"Project " + projectName + ", time " + Instant.now() + "\" > " + persistentVolumeMountPath + "/info.txt"; + private void storeProjectInfoToPersistentVolume(final Deployment deployment, final String persistentVolumeMountPath) { + final String storeCommand = "echo \"Project " + projectName + ", time " + Instant.now() + "\" > " + persistentVolumeMountPath + "/info.txt"; workbenchDeployment.getInstances().get(0).runCommand("/bin/bash", "-c", storeCommand); } @@ -153,4 +153,15 @@ public List getControllerDeployments() { public Optional getPrometheusDeployment() { return Optional.ofNullable(prometheusDeployment); } + + @Override + public void changeUsernameAndPassword(final String username, final String password) { + if(getDeployments().stream().allMatch(Deployment::isReady)) { + kieApp.getSpec().getCommonConfig().setAdminUser(username); + kieApp.getSpec().getCommonConfig().setAdminPassword(password); + deployCustomResource(); + } else{ + throw new RuntimeException("Application is not ready for Username and password change. Please check first that application is ready."); + } + } } diff --git a/framework-cloud/framework-openshift-templates/src/main/java/org/kie/cloud/openshift/scenario/WorkbenchKieServerPersistentScenarioImpl.java b/framework-cloud/framework-openshift-templates/src/main/java/org/kie/cloud/openshift/scenario/WorkbenchKieServerPersistentScenarioImpl.java index c02e8247e..94a9a2405 100644 --- a/framework-cloud/framework-openshift-templates/src/main/java/org/kie/cloud/openshift/scenario/WorkbenchKieServerPersistentScenarioImpl.java +++ b/framework-cloud/framework-openshift-templates/src/main/java/org/kie/cloud/openshift/scenario/WorkbenchKieServerPersistentScenarioImpl.java @@ -19,9 +19,12 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; +import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.TimeUnit; +import cz.xtf.core.waiting.SimpleWaiter; import org.kie.cloud.api.deployment.ControllerDeployment; import org.kie.cloud.api.deployment.Deployment; import org.kie.cloud.api.deployment.KieServerDeployment; @@ -32,6 +35,7 @@ import org.kie.cloud.api.scenario.WorkbenchKieServerPersistentScenario; import org.kie.cloud.api.scenario.WorkbenchKieServerScenario; import org.kie.cloud.common.provider.KieServerControllerClientProvider; +import org.kie.cloud.openshift.constants.OpenShiftConstants; import org.kie.cloud.openshift.constants.OpenShiftTemplateConstants; import org.kie.cloud.openshift.constants.ProjectSpecificPropertyNames; import org.kie.cloud.openshift.deployment.KieServerDeploymentImpl; @@ -147,4 +151,42 @@ public List getControllerDeployments() { public SsoDeployment getSsoDeployment() { return ssoDeployment; } + + @Override + public void changeUsernameAndPassword(String username, String password) { + if(getDeployments().stream().allMatch(Deployment::isReady)) { + deploySecretAppUser(username,password); + logger.info("Restart the environment to update Workbench deployment."); + getDeployments().parallelStream().forEach(this::scaleToZeroAndBackToReplicas); // if parallel stream make mess because of common fork-join pool use normal stream and adjust scaling (scale all deployments to zero at the same time) + } else{ + throw new RuntimeException("Application is not ready for Username and password change. Please check first that application is ready."); + } + + } + + private void deploySecretAppUser(String user, String password) { + logger.info("Delete old secret '{}'", DeploymentConstants.getAppCredentialsSecretName()); + project.getOpenShift().secrets().withName(DeploymentConstants.getAppCredentialsSecretName()).delete(); + new SimpleWaiter(() -> project.getOpenShift().getSecret(DeploymentConstants.getAppCredentialsSecretName()) == null).timeout(TimeUnit.MINUTES, 2) + .reason("Waiting for old secret to be deleted.") + .waitFor(); + + logger.info("Creating user secret '{}'", DeploymentConstants.getAppCredentialsSecretName()); + Map data = new HashMap<>(); + data.put(OpenShiftConstants.KIE_ADMIN_USER, user); + data.put(OpenShiftConstants.KIE_ADMIN_PWD, password); + + project.createSecret(DeploymentConstants.getAppCredentialsSecretName(), data); + new SimpleWaiter(() -> project.getOpenShift().getSecret(DeploymentConstants.getAppCredentialsSecretName()) != null).timeout(TimeUnit.MINUTES, 2) + .reason("Waiting for new secret to be created.") + .waitFor(); + } + + private void scaleToZeroAndBackToReplicas(Deployment deployment) { + int replicas = deployment.getInstances().size(); + deployment.scale(0); + deployment.waitForScale(); + deployment.scale(replicas); + deployment.waitForScale(); + } } diff --git a/framework-cloud/framework-openshift-templates/src/main/java/org/kie/cloud/openshift/scenario/WorkbenchKieServerScenarioImpl.java b/framework-cloud/framework-openshift-templates/src/main/java/org/kie/cloud/openshift/scenario/WorkbenchKieServerScenarioImpl.java index 6cc52dcb2..ed88d9321 100644 --- a/framework-cloud/framework-openshift-templates/src/main/java/org/kie/cloud/openshift/scenario/WorkbenchKieServerScenarioImpl.java +++ b/framework-cloud/framework-openshift-templates/src/main/java/org/kie/cloud/openshift/scenario/WorkbenchKieServerScenarioImpl.java @@ -19,10 +19,13 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Optional; +import java.util.concurrent.TimeUnit; +import cz.xtf.core.waiting.SimpleWaiter; import org.kie.cloud.api.deployment.ControllerDeployment; import org.kie.cloud.api.deployment.Deployment; import org.kie.cloud.api.deployment.KieServerDeployment; @@ -32,6 +35,7 @@ import org.kie.cloud.api.deployment.constants.DeploymentConstants; import org.kie.cloud.api.scenario.WorkbenchKieServerScenario; import org.kie.cloud.common.provider.KieServerControllerClientProvider; +import org.kie.cloud.openshift.constants.OpenShiftConstants; import org.kie.cloud.openshift.constants.OpenShiftTemplateConstants; import org.kie.cloud.openshift.deployment.KieServerDeploymentImpl; import org.kie.cloud.openshift.deployment.WorkbenchDeploymentImpl; @@ -133,4 +137,42 @@ public List getControllerDeployments() { public Optional getPrometheusDeployment() { return Optional.ofNullable(prometheusDeployment); } + + @Override + public void changeUsernameAndPassword(String username, String password) { + if(getDeployments().stream().allMatch(Deployment::isReady)) { + deploySecretAppUser(username,password); + logger.info("Restart the environment to update Workbench deployment."); + getDeployments().parallelStream().forEach(this::scaleToZeroAndBackToReplicas); // if parallel stream make mess because of common fork-join pool use normal stream and adjust scaling (scale all deployments to zero at the same time) + } else{ + throw new RuntimeException("Application is not ready for Username and password change. Please check first that application is ready."); + } + + } + + private void deploySecretAppUser(String user, String password) { + logger.info("Delete old secret '{}'", DeploymentConstants.getAppCredentialsSecretName()); + project.getOpenShift().secrets().withName(DeploymentConstants.getAppCredentialsSecretName()).delete(); + new SimpleWaiter(() -> project.getOpenShift().getSecret(DeploymentConstants.getAppCredentialsSecretName()) == null).timeout(TimeUnit.MINUTES, 2) + .reason("Waiting for old secret to be deleted.") + .waitFor(); + + logger.info("Creating user secret '{}'", DeploymentConstants.getAppCredentialsSecretName()); + Map data = new HashMap<>(); + data.put(OpenShiftConstants.KIE_ADMIN_USER, user); + data.put(OpenShiftConstants.KIE_ADMIN_PWD, password); + + project.createSecret(DeploymentConstants.getAppCredentialsSecretName(), data); + new SimpleWaiter(() -> project.getOpenShift().getSecret(DeploymentConstants.getAppCredentialsSecretName()) != null).timeout(TimeUnit.MINUTES, 2) + .reason("Waiting for new secret to be created.") + .waitFor(); + } + + private void scaleToZeroAndBackToReplicas(Deployment deployment) { + int replicas = deployment.getInstances().size(); + deployment.scale(0); + deployment.waitForScale(); + deployment.scale(replicas); + deployment.waitForScale(); + } } diff --git a/test-cloud/test-cloud-remote/src/test/java/org/kie/cloud/integrationtests/persistence/WorkbenchAdminUserPersistenceIntegrationTest.java b/test-cloud/test-cloud-remote/src/test/java/org/kie/cloud/integrationtests/persistence/WorkbenchAdminUserPersistenceIntegrationTest.java index 83268e509..bb6ca8843 100644 --- a/test-cloud/test-cloud-remote/src/test/java/org/kie/cloud/integrationtests/persistence/WorkbenchAdminUserPersistenceIntegrationTest.java +++ b/test-cloud/test-cloud-remote/src/test/java/org/kie/cloud/integrationtests/persistence/WorkbenchAdminUserPersistenceIntegrationTest.java @@ -18,7 +18,7 @@ import org.junit.BeforeClass; import org.junit.Test; import org.kie.cloud.api.scenario.WorkbenchKieServerScenario; -import org.kie.cloud.integrationtests.testproviders.HttpsWorkbenchTestProvider; +import org.kie.cloud.integrationtests.testproviders.PersistenceTestProvider; import org.kie.cloud.tests.common.AbstractCloudIntegrationTest; import org.kie.cloud.tests.common.ScenarioDeployer; @@ -26,7 +26,7 @@ public class WorkbenchAdminUserPersistenceIntegrationTest extends AbstractCloudI private static WorkbenchKieServerScenario deploymentScenario; - private static HttpsWorkbenchTestProvider httpsWorkbenchTestProvider; + private static PersistenceTestProvider persistenceTestProvider; @BeforeClass public static void initializeDeployment() { @@ -37,7 +37,7 @@ public static void initializeDeployment() { ScenarioDeployer.deployScenario(deploymentScenario); // Setup test providers - httpsWorkbenchTestProvider = HttpsWorkbenchTestProvider.create(); + persistenceTestProvider = PersistenceTestProvider.create(); } @AfterClass @@ -47,11 +47,11 @@ public static void cleanEnvironment() { @Test public void testAdminUserPasswordChange() { - httpsWorkbenchTestProvider.testAdminUserPasswordChange(deploymentScenario.getWorkbenchDeployment()); + persistenceTestProvider.testAdminUserPasswordChange(deploymentScenario); } @Test public void testAdminUserNameAndPasswordChange() { - httpsWorkbenchTestProvider.testAdminUserNameAndPasswordChange(deploymentScenario.getWorkbenchDeployment()); + persistenceTestProvider.testAdminUserNameAndPasswordChange(deploymentScenario); } } diff --git a/test-cloud/test-cloud-remote/src/test/java/org/kie/cloud/integrationtests/testproviders/PersistenceTestProvider.java b/test-cloud/test-cloud-remote/src/test/java/org/kie/cloud/integrationtests/testproviders/PersistenceTestProvider.java index 18747fc7c..ccb3ad5cd 100644 --- a/test-cloud/test-cloud-remote/src/test/java/org/kie/cloud/integrationtests/testproviders/PersistenceTestProvider.java +++ b/test-cloud/test-cloud-remote/src/test/java/org/kie/cloud/integrationtests/testproviders/PersistenceTestProvider.java @@ -15,9 +15,9 @@ */ package org.kie.cloud.integrationtests.testproviders; -import java.util.Map; import java.util.Objects; +import org.assertj.core.api.SoftAssertions; import org.kie.cloud.api.deployment.Deployment; import org.kie.cloud.api.scenario.DeploymentScenario; import org.kie.cloud.api.scenario.WorkbenchKieServerScenario; @@ -25,17 +25,22 @@ import org.kie.cloud.common.provider.KieServerControllerClientProvider; import org.kie.cloud.tests.common.client.util.Kjar; import org.kie.cloud.tests.common.client.util.WorkbenchUtils; +import org.kie.server.api.exception.KieServicesHttpException; import org.kie.server.api.model.KieContainerStatus; import org.kie.server.api.model.KieServerInfo; import org.kie.server.client.KieServicesClient; import org.kie.server.controller.api.model.spec.ServerTemplate; import org.kie.server.controller.api.model.spec.ServerTemplateList; import org.kie.server.controller.client.KieServerControllerClient; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import static org.assertj.core.api.Assertions.assertThat; public class PersistenceTestProvider { + private static final Logger logger = LoggerFactory.getLogger(PersistenceTestProvider.class); + private PersistenceTestProvider() {} /** @@ -85,6 +90,134 @@ public void testControllerPersistence(WorkbenchKieServerScenario deploymentScena } } + + // Verifies https://issues.redhat.com/browse/RHPAM-2762 + public void testAdminUserPasswordChange(WorkbenchKieServerScenario deploymentScenario) { + final String NEW_PASSWORD = "newpassword1234!"; + final String oldPassword = deploymentScenario.getWorkbenchDeployment().getPassword(); + + final String username = deploymentScenario.getWorkbenchDeployment().getUsername(); + String containerId = "testAdminUserPasswordChange"; + final String workbenchUrl = deploymentScenario.getWorkbenchDeployment().getUrl().toString(); + final String kieServerUrl = deploymentScenario.getKieServerDeployment().getUrl().toString(); + + KieServerControllerClient kieControllerClient = KieServerControllerClientProvider.getKieServerControllerClient(deploymentScenario.getWorkbenchDeployment()); + KieServicesClient kieServerClient = KieServerClientProvider.getKieServerClient(deploymentScenario.getKieServerDeployment()); + + KieServerInfo serverInfo = kieServerClient.getServerInfo().getResult(); + try { + WorkbenchUtils.saveContainerSpec(kieControllerClient, serverInfo.getServerId(), serverInfo.getName(), containerId, containerId, Kjar.DEFINITION, KieContainerStatus.STARTED); + // Check if old user can connect + SoftAssertions.assertSoftly(softly -> { + softly.assertAlso(isUserAuthorizedInWorkbench(workbenchUrl, username, oldPassword)); + softly.assertAlso(isUserAuthorizedInKieServer(kieServerUrl, username, oldPassword)); + }); + + logger.info("Change username to {} and password to {} in credential secret", username, NEW_PASSWORD); + deploymentScenario.changeUsernameAndPassword(username, NEW_PASSWORD); + //workbenchDeployment.changeUsernameAndPassword(NEW_USERNAME, NEW_PASSWORD); + + SoftAssertions.assertSoftly(softly -> { + softly.assertAlso(isUserUnauthorizedInWorkbench(workbenchUrl, username, oldPassword)); + + softly.assertAlso(isUserAuthorizedInWorkbench(workbenchUrl, username, NEW_PASSWORD)); + + softly.assertAlso(isUserUnauthorizedInKieServer(kieServerUrl, username, oldPassword)); + + softly.assertAlso(isUserAuthorizedInKieServer(kieServerUrl, username, NEW_PASSWORD)); + }); + } finally { + deploymentScenario.changeUsernameAndPassword(username, oldPassword); + kieControllerClient.deleteContainerSpec(serverInfo.getServerId(), containerId); + } + } + + // Verifies https://issues.redhat.com/browse/RHPAM-2777 + public void testAdminUserNameAndPasswordChange(WorkbenchKieServerScenario deploymentScenario) { + final String NEW_USERNAME = "newadminusername"; + final String NEW_PASSWORD = "newpassword4321!"; + + final String oldUsername = deploymentScenario.getWorkbenchDeployment().getUsername(); + final String oldPassword = deploymentScenario.getWorkbenchDeployment().getPassword(); + String containerId = "testAdminUserNameAndPasswordChange"; + final String workbenchUrl = deploymentScenario.getWorkbenchDeployment().getUrl().toString(); + final String kieServerUrl = deploymentScenario.getKieServerDeployment().getUrl().toString(); + + KieServerControllerClient kieControllerClient = KieServerControllerClientProvider.getKieServerControllerClient(deploymentScenario.getWorkbenchDeployment()); + KieServicesClient kieServerClient = KieServerClientProvider.getKieServerClient(deploymentScenario.getKieServerDeployment()); + + KieServerInfo serverInfo = kieServerClient.getServerInfo().getResult(); + try { + WorkbenchUtils.saveContainerSpec(kieControllerClient, serverInfo.getServerId(), serverInfo.getName(), containerId, containerId, Kjar.DEFINITION, KieContainerStatus.STARTED); + // Check if old user can connect + SoftAssertions.assertSoftly(softly -> { + softly.assertAlso(isUserAuthorizedInWorkbench(workbenchUrl, oldUsername, oldPassword)); + softly.assertAlso(isUserAuthorizedInKieServer(kieServerUrl, oldUsername, oldPassword)); + }); + + logger.info("Change username to {} and password to {} in credential secret", NEW_USERNAME, NEW_PASSWORD); + deploymentScenario.changeUsernameAndPassword(NEW_USERNAME, NEW_PASSWORD); + //workbenchDeployment.changeUsernameAndPassword(NEW_USERNAME, NEW_PASSWORD); + + SoftAssertions.assertSoftly(softly -> { + softly.assertAlso(isUserUnauthorizedInWorkbench(workbenchUrl, oldUsername, oldPassword)); + softly.assertAlso(isUserUnauthorizedInWorkbench(workbenchUrl, oldUsername, NEW_PASSWORD)); + softly.assertAlso(isUserUnauthorizedInWorkbench(workbenchUrl, NEW_USERNAME, oldPassword)); + + softly.assertAlso(isUserAuthorizedInWorkbench(workbenchUrl, NEW_USERNAME, NEW_PASSWORD)); + + softly.assertAlso(isUserUnauthorizedInKieServer(kieServerUrl, oldUsername, oldPassword)); + softly.assertAlso(isUserUnauthorizedInKieServer(kieServerUrl, oldUsername, NEW_PASSWORD)); + softly.assertAlso(isUserUnauthorizedInKieServer(kieServerUrl, NEW_USERNAME, oldPassword)); + + softly.assertAlso(isUserAuthorizedInKieServer(kieServerUrl, NEW_USERNAME, NEW_PASSWORD)); + }); + } finally { + deploymentScenario.changeUsernameAndPassword(oldUsername, oldPassword); + kieControllerClient.deleteContainerSpec(serverInfo.getServerId(), containerId); + } + } + + private SoftAssertions isUserAuthorizedInWorkbench(String url, String username, String password) { + KieServerControllerClient kieControllerClient = KieServerControllerClientProvider.getKieServerControllerClient(url, username, password); + SoftAssertions softly = new SoftAssertions(); + softly.assertThat(kieControllerClient.listServerTemplates().getServerTemplates()) + .as("List Server Templates after login with username {} and password {}", username, password) + .hasSize(1); + return softly; + } + + private SoftAssertions isUserUnauthorizedInWorkbench(String url, String username, String password) { + KieServerControllerClient kieControllerClient = KieServerControllerClientProvider.getKieServerControllerClient(url, username, password); + SoftAssertions softly = new SoftAssertions(); + softly.assertThatThrownBy(() -> { + kieControllerClient.listServerTemplates().getServerTemplates(); + }).as("Exception after login with username {} and password {}", username, password) + .isInstanceOf(IndexOutOfBoundsException.class) //TODO + .hasMessageContaining("Index: 2, Size: 2"); //TODO + return softly; + } + + private SoftAssertions isUserAuthorizedInKieServer(String url, String username, String password) { + KieServicesClient kieServerClient = KieServerClientProvider.getKieServerClient(url, username, password); + SoftAssertions softly = new SoftAssertions(); + softly.assertThat(kieServerClient.getServerInfo().getResult()) + .as("GET server info of Kie Server login as username {} with password {}", username, password) + .isNotNull(); + return softly; + } + + private SoftAssertions isUserUnauthorizedInKieServer(String url, String username, String password) { + SoftAssertions softly = new SoftAssertions(); + softly.assertThatThrownBy(() -> { + KieServerClientProvider.getKieServerClient(url, username, password); + }).as("Exception create client for Kie Server login as username {} with password {}", username, password) + .isInstanceOf(RuntimeException.class) + .hasCauseInstanceOf(KieServicesHttpException.class) + .hasMessageContainingAll("401", "Unauthorized"); + return softly; + } + private static void scaleToZeroAndBackToOne(Deployment deployment) { deployment.scale(0); deployment.waitForScale();