Skip to content

Commit 43d291d

Browse files
committed
refactor: improve testability of context construction
1 parent cd7bc86 commit 43d291d

227 files changed

Lines changed: 10148 additions & 3058 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

stackgres-k8s/src/common/src/main/java/io/stackgres/common/WebUtil.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
import java.security.cert.X509Certificate;
1414
import java.util.Map;
1515
import java.util.Optional;
16-
import java.util.function.Predicate;
1716

1817
import javax.net.ssl.HostnameVerifier;
1918
import javax.net.ssl.SSLContext;
@@ -29,6 +28,8 @@
2928

3029
public interface WebUtil {
3130

31+
int BAD_REQUEST_STATUS_CODE = Integer.valueOf(Response.Status.BAD_REQUEST.getStatusCode()).intValue();
32+
3233
static boolean checkUri(String uri, Map<String, Object> headers) {
3334
try {
3435
ClientBuilder clientBuilder = ClientBuilder.newBuilder();
@@ -61,7 +62,7 @@ static Optional<Exception> checkUnsecureUri(String uri, Map<String, Object> head
6162
.buildGet()
6263
.invoke();
6364
return Optional.of(response.getStatus())
64-
.filter(Predicate.not(Integer.valueOf(Response.Status.OK.getStatusCode())::equals))
65+
.filter(statusCode -> statusCode.intValue() < BAD_REQUEST_STATUS_CODE)
6566
.map(status -> new Exception("Invalid status code " + status));
6667
}
6768
} catch (IOException | IllegalArgumentException | ProcessingException

stackgres-k8s/src/common/src/main/java/io/stackgres/common/crd/sgbackup/BackupStatus.java

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,10 @@
55

66
package io.stackgres.common.crd.sgbackup;
77

8+
import java.util.List;
89
import java.util.Locale;
910
import java.util.Objects;
11+
import java.util.Optional;
1012

1113
import org.jooq.lambda.Seq;
1214

@@ -17,6 +19,8 @@ public enum BackupStatus {
1719
COMPLETED,
1820
FAILED;
1921

22+
private static final List<String> FINISHED_STATUSES = List.of(COMPLETED.status, FAILED.status);
23+
2024
private final String status;
2125

2226
BackupStatus() {
@@ -42,4 +46,31 @@ public static BackupStatus fromStatus(String status) {
4246
+ Seq.of(values()).map(BackupStatus::status).toString(", ")));
4347
}
4448

49+
public static boolean isCompleted(StackGresBackup backup) {
50+
return Optional.of(backup)
51+
.map(StackGresBackup::getStatus)
52+
.map(StackGresBackupStatus::getProcess)
53+
.map(StackGresBackupProcess::getStatus)
54+
.filter(COMPLETED.status::equals)
55+
.isPresent();
56+
}
57+
58+
public static boolean isCompleted(Optional<StackGresBackup> backup) {
59+
return backup
60+
.map(StackGresBackup::getStatus)
61+
.map(StackGresBackupStatus::getProcess)
62+
.map(StackGresBackupProcess::getStatus)
63+
.filter(COMPLETED.status::equals)
64+
.isPresent();
65+
}
66+
67+
public static boolean isFinished(StackGresBackup backup) {
68+
return Optional.of(backup)
69+
.map(StackGresBackup::getStatus)
70+
.map(StackGresBackupStatus::getProcess)
71+
.map(StackGresBackupProcess::getStatus)
72+
.filter(FINISHED_STATUSES::contains)
73+
.isPresent();
74+
}
75+
4576
}

stackgres-k8s/src/common/src/main/java/io/stackgres/common/crd/sgshardedbackup/ShardedBackupStatus.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,10 @@
55

66
package io.stackgres.common.crd.sgshardedbackup;
77

8+
import java.util.List;
89
import java.util.Locale;
910
import java.util.Objects;
11+
import java.util.Optional;
1012

1113
import org.jooq.lambda.Seq;
1214

@@ -17,6 +19,8 @@ public enum ShardedBackupStatus {
1719
COMPLETED,
1820
FAILED;
1921

22+
private static final List<String> FINISHED_STATUSES = List.of(COMPLETED.status, FAILED.status);
23+
2024
private final String status;
2125

2226
ShardedBackupStatus() {
@@ -42,4 +46,22 @@ public static ShardedBackupStatus fromStatus(String status) {
4246
+ Seq.of(values()).map(ShardedBackupStatus::status).toString(", ")));
4347
}
4448

49+
public static boolean isFinished(StackGresShardedBackup backup) {
50+
return Optional.of(backup)
51+
.map(StackGresShardedBackup::getStatus)
52+
.map(StackGresShardedBackupStatus::getProcess)
53+
.map(StackGresShardedBackupProcess::getStatus)
54+
.filter(FINISHED_STATUSES::contains)
55+
.isPresent();
56+
}
57+
58+
public static boolean isCompleted(StackGresShardedBackup backup) {
59+
return Optional.of(backup)
60+
.map(StackGresShardedBackup::getStatus)
61+
.map(StackGresShardedBackupStatus::getProcess)
62+
.map(StackGresShardedBackupProcess::getStatus)
63+
.filter(COMPLETED.status::equals)
64+
.isPresent();
65+
}
66+
4567
}

stackgres-k8s/src/common/src/main/java/io/stackgres/common/crd/sgshardedbackup/StackGresShardedBackupInformation.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@
66
package io.stackgres.common.crd.sgshardedbackup;
77

88
import java.util.Objects;
9+
import java.util.Optional;
910

11+
import com.fasterxml.jackson.annotation.JsonIgnore;
1012
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
1113
import com.fasterxml.jackson.annotation.JsonInclude;
1214
import io.quarkus.runtime.annotations.RegisterForReflection;
@@ -27,6 +29,13 @@ public class StackGresShardedBackupInformation {
2729
@Valid
2830
private StackGresShardedBackupSize size;
2931

32+
@JsonIgnore
33+
public String getPostgresMajorVersion() {
34+
return Optional.ofNullable(postgresVersion)
35+
.map(version -> version.substring(0, 2))
36+
.orElse(null);
37+
}
38+
3039
public String getPostgresVersion() {
3140
return postgresVersion;
3241
}

stackgres-k8s/src/common/src/test/java/io/stackgres/common/fixture/dbops/DbOpsFixture.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,11 @@ public DbOpsFixture loadPgbench() {
3636
return this;
3737
}
3838

39+
public DbOpsFixture loadSampling() {
40+
fixture = readFromJson(STACKGRES_DB_OPS_SAMPLING_JSON);
41+
return this;
42+
}
43+
3944
public DbOpsFixture loadBenchmark() {
4045
fixture = readFromJson(STACKGRES_DB_OPS_BENCHMARK_JSON);
4146
return this;

stackgres-k8s/src/operator/src/main/java/io/stackgres/operator/app/CertificateInstaller.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@
3131
import io.stackgres.common.resource.CustomResourceFinder;
3232
import io.stackgres.common.resource.ResourceFinder;
3333
import io.stackgres.common.resource.ResourceWriter;
34-
import io.stackgres.operator.conciliation.config.ImmutableStackGresConfigContext;
3534
import io.stackgres.operator.conciliation.config.StackGresConfigContext;
3635
import io.stackgres.operator.conciliation.factory.config.OperatorSecret;
3736
import io.stackgres.operatorframework.resource.ResourceUtil;
@@ -95,7 +94,7 @@ public void installOrUpdateCertificate() {
9594
}
9695
String certSecretName = OperatorSecret.name(config);
9796
var certSecretFound = secretFinder.findByNameAndNamespace(certSecretName, operatorNamespace);
98-
StackGresConfigContext context = ImmutableStackGresConfigContext.builder()
97+
StackGresConfigContext context = StackGresConfigContext.builder()
9998
.source(config)
10099
.operatorSecret(certSecretFound)
101100
.isGrafanaEmbedded(false)

stackgres-k8s/src/operator/src/main/java/io/stackgres/operator/common/ObservedClusterContext.java

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
import java.time.Instant;
99
import java.util.List;
10+
import java.util.Objects;
1011
import java.util.Optional;
1112

1213
import io.fabric8.kubernetes.api.model.Pod;
@@ -50,6 +51,23 @@ public static ObservedClusterContext toObservedClusterContext(
5051
.toList());
5152
}
5253

54+
@Override
55+
public int hashCode() {
56+
return Objects.hash(cluster, pods);
57+
}
58+
59+
@Override
60+
public boolean equals(Object obj) {
61+
if (this == obj) {
62+
return true;
63+
}
64+
if (!(obj instanceof ObservedClusterContext)) {
65+
return false;
66+
}
67+
ObservedClusterContext other = (ObservedClusterContext) obj;
68+
return Objects.equals(cluster, other.cluster) && Objects.equals(pods, other.pods);
69+
}
70+
5371
public static class CollectorPodContext {
5472

5573
private final String namespace;
@@ -83,6 +101,24 @@ public Instant getCreationTimestamp() {
83101
public String getIp() {
84102
return ip;
85103
}
104+
105+
@Override
106+
public int hashCode() {
107+
return Objects.hash(creationTimestamp, ip, name, namespace);
108+
}
109+
110+
@Override
111+
public boolean equals(Object obj) {
112+
if (this == obj) {
113+
return true;
114+
}
115+
if (!(obj instanceof CollectorPodContext)) {
116+
return false;
117+
}
118+
CollectorPodContext other = (CollectorPodContext) obj;
119+
return Objects.equals(creationTimestamp, other.creationTimestamp) && Objects.equals(ip, other.ip)
120+
&& Objects.equals(name, other.name) && Objects.equals(namespace, other.namespace);
121+
}
86122
}
87123

88124
}

stackgres-k8s/src/operator/src/main/java/io/stackgres/operator/common/PrometheusContext.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
package io.stackgres.operator.common;
77

88
import java.util.Map;
9+
import java.util.Objects;
910
import java.util.Optional;
1011

1112
import io.fabric8.kubernetes.api.model.LabelSelector;
@@ -78,4 +79,22 @@ public static PrometheusContext toPrometheusContext(
7879
monitor);
7980
}
8081

82+
@Override
83+
public int hashCode() {
84+
return Objects.hash(matchLabels, monitor, name, namespace);
85+
}
86+
87+
@Override
88+
public boolean equals(Object obj) {
89+
if (this == obj) {
90+
return true;
91+
}
92+
if (!(obj instanceof PrometheusContext)) {
93+
return false;
94+
}
95+
PrometheusContext other = (PrometheusContext) obj;
96+
return Objects.equals(matchLabels, other.matchLabels) && Objects.equals(monitor, other.monitor)
97+
&& Objects.equals(name, other.name) && Objects.equals(namespace, other.namespace);
98+
}
99+
81100
}

