Skip to content
This repository was archived by the owner on Sep 11, 2025. It is now read-only.

Commit debf50b

Browse files
task: add tests and move DB conditions into a single util (#47)
1 parent 881b088 commit debf50b

File tree

20 files changed

+712
-249
lines changed

20 files changed

+712
-249
lines changed

.github/workflows/ci.yml

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ jobs:
4646
runs-on: ubuntu-latest
4747
strategy:
4848
matrix:
49-
preset: [ "okd" ]
49+
preset: [ "openshift", "microshift" ]
5050
fail-fast: false
5151
steps:
5252
- uses: actions/checkout@v4
@@ -74,22 +74,31 @@ jobs:
7474
df -h
7575
- name: Download crc
7676
run: |
77-
wget https://developers.redhat.com/content-gateway/file/pub/openshift-v4/clients/crc/2.40.0/crc-linux-amd64.tar.xz
77+
wget https://developers.redhat.com/content-gateway/file/pub/openshift-v4/clients/crc/2.44.0/crc-linux-amd64.tar.xz
7878
mkdir -p bin/ && tar -xJf crc-linux-amd64.tar.xz --strip-components=1 -C bin/
7979
sudo mv ./bin/crc /usr/local/bin/crc && rm -r bin/
8080
- name: Set the crc config
8181
run: |
82-
crc config set consent-telemetry no
83-
crc config set network-mode user
82+
echo eyJhdXRocyI6eyJjbG91ZC5vcGVuc2hpZnQuY29tIjp7ImF1dGgiOiJiM0JsYm5Ob2FXWjBMWEpsYkdWaGMyVXRaR1YySzI5amJWOWhZMk5sYzNOZk16RTFaRE16TWpJM09HVXpOR000WTJKbFkyVmxOMlU0TVRoa1pEazNNRGc2VERKSldUVlVUVlZQUTA5VlRraFdTRTFRUjBaRFdEaFBTRUpVTVVaU1RrZEtOMU5EUVZFMlFrOUlPRWRHVERjMVVFeE9UVTB5VFRsUldFZzFSbGMyT1E9PSIsImVtYWlsIjoidHJ1c3QuZ2l0LmJvdEBnbWFpbC5jb20ifSwicXVheS5pbyI6eyJhdXRoIjoiYjNCbGJuTm9hV1owTFhKbGJHVmhjMlV0WkdWMksyOWpiVjloWTJObGMzTmZNekUxWkRNek1qSTNPR1V6TkdNNFkySmxZMlZsTjJVNE1UaGtaRGszTURnNlRESkpXVFZVVFZWUFEwOVZUa2hXU0UxUVIwWkRXRGhQU0VKVU1VWlNUa2RLTjFORFFWRTJRazlJT0VkR1REYzFVRXhPVFUweVRUbFJXRWcxUmxjMk9RPT0iLCJlbWFpbCI6InRydXN0LmdpdC5ib3RAZ21haWwuY29tIn0sInJlZ2lzdHJ5LmNvbm5lY3QucmVkaGF0LmNvbSI6eyJhdXRoIjoiZkhWb1l5MXdiMjlzTFRSak9HTTVOREV5TFRJeFltRXROREUxWmkwNU5UQmxMVEk1TXpWak9HRXhPREk1TmpwbGVVcG9Za2RqYVU5cFNsTlZlbFY0VFdsS09TNWxlVXA2WkZkSmFVOXBTbXhPYWxGNldsUlZNVTFIUlRKT1YwVXdUVEpKTlU5VWFHcFpiVlpzV2tSb2JFMUhSbXhOYW1oc1drTktPUzVuVVRWV05EZHNUalo1U0RCNFFWSnlSRkJPTVhKbFUwNHhTblJaY1ZwdWNqaHJaalZHYkhJd1RWZzNURTFuUTNWSVRqbENRemxDZUc5UFkzQmxhRmgwWTJ0WmFEZE1TMDFKTmpsb1UyVk1jbmRQTFRGT2MwWldhbWxtVUU5QlptRkxUSEl3ZURGeFN5MXZVa0pwWlRKRk0zRlRhRE5YWVVjNGFVOWpkVWR1U0haTlEzWm1NQzExZUZoMmRWRmxiM0o2WDFNM1dHWmFZbGRITW0xWFZFeHNia1JqVlVwb1ptUjRTa1Z3YUdaMllubzFWMEV3V1dJelpGSjFObk5WY1dZNFpFdExUVVkwVlZBNVlUQnVSVk5uUm01cWFtSm1lWEF4VmpkTWFXUkdXR2wwT0hkTlpVeFdkMVJCYkdOSVkwMURRMUpwVW05bU5tUndOMjVyUldnMWNtdENWWGR5Tms1SlVVMXpWWE4xYTAxMlpFVktWVU51TkVKcExVaGtNR2hGUjJkRVp6UnlkamxIWldWNFowMTBhbFJaT0dvelVGTlpRV3hUVFVsVFdteERXVWg0WDBrMWVuRlpPWEV4ZW10aWRtOHpVM0pJY1dWeGRXNXNha3BwUkRCVVdEbGxhVmxyUTJzeldWOXhTbVJOVDBkM1NHVm1OMmx3YlhjMVdsbG5OeTB4WWxVeWFUTXpVMkp1UWtJdFpGQjBValYwYTFJeVEyVlJWVEZTTW1aVVkxQk1lbUZqWWtkcWRrUjJUMmx2ZVhCbmRqVm9abGd4Y1RWelFqTjBWVE5tYnpaMVV6bERlV3BVYVdSd1owTk1NVXBwUkU1T1FraFhRVU54WkVvM09GaG9VM0ZyVDBWRGJFbEtNRlI1V2xock5uVTBSREJ4YzFGVmEzbFFkMHQwWlU5aGRGbGhMVkpITVRKZlIwMUNNSEZIYWtWSGRIbDZaVEpIYzNSd2RsOTZUMlZOYTJSMFEzbEhWMmQ0ZG1GZlJWTlBNVkpJWkVWR1IwWTNhVGt0YmtVemQwSlJYMjE1ZVhaeU1IVlNWVlJUVFZKeE1YY3paRGxoU1V0eldYTnhaRWR1ZWxGMWNYUktWVkJhVGkxRVRFTnhRME53UWtSclpuRkJWbDh3UVhWUVZreGhOa1pWYW1KYVFUTnJURGsyVFZOdkxWaHlVMXAwTVRaNU5GZDNNMlp0YmkxMFVsOVdRUT09IiwiZW1haWwiOiJ0cnVzdC5naXQuYm90QGdtYWlsLmNvbSJ9LCJyZWdpc3RyeS5yZWRoYXQuaW8iOnsiYXV0aCI6ImZIVm9ZeTF3YjI5c0xUUmpPR001TkRFeUxUSXhZbUV0TkRFMVppMDVOVEJsTFRJNU16VmpPR0V4T0RJNU5qcGxlVXBvWWtkamFVOXBTbE5WZWxWNFRXbEtPUzVsZVVwNlpGZEphVTlwU214T2FsRjZXbFJWTVUxSFJUSk9WMFV3VFRKSk5VOVVhR3BaYlZac1drUm9iRTFIUm14TmFtaHNXa05LT1M1blVUVldORGRzVGpaNVNEQjRRVkp5UkZCT01YSmxVMDR4U25SWmNWcHVjamhyWmpWR2JISXdUVmczVEUxblEzVklUamxDUXpsQ2VHOVBZM0JsYUZoMFkydFphRGRNUzAxSk5qbG9VMlZNY25kUExURk9jMFpXYW1sbVVFOUJabUZMVEhJd2VERnhTeTF2VWtKcFpUSkZNM0ZUYUROWFlVYzRhVTlqZFVkdVNIWk5RM1ptTUMxMWVGaDJkVkZsYjNKNlgxTTNXR1phWWxkSE1tMVhWRXhzYmtSalZVcG9abVI0U2tWd2FHWjJZbm8xVjBFd1dXSXpaRkoxTm5OVmNXWTRaRXRMVFVZMFZWQTVZVEJ1UlZOblJtNXFhbUptZVhBeFZqZE1hV1JHV0dsME9IZE5aVXhXZDFSQmJHTklZMDFEUTFKcFVtOW1ObVJ3TjI1clJXZzFjbXRDVlhkeU5rNUpVVTF6VlhOMWEwMTJaRVZLVlVOdU5FSnBMVWhrTUdoRlIyZEVaelJ5ZGpsSFpXVjRaMDEwYWxSWk9Hb3pVRk5aUVd4VFRVbFRXbXhEV1VoNFgwazFlbkZaT1hFeGVtdGlkbTh6VTNKSWNXVnhkVzVzYWtwcFJEQlVXRGxsYVZsclEyc3pXVjl4U21STlQwZDNTR1ZtTjJsd2JYYzFXbGxuTnkweFlsVXlhVE16VTJKdVFrSXRaRkIwVWpWMGExSXlRMlZSVlRGU01tWlVZMUJNZW1GallrZHFka1IyVDJsdmVYQm5kalZvWmxneGNUVnpRak4wVlRObWJ6WjFVemxEZVdwVWFXUndaME5NTVVwcFJFNU9Ra2hYUVVOeFpFbzNPRmhvVTNGclQwVkRiRWxLTUZSNVdsaHJOblUwUkRCeGMxRlZhM2xRZDB0MFpVOWhkRmxoTFZKSE1USmZSMDFDTUhGSGFrVkhkSGw2WlRKSGMzUndkbDk2VDJWTmEyUjBRM2xIVjJkNGRtRmZSVk5QTVZKSVpFVkdSMFkzYVRrdGJrVXpkMEpSWDIxNWVYWnlNSFZTVlZSVFRWSnhNWGN6WkRsaFNVdHpXWE54WkVkdWVsRjFjWFJLVlZCYVRpMUVURU54UTBOd1FrUnJabkZCVmw4d1FYVlFWa3hoTmtaVmFtSmFRVE5yVERrMlRWTnZMVmh5VTFwME1UWjVORmQzTTJadGJpMTBVbDlXUVE9PSIsImVtYWlsIjoidHJ1c3QuZ2l0LmJvdEBnbWFpbC5jb20ifX19 | base64 --decode > pull-secret.txt
8483
crc config set preset ${{ matrix.preset }}
85-
- name: Setup the crc
86-
run: sudo -su $USER crc setup
87-
- name: Start the crc
84+
crc config set pull-secret-file pull-secret.txt
85+
crc config set network-mode user
86+
crc config set consent-telemetry no
87+
- name: Setup and Start the crc
8888
run: |
89+
sudo -su $USER crc setup
8990
sudo -su $USER crc start
91+
sleep 60
92+
- name: Copy OpenShift client
93+
run: sudo cp /home/$USER/.crc/bin/oc/oc /usr/bin/
94+
- name: Copy the kubeconfig file to required location
95+
run: |
96+
mkdir -p /home/$USER/.kube
97+
cp /home/$USER/.crc/machines/crc/kubeconfig /home/$USER/.kube/config
98+
oc get pods -A
9099
- name: Test
91100
run: |
92-
export HOST_KUBERNETES_CONFIG_FILE=${HOME}/.kube/config
101+
export HOST_KUBERNETES_CONFIG_FILE=/home/$USER/.kube/config
93102
echo "Using ${HOST_KUBERNETES_CONFIG_FILE} as host k8s"
94103
mvn verify
95104

src/main/java/org/trustify/operator/Constants.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,6 @@ public class Constants {
5353
public static final String DB_NAME = "trustify";
5454
public static final Integer DB_PORT= 5432;
5555

56-
public static final String DEFAULT_PVC_SIZE = "10G";
57-
5856
public static final String CERTIFICATES_FOLDER = "/mnt/certificates";
5957
public static final String WORKSPACES_FOLDER = "/mnt/workspace";
6058
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package org.trustify.operator;
2+
3+
import io.smallrye.config.ConfigMapping;
4+
import io.smallrye.config.WithName;
5+
6+
@ConfigMapping(prefix = "trustify")
7+
public interface TrustifyConfig {
8+
9+
@WithName("default-pvc-size")
10+
String defaultPvcSize();
11+
}
Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,12 @@
11
package org.trustify.operator.cdrs.v2alpha1.db;
22

33
import org.trustify.operator.cdrs.v2alpha1.Trustify;
4-
import org.trustify.operator.cdrs.v2alpha1.TrustifySpec;
5-
6-
import java.util.Optional;
4+
import org.trustify.operator.cdrs.v2alpha1.server.utils.ServerUtils;
75

86
public abstract class DBActivationCondition {
97

108
protected boolean isMet(Trustify cr) {
11-
return !Optional.ofNullable(cr.getSpec().databaseSpec())
12-
.map(TrustifySpec.DatabaseSpec::externalDatabase)
13-
.orElse(false);
9+
return ServerUtils.isServerDBRequired(cr);
1410
}
1511

1612
}

src/main/java/org/trustify/operator/cdrs/v2alpha1/db/DBDeployment.java

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import org.trustify.operator.Constants;
1515
import org.trustify.operator.cdrs.v2alpha1.Trustify;
1616
import org.trustify.operator.cdrs.v2alpha1.TrustifySpec;
17+
import org.trustify.operator.cdrs.v2alpha1.db.utils.DBUtils;
1718
import org.trustify.operator.utils.CRDUtils;
1819

1920
import java.util.Arrays;
@@ -56,17 +57,8 @@ public Result<Deployment> match(Deployment actual, Trustify cr, Context<Trustify
5657
}
5758

5859
@Override
59-
public boolean isMet(DependentResource<Deployment, Trustify> dependentResource, Trustify primary, Context<Trustify> context) {
60-
return context.getSecondaryResource(Deployment.class, new DBDeploymentDiscriminator())
61-
.map(deployment -> {
62-
final var status = deployment.getStatus();
63-
if (status != null) {
64-
final var readyReplicas = status.getReadyReplicas();
65-
return readyReplicas != null && readyReplicas >= 1;
66-
}
67-
return false;
68-
})
69-
.orElse(false);
60+
public boolean isMet(DependentResource<Deployment, Trustify> dependentResource, Trustify cr, Context<Trustify> context) {
61+
return DBUtils.isDeploymentReady(dependentResource, cr, context);
7062
}
7163

7264
@SuppressWarnings("unchecked")

src/main/java/org/trustify/operator/cdrs/v2alpha1/db/DBPersistentVolumeClaim.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@
77
import io.javaoperatorsdk.operator.processing.dependent.kubernetes.CRUDKubernetesDependentResource;
88
import io.javaoperatorsdk.operator.processing.dependent.kubernetes.KubernetesDependent;
99
import jakarta.enterprise.context.ApplicationScoped;
10+
import jakarta.inject.Inject;
1011
import org.trustify.operator.Constants;
12+
import org.trustify.operator.TrustifyConfig;
1113
import org.trustify.operator.cdrs.v2alpha1.Trustify;
1214
import org.trustify.operator.cdrs.v2alpha1.TrustifySpec;
1315
import org.trustify.operator.utils.CRDUtils;
@@ -21,6 +23,9 @@ public class DBPersistentVolumeClaim extends CRUDKubernetesDependentResource<Per
2123

2224
public static final String LABEL_SELECTOR = "app.kubernetes.io/managed-by=trustify-operator,component=db";
2325

26+
@Inject
27+
TrustifyConfig trustifyConfig;
28+
2429
public DBPersistentVolumeClaim() {
2530
super(PersistentVolumeClaim.class);
2631
}
@@ -36,7 +41,7 @@ private PersistentVolumeClaim newPersistentVolumeClaim(Trustify cr, Context<Trus
3641
.getMandatory(Constants.CONTEXT_LABELS_KEY, Map.class);
3742

3843
String pvcStorageSize = CRDUtils.getValueFromSubSpec(cr.getSpec().databaseSpec(), TrustifySpec.DatabaseSpec::pvcSize)
39-
.orElse(Constants.DEFAULT_PVC_SIZE);
44+
.orElse(trustifyConfig.defaultPvcSize());
4045

4146
return new PersistentVolumeClaimBuilder()
4247
.withNewMetadata()

src/main/java/org/trustify/operator/cdrs/v2alpha1/db/DBSecret.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import io.javaoperatorsdk.operator.processing.dependent.Creator;
77
import io.javaoperatorsdk.operator.processing.dependent.Matcher;
88
import io.javaoperatorsdk.operator.processing.dependent.kubernetes.CRUDKubernetesDependentResource;
9+
import io.javaoperatorsdk.operator.processing.dependent.kubernetes.KubernetesDependent;
910
import jakarta.enterprise.context.ApplicationScoped;
1011
import org.trustify.operator.Constants;
1112
import org.trustify.operator.cdrs.v2alpha1.Trustify;
@@ -14,9 +15,12 @@
1415
import java.util.Map;
1516
import java.util.Random;
1617

18+
@KubernetesDependent(labelSelector = DBSecret.LABEL_SELECTOR, resourceDiscriminator = DBSecretDiscriminator.class)
1719
@ApplicationScoped
1820
public class DBSecret extends CRUDKubernetesDependentResource<Secret, Trustify> implements Creator<Secret, Trustify> {
1921

22+
public static final String LABEL_SELECTOR = "app.kubernetes.io/managed-by=trustify-operator,component=db";
23+
2024
public DBSecret() {
2125
super(Secret.class);
2226
}
@@ -42,6 +46,7 @@ private Secret newSecret(Trustify cr, Context<Trustify> context) {
4246
.withName(getSecretName(cr))
4347
.withNamespace(cr.getMetadata().getNamespace())
4448
.withLabels(labels)
49+
.addToLabels("component", "db")
4550
.withOwnerReferences(CRDUtils.getOwnerReference(cr))
4651
.endMetadata()
4752
.addToStringData(Constants.DB_SECRET_USERNAME, generateRandomString(10))
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package org.trustify.operator.cdrs.v2alpha1.db;
2+
3+
import io.fabric8.kubernetes.api.model.Secret;
4+
import io.javaoperatorsdk.operator.api.reconciler.Context;
5+
import io.javaoperatorsdk.operator.api.reconciler.ResourceDiscriminator;
6+
import io.javaoperatorsdk.operator.processing.event.ResourceID;
7+
import io.javaoperatorsdk.operator.processing.event.source.informer.InformerEventSource;
8+
import org.trustify.operator.cdrs.v2alpha1.Trustify;
9+
import org.trustify.operator.controllers.TrustifyReconciler;
10+
11+
import java.util.Optional;
12+
13+
public class DBSecretDiscriminator implements ResourceDiscriminator<Secret, Trustify> {
14+
@Override
15+
public Optional<Secret> distinguish(Class<Secret> resource, Trustify cr, Context<Trustify> context) {
16+
String secret = DBSecret.getSecretName(cr);
17+
ResourceID resourceID = new ResourceID(secret, cr.getMetadata().getNamespace());
18+
var informerEventSource = (InformerEventSource<Secret, Trustify>) context.eventSourceRetriever().getResourceEventSourceFor(Secret.class, TrustifyReconciler.SECRET_EVENT_SOURCE);
19+
return informerEventSource.get(resourceID);
20+
}
21+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package org.trustify.operator.cdrs.v2alpha1.db.utils;
2+
3+
import io.fabric8.kubernetes.api.model.apps.Deployment;
4+
import io.javaoperatorsdk.operator.api.reconciler.Context;
5+
import io.javaoperatorsdk.operator.api.reconciler.dependent.DependentResource;
6+
import org.trustify.operator.cdrs.v2alpha1.Trustify;
7+
import org.trustify.operator.cdrs.v2alpha1.db.DBDeploymentDiscriminator;
8+
9+
public class DBUtils {
10+
11+
public static boolean isDeploymentReady(DependentResource<Deployment, Trustify> dependentResource, Trustify primary, Context<Trustify> context) {
12+
return context.getSecondaryResource(Deployment.class, new DBDeploymentDiscriminator())
13+
.map(deployment -> {
14+
final var status = deployment.getStatus();
15+
if (status != null) {
16+
final var readyReplicas = status.getReadyReplicas();
17+
return readyReplicas != null && readyReplicas >= 1;
18+
}
19+
return false;
20+
})
21+
.orElse(false);
22+
}
23+
24+
}

src/main/java/org/trustify/operator/cdrs/v2alpha1/server/ServerStoragePersistentVolumeClaim.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@
66
import io.javaoperatorsdk.operator.processing.dependent.kubernetes.CRUDKubernetesDependentResource;
77
import io.javaoperatorsdk.operator.processing.dependent.kubernetes.KubernetesDependent;
88
import jakarta.enterprise.context.ApplicationScoped;
9+
import jakarta.inject.Inject;
910
import org.trustify.operator.Constants;
11+
import org.trustify.operator.TrustifyConfig;
1012
import org.trustify.operator.cdrs.v2alpha1.Trustify;
1113
import org.trustify.operator.cdrs.v2alpha1.TrustifySpec;
1214
import org.trustify.operator.utils.CRDUtils;
@@ -21,6 +23,9 @@ public class ServerStoragePersistentVolumeClaim extends CRUDKubernetesDependentR
2123

2224
public static final String LABEL_SELECTOR = "app.kubernetes.io/managed-by=trustify-operator,component=server";
2325

26+
@Inject
27+
TrustifyConfig trustifyConfig;
28+
2429
public ServerStoragePersistentVolumeClaim() {
2530
super(PersistentVolumeClaim.class);
2631
}
@@ -38,7 +43,7 @@ private PersistentVolumeClaim newPersistentVolumeClaim(Trustify cr, Context<Trus
3843
String pvcStorageSize = Optional.ofNullable(cr.getSpec().storageSpec())
3944
.flatMap(storageSpec -> Optional.ofNullable(storageSpec.filesystemStorageSpec()))
4045
.map(TrustifySpec.FilesystemStorageSpec::pvcSize)
41-
.orElse(Constants.DEFAULT_PVC_SIZE);
46+
.orElse(trustifyConfig.defaultPvcSize());
4247

4348
return new PersistentVolumeClaimBuilder()
4449
.withNewMetadata()

0 commit comments

Comments
 (0)