diff --git a/pom.xml b/pom.xml index 696298b92..79c663e92 100644 --- a/pom.xml +++ b/pom.xml @@ -23,6 +23,11 @@ ${project.basedir}/ide-config eclipse-format.xml + 0.31-202305291230-SNAPSHOT 5.7.0 @@ -344,6 +349,11 @@ generator-annotations ${version.io.fabric8} + + io.fabric8 + openshift-client + ${version.openshift-client} + diff --git a/testsuite/pom.xml b/testsuite/pom.xml index 00e8684a5..7f5c2e7f3 100644 --- a/testsuite/pom.xml +++ b/testsuite/pom.xml @@ -47,7 +47,6 @@ io.fabric8 openshift-client - ${version.openshift-client} diff --git a/testsuite/src/test/java/org/jboss/intersmash/testsuite/provision/openshift/KeycloakRealmImportOperatorProvisionerTest.java b/testsuite/src/test/java/org/jboss/intersmash/testsuite/provision/openshift/KeycloakRealmImportOperatorProvisionerTest.java index e1b2c14ce..6fc30f5f0 100644 --- a/testsuite/src/test/java/org/jboss/intersmash/testsuite/provision/openshift/KeycloakRealmImportOperatorProvisionerTest.java +++ b/testsuite/src/test/java/org/jboss/intersmash/testsuite/provision/openshift/KeycloakRealmImportOperatorProvisionerTest.java @@ -138,8 +138,6 @@ public static void removeOperatorGroup() { OpenShifts.adminBinary().execute("delete", "operatorgroup", "--all"); if (!Objects.isNull(KEYCLOAK_OPERATOR_PROVISIONER)) KEYCLOAK_OPERATOR_PROVISIONER.dismiss(); - POSTGRESQL_IMAGE_PROVISIONER.undeploy(); - POSTGRESQL_IMAGE_PROVISIONER.postUndeploy(); } @AfterEach @@ -169,38 +167,40 @@ public void customResourcesCleanup() { */ @Test public void exampleSso() { + name = "example-sso"; + + final Keycloak keycloak = new Keycloak(); + keycloak.getMetadata().setName(name); + keycloak.getMetadata().setLabels(matchLabels); + KeycloakSpec spec = new KeycloakSpec(); + spec.setInstances(1L); + Ingress ingress = new Ingress(); + ingress.setEnabled(true); + spec.setIngress(ingress); + Hostname hostname = new Hostname(); + hostname.setHostname(OpenShifts.master().generateHostname(name)); + // create key, certificate and tls secret: Keycloak expects the secret to be created beforehand + String tlsSecretName = name + "-tls-secret"; + CertificatesUtils.CertificateAndKey certificateAndKey = CertificatesUtils + .generateSelfSignedCertificateAndKey(hostname.getHostname().replaceFirst("[.].*$", ""), tlsSecretName); + // add TLS config to keycloak using the secret we just created + Http http = new Http(); + http.setTlsSecret(certificateAndKey.tlsSecret.getMetadata().getName()); + spec.setHttp(http); + spec.setHostname(hostname); + keycloak.setSpec(spec); + + KEYCLOAK_OPERATOR_PROVISIONER = initializeOperatorProvisioner(keycloak, name); + KEYCLOAK_OPERATOR_PROVISIONER.configure(); try { - name = "example-sso"; - - final Keycloak keycloak = new Keycloak(); - keycloak.getMetadata().setName(name); - keycloak.getMetadata().setLabels(matchLabels); - KeycloakSpec spec = new KeycloakSpec(); - spec.setInstances(1L); - Ingress ingress = new Ingress(); - ingress.setEnabled(true); - spec.setIngress(ingress); - Hostname hostname = new Hostname(); - hostname.setHostname(OpenShifts.master().generateHostname(name)); - // create key, certificate and tls secret: Keycloak expects the secret to be created beforehand - String tlsSecretName = name + "-tls-secret"; - CertificatesUtils.CertificateAndKey certificateAndKey = CertificatesUtils - .generateSelfSignedCertificateAndKey(hostname.getHostname().replaceFirst("[.].*$", ""), tlsSecretName); - // add TLS config to keycloak using the secret we just created - Http http = new Http(); - http.setTlsSecret(certificateAndKey.tlsSecret.getMetadata().getName()); - spec.setHttp(http); - spec.setHostname(hostname); - keycloak.setSpec(spec); - - KEYCLOAK_OPERATOR_PROVISIONER = initializeOperatorProvisioner(keycloak, name); - KEYCLOAK_OPERATOR_PROVISIONER.configure(); KEYCLOAK_OPERATOR_PROVISIONER.subscribe(); - - verifyKeycloak(keycloak, true); - } finally { - if (!Objects.isNull(KEYCLOAK_OPERATOR_PROVISIONER)) + try { + verifyKeycloak(keycloak, true); + } finally { KEYCLOAK_OPERATOR_PROVISIONER.unsubscribe(); + } + } finally { + KEYCLOAK_OPERATOR_PROVISIONER.dismiss(); } } @@ -216,82 +216,93 @@ public void exampleSso() { */ @Test public void exampleSsoWithDatabase() { + POSTGRESQL_IMAGE_PROVISIONER.configure(); try { - POSTGRESQL_IMAGE_PROVISIONER.configure(); POSTGRESQL_IMAGE_PROVISIONER.preDeploy(); - POSTGRESQL_IMAGE_PROVISIONER.deploy(); - - name = "example-sso"; - - Keycloak keycloak = new Keycloak(); - keycloak.getMetadata().setName(name); - keycloak.getMetadata().setLabels(matchLabels); - KeycloakSpec spec = new KeycloakSpec(); - keycloak.setSpec(spec); - spec.setInstances(1L); - Ingress ingress = new Ingress(); - ingress.setEnabled(true); - spec.setIngress(ingress); - Hostname hostname = new Hostname(); - hostname.setHostname(OpenShifts.master().generateHostname(name)); - // create key, certificate and tls secret: Keycloak expects the secret to be created beforehand - String tlsSecretName = name + "-tls-secret"; - CertificatesUtils.CertificateAndKey certificateAndKey = CertificatesUtils - .generateSelfSignedCertificateAndKey(hostname.getHostname().replaceFirst("[.].*$", ""), tlsSecretName); - // add TLS config to keycloak using the secret we just created - Http http = new Http(); - http.setTlsSecret(certificateAndKey.tlsSecret.getMetadata().getName()); - spec.setHttp(http); - spec.setHostname(hostname); - // database - Db db = new Db(); - db.setVendor("postgres"); - db.setHost(POSTGRESQL_IMAGE_PROVISIONER.getServiceName()); - db.setPort(Integer.toUnsignedLong(POSTGRESQL_IMAGE_PROVISIONER.getPort())); - UsernameSecret usernameSecret = new UsernameSecret(); - usernameSecret.setName(POSTGRESQL_IMAGE_PROVISIONER.getSecretName()); - usernameSecret.setKey(PostgreSQLImageOpenShiftProvisioner.POSTGRESQL_USER_KEY); - db.setUsernameSecret(usernameSecret); - PasswordSecret passwordSecret = new PasswordSecret(); - passwordSecret.setName(POSTGRESQL_IMAGE_PROVISIONER.getSecretName()); - passwordSecret.setKey(PostgreSQLImageOpenShiftProvisioner.POSTGRESQL_PASSWORD_KEY); - db.setPasswordSecret(passwordSecret); - db.setDatabase(POSTGRESQL_IMAGE_PROVISIONER.getApplication().getDbName()); - spec.setDb(db); - - realmName = "saml-basic-auth"; - KeycloakRealmImport realmImport = new KeycloakRealmImport(); - realmImport.getMetadata().setName(realmName); - realmImport.getMetadata().setLabels(matchLabels); - KeycloakRealmImportSpec spec1 = new KeycloakRealmImportSpec(); - realmImport.setSpec(spec1); - spec1.setKeycloakCRName(name); - Realm realm = new Realm(); - spec1.setRealm(realm); - realm.setId(realmName); - realm.setRealm(realmName); - realm.setEnabled(true); - List users = new ArrayList<>(); - realm.setUsers(users); - Users user1 = new Users(); - users.add(user1); - user1.setUsername("user"); - user1.setEnabled(true); - Credentials credentials = new Credentials(); - user1.setCredentials(List.of(credentials)); - credentials.setType("password"); - credentials.setValue("LOREDANABERTE1234"); - - KEYCLOAK_OPERATOR_PROVISIONER = initializeOperatorProvisioner(keycloak, name); - KEYCLOAK_OPERATOR_PROVISIONER.configure(); - KEYCLOAK_OPERATOR_PROVISIONER.subscribe(); - - verifyKeycloak(keycloak, realmImport, true); + try { + POSTGRESQL_IMAGE_PROVISIONER.deploy(); + try { + name = "example-sso"; + Keycloak keycloak = new Keycloak(); + keycloak.getMetadata().setName(name); + keycloak.getMetadata().setLabels(matchLabels); + KeycloakSpec spec = new KeycloakSpec(); + keycloak.setSpec(spec); + spec.setInstances(1L); + Ingress ingress = new Ingress(); + ingress.setEnabled(true); + spec.setIngress(ingress); + Hostname hostname = new Hostname(); + hostname.setHostname(OpenShifts.master().generateHostname(name)); + // create key, certificate and tls secret: Keycloak expects the secret to be created beforehand + String tlsSecretName = name + "-tls-secret"; + CertificatesUtils.CertificateAndKey certificateAndKey = CertificatesUtils + .generateSelfSignedCertificateAndKey(hostname.getHostname().replaceFirst("[.].*$", ""), + tlsSecretName); + // add TLS config to keycloak using the secret we just created + Http http = new Http(); + http.setTlsSecret(certificateAndKey.tlsSecret.getMetadata().getName()); + spec.setHttp(http); + spec.setHostname(hostname); + // database + Db db = new Db(); + db.setVendor("postgres"); + db.setHost(POSTGRESQL_IMAGE_PROVISIONER.getServiceName()); + db.setPort(Integer.toUnsignedLong(POSTGRESQL_IMAGE_PROVISIONER.getPort())); + UsernameSecret usernameSecret = new UsernameSecret(); + usernameSecret.setName(POSTGRESQL_IMAGE_PROVISIONER.getSecretName()); + usernameSecret.setKey(PostgreSQLImageOpenShiftProvisioner.POSTGRESQL_USER_KEY); + db.setUsernameSecret(usernameSecret); + PasswordSecret passwordSecret = new PasswordSecret(); + passwordSecret.setName(POSTGRESQL_IMAGE_PROVISIONER.getSecretName()); + passwordSecret.setKey(PostgreSQLImageOpenShiftProvisioner.POSTGRESQL_PASSWORD_KEY); + db.setPasswordSecret(passwordSecret); + db.setDatabase(POSTGRESQL_IMAGE_PROVISIONER.getApplication().getDbName()); + spec.setDb(db); + + realmName = "saml-basic-auth"; + KeycloakRealmImport realmImport = new KeycloakRealmImport(); + realmImport.getMetadata().setName(realmName); + realmImport.getMetadata().setLabels(matchLabels); + KeycloakRealmImportSpec spec1 = new KeycloakRealmImportSpec(); + realmImport.setSpec(spec1); + spec1.setKeycloakCRName(name); + Realm realm = new Realm(); + spec1.setRealm(realm); + realm.setId(realmName); + realm.setRealm(realmName); + realm.setEnabled(true); + List users = new ArrayList<>(); + realm.setUsers(users); + Users user1 = new Users(); + users.add(user1); + user1.setUsername("user"); + user1.setEnabled(true); + Credentials credentials = new Credentials(); + user1.setCredentials(List.of(credentials)); + credentials.setType("password"); + credentials.setValue("LOREDANABERTE1234"); + + KEYCLOAK_OPERATOR_PROVISIONER = initializeOperatorProvisioner(keycloak, name); + KEYCLOAK_OPERATOR_PROVISIONER.configure(); + try { + KEYCLOAK_OPERATOR_PROVISIONER.subscribe(); + try { + verifyKeycloak(keycloak, true); + } finally { + KEYCLOAK_OPERATOR_PROVISIONER.unsubscribe(); + } + } finally { + KEYCLOAK_OPERATOR_PROVISIONER.dismiss(); + } + } finally { + POSTGRESQL_IMAGE_PROVISIONER.undeploy(); + } + } finally { + POSTGRESQL_IMAGE_PROVISIONER.postUndeploy(); + } } finally { - if (!Objects.isNull(KEYCLOAK_OPERATOR_PROVISIONER)) - KEYCLOAK_OPERATOR_PROVISIONER.unsubscribe(); - POSTGRESQL_IMAGE_PROVISIONER.undeploy(); - POSTGRESQL_IMAGE_PROVISIONER.postUndeploy(); + POSTGRESQL_IMAGE_PROVISIONER.dismiss(); } } diff --git a/tools/intersmash-tools-provisioners/src/main/java/org/jboss/intersmash/tools/util/tls/CertificatesUtils.java b/tools/intersmash-tools-provisioners/src/main/java/org/jboss/intersmash/tools/util/tls/CertificatesUtils.java index b3d1773e9..eaae70c93 100644 --- a/tools/intersmash-tools-provisioners/src/main/java/org/jboss/intersmash/tools/util/tls/CertificatesUtils.java +++ b/tools/intersmash-tools-provisioners/src/main/java/org/jboss/intersmash/tools/util/tls/CertificatesUtils.java @@ -6,11 +6,11 @@ import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; +import java.text.MessageFormat; import java.util.Base64; import java.util.HashMap; import java.util.Map; - -import org.junit.jupiter.api.Assertions; +import java.util.Objects; import cz.xtf.core.config.OpenShiftConfig; import cz.xtf.core.openshift.OpenShifts; @@ -69,7 +69,9 @@ public static CertificateAndKey generateSelfSignedCertificateAndKey(String hostn caDir.resolve(truststore).toFile().exists()) { certificateAndKey.existing = true; Secret tlsSecret = OpenShifts.master().getSecret(tlsSecretName); - Assertions.assertNotNull(tlsSecret); + if (Objects.isNull(tlsSecret)) { + throw new RuntimeException(MessageFormat.format("Secret {} doesn't exist!", tlsSecretName)); + } certificateAndKey.tlsSecret = tlsSecret; return certificateAndKey; } @@ -85,7 +87,9 @@ public static CertificateAndKey generateSelfSignedCertificateAndKey(String hostn // create secret try { Secret tlsSecret = createTlsSecret(tlsSecretName, certificateAndKey.key, certificateAndKey.certificate); - Assertions.assertNotNull(tlsSecret); + if (Objects.isNull(tlsSecret)) { + throw new RuntimeException(MessageFormat.format("Secret {} doesn't exist!", tlsSecretName)); + } certificateAndKey.tlsSecret = tlsSecret; } catch (IOException e) { throw new RuntimeException("Failed to create secret " + tlsSecretName, e);