stackgres-k8s/src/operator/src/main/java/io/stackgres/operator/conciliation/ContextFactory.java renamed to stackgres-k8s/src/operator/src/main/java/io/stackgres/operator/conciliation/ContextPipeline.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,17 @@
1010
import io.stackgres.common.CdiUtil;
1111
import jakarta.enterprise.inject.Instance;
1212

13-
public abstract class ContextFactory<C, B> {
13+
public abstract class ContextPipeline<C, B> {
1414

1515
private final List<ContextAppender<C, B>> contextAppenders;
1616

17-
protected ContextFactory(Instance<ContextAppender<C, B>> contextAppenders) {
17+
protected ContextPipeline(Instance<ContextAppender<C, B>> contextAppenders) {
1818
this.contextAppenders = contextAppenders
1919
.stream()
2020
.toList();
2121
}
2222

23-
protected ContextFactory() {
23+
protected ContextPipeline() {
2424
CdiUtil.checkPublicNoArgsConstructorIsCalledToCreateProxy(getClass());
2525
this.contextAppenders = null;
2626
}

stackgres-k8s/src/operator/src/main/java/io/stackgres/operator/conciliation/backup/BackupJobReconciliationHandler.java

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,11 @@
55

66
package io.stackgres.operator.conciliation.backup;
77

8-
import java.util.Optional;
9-
108
import io.fabric8.kubernetes.api.model.HasMetadata;
119
import io.fabric8.kubernetes.api.model.Pod;
1210
import io.fabric8.kubernetes.api.model.batch.v1.Job;
1311
import io.stackgres.common.crd.sgbackup.BackupStatus;
1412
import io.stackgres.common.crd.sgbackup.StackGresBackup;
15-
import io.stackgres.common.crd.sgbackup.StackGresBackupProcess;
16-
import io.stackgres.common.crd.sgbackup.StackGresBackupStatus;
1713
import io.stackgres.common.resource.ResourceFinder;
1814
import io.stackgres.common.resource.ResourceScanner;
1915
import io.stackgres.operator.conciliation.FireAndForgetJobReconciliationHandler;
@@ -38,13 +34,7 @@ public BackupJobReconciliationHandler(
3834

3935
@Override
4036
protected boolean canForget(StackGresBackup context, HasMetadata resource) {
41-
return Optional.of(context)
42-
.map(StackGresBackup::getStatus)
43-
.map(StackGresBackupStatus::getProcess)
44-
.map(StackGresBackupProcess::getStatus)
45-
.filter(status -> BackupStatus.COMPLETED.status().equals(status)
46-
|| BackupStatus.FAILED.status().equals(status))
47-
.isPresent();
37+
return BackupStatus.isFinished(context);
4838
}
4939

5040
}

0 commit comments

Comments
 (0)