Skip to content

Commit

Permalink
Fix #37: modifications after review - part 2
Browse files Browse the repository at this point in the history
  • Loading branch information
tommaso-borgato committed Jun 9, 2023
1 parent bd5a779 commit 85b22d6
Show file tree
Hide file tree
Showing 4 changed files with 133 additions and 109 deletions.
10 changes: 10 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,11 @@
<formatting-style-base-directory>${project.basedir}/ide-config</formatting-style-base-directory>
<formatting-style-file>eclipse-format.xml</formatting-style-file>

<!--
Using XTF snapshot in order to include fixes in:
https://github.com/xtf-cz/xtf/commit/a833c545082b314db538ed0c73e93310752654f7
https://github.com/xtf-cz/xtf/commit/0ed7dc16c88087ce9073a447311be6c01a520f8a
-->
<xtf.version>0.31-202305291230-SNAPSHOT</xtf.version>

<version.junit.jupiter>5.7.0</version.junit.jupiter>
Expand Down Expand Up @@ -344,6 +349,11 @@
<artifactId>generator-annotations</artifactId>
<version>${version.io.fabric8}</version>
</dependency>
<dependency>
<groupId>io.fabric8</groupId>
<artifactId>openshift-client</artifactId>
<version>${version.openshift-client}</version>
</dependency>
</dependencies>
</dependencyManagement>

Expand Down
1 change: 0 additions & 1 deletion testsuite/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,6 @@
<dependency>
<groupId>io.fabric8</groupId>
<artifactId>openshift-client</artifactId>
<version>${version.openshift-client}</version>
</dependency>
</dependencies>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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();
}
}

Expand All @@ -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> 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> 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();
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
}
Expand All @@ -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);
Expand Down

0 comments on commit 85b22d6

Please sign in to comment.