Skip to content

Commit fa57bd7

Browse files
committed
IT for Glue
Signed-off-by: Attila Mészáros <[email protected]>
1 parent 4e4612e commit fa57bd7

File tree

5 files changed

+47
-2
lines changed

5 files changed

+47
-2
lines changed

Diff for: src/main/java/io/csviri/operator/glue/reconciler/ValidationAndErrorHandler.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,11 @@ public class ValidationAndErrorHandler {
3535
if (e instanceof ValidationAndErrorHandler.NonUniqueNameException ex) {
3636
resource.getStatus()
3737
.setErrorMessage(NON_UNIQUE_NAMES_FOUND_PREFIX + String.join(",", ex.getDuplicates()));
38+
return ErrorStatusUpdateControl.updateStatus(resource).withNoRetry();
3839
} else {
3940
resource.getStatus().setErrorMessage("Error during reconciliation");
41+
return ErrorStatusUpdateControl.updateStatus(resource);
4042
}
41-
return ErrorStatusUpdateControl.updateStatus(resource);
4243
}
4344

4445
public void checkIfNamesAreUnique(GlueSpec glueSpec) {
@@ -58,7 +59,6 @@ public void checkIfNamesAreUnique(GlueSpec glueSpec) {
5859
if (!duplicates.isEmpty()) {
5960
throw new NonUniqueNameException(duplicates);
6061
}
61-
6262
}
6363

6464
public static class NonUniqueNameException extends GlueException {

Diff for: src/main/java/io/csviri/operator/glue/reconciler/glue/GlueReconciler.java

+5
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import java.util.*;
44

5+
import io.csviri.operator.glue.customresource.glue.GlueStatus;
6+
import io.csviri.operator.glue.customresource.operator.ResourceFlowOperatorStatus;
57
import org.slf4j.Logger;
68
import org.slf4j.LoggerFactory;
79

@@ -282,6 +284,9 @@ private String parentFinalizer(String glueName) {
282284
@Override
283285
public ErrorStatusUpdateControl<Glue> updateErrorStatus(Glue resource, Context<Glue> context,
284286
Exception e) {
287+
if (resource.getStatus() == null) {
288+
resource.setStatus(new GlueStatus());
289+
}
285290
return validationAndErrorHandler.updateStatusErrorMessage(e, resource);
286291
}
287292
}

Diff for: src/main/java/io/csviri/operator/glue/reconciler/operator/GlueOperatorReconciler.java

+4
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import java.util.Map;
66
import java.util.Set;
77

8+
import io.csviri.operator.glue.customresource.operator.ResourceFlowOperatorStatus;
89
import org.slf4j.Logger;
910
import org.slf4j.LoggerFactory;
1011

@@ -139,6 +140,9 @@ public Map<String, EventSource> prepareEventSources(
139140
@Override
140141
public ErrorStatusUpdateControl<GlueOperator> updateErrorStatus(GlueOperator resource,
141142
Context<GlueOperator> context, Exception e) {
143+
if (resource.getStatus() == null) {
144+
resource.setStatus(new ResourceFlowOperatorStatus());
145+
}
142146
return validationAndErrorHandler.updateStatusErrorMessage(e, resource);
143147
}
144148

Diff for: src/test/java/io/csviri/operator/glue/GlueTest.java

+13
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import java.util.Map;
77
import java.util.stream.IntStream;
88

9+
import io.csviri.operator.glue.reconciler.ValidationAndErrorHandler;
910
import org.junit.jupiter.api.Test;
1011

1112
import io.csviri.operator.glue.customresource.glue.DependentResourceSpec;
@@ -223,6 +224,18 @@ void changingWorkflow() {
223224
});
224225
}
225226

227+
@Test
228+
void nonUniqueNameResultsInErrorMessageOnStatus() {
229+
Glue glue = create(TestUtils.loadResoureFlow("/glue/NonUniqueName.yaml"));
230+
231+
await().untilAsserted(()-> {
232+
var actualGlue = get(Glue.class,glue.getMetadata().getName());
233+
234+
assertThat(actualGlue.getStatus()).isNotNull();
235+
assertThat(actualGlue.getStatus().getErrorMessage())
236+
.startsWith(ValidationAndErrorHandler.NON_UNIQUE_NAMES_FOUND_PREFIX);
237+
});
238+
}
226239

227240

228241
//

Diff for: src/test/resources/glue/NonUniqueName.yaml

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
# Invalid GLUE, presents resources with non-unique name
2+
apiVersion: io.csviri.operator.glue/v1beta1
3+
kind: Glue
4+
metadata:
5+
name: templating-sample
6+
spec:
7+
resources:
8+
- name: configMap1
9+
resource:
10+
apiVersion: v1
11+
kind: ConfigMap
12+
metadata:
13+
name: cm1
14+
data:
15+
key: "value1"
16+
- name: configMap1
17+
resource:
18+
apiVersion: v1
19+
kind: ConfigMap
20+
metadata:
21+
name: cm2
22+
data:
23+
key: "value1"

0 commit comments

Comments
 (0)