Skip to content

Commit c4f8193

Browse files
committed
wip
Signed-off-by: Attila Mészáros <[email protected]>
1 parent 4712358 commit c4f8193

File tree

5 files changed

+100
-21
lines changed

5 files changed

+100
-21
lines changed

operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/alleventmode/AbstractAllEventReconciler.java

Lines changed: 40 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,25 +7,30 @@ public class AbstractAllEventReconciler {
77
public static final String FINALIZER = "all.event.mode/finalizer";
88
public static final String ADDITIONAL_FINALIZER = "all.event.mode/finalizer2";
99

10-
private boolean resourceEvent = false;
11-
private boolean deleteEvent = false;
10+
protected volatile boolean useFinalizer = true;
11+
protected volatile boolean throwExceptionOnFirstDeleteEvent = false;
12+
protected volatile boolean isFirstDeleteEvent = true;
13+
14+
private boolean resourceEventPresent = false;
15+
private boolean deleteEventPresent = false;
1216
private boolean eventOnMarkedForDeletion = false;
13-
private AtomicInteger eventCounter = new AtomicInteger(0);
1417

15-
public boolean isResourceEvent() {
16-
return resourceEvent;
18+
private final AtomicInteger eventCounter = new AtomicInteger(0);
19+
20+
public boolean isResourceEventPresent() {
21+
return resourceEventPresent;
1722
}
1823

19-
public void setResourceEvent(boolean resourceEvent) {
20-
this.resourceEvent = resourceEvent;
24+
public void setResourceEventPresent(boolean resourceEventPresent) {
25+
this.resourceEventPresent = resourceEventPresent;
2126
}
2227

23-
public boolean isDeleteEvent() {
24-
return deleteEvent;
28+
public boolean isDeleteEventPresent() {
29+
return deleteEventPresent;
2530
}
2631

27-
public void setDeleteEvent(boolean deleteEvent) {
28-
this.deleteEvent = deleteEvent;
32+
public void setDeleteEventPresent(boolean deleteEventPresent) {
33+
this.deleteEventPresent = deleteEventPresent;
2934
}
3035

3136
public boolean isEventOnMarkedForDeletion() {
@@ -43,4 +48,28 @@ public int getEventCounter() {
4348
public void increaseEventCount() {
4449
eventCounter.incrementAndGet();
4550
}
51+
52+
public boolean getUseFinalizer() {
53+
return useFinalizer;
54+
}
55+
56+
public void setUseFinalizer(boolean useFinalizer) {
57+
this.useFinalizer = useFinalizer;
58+
}
59+
60+
public boolean isFirstDeleteEvent() {
61+
return isFirstDeleteEvent;
62+
}
63+
64+
public void setFirstDeleteEvent(boolean firstDeleteEvent) {
65+
isFirstDeleteEvent = firstDeleteEvent;
66+
}
67+
68+
public boolean isThrowExceptionOnFirstDeleteEvent() {
69+
return throwExceptionOnFirstDeleteEvent;
70+
}
71+
72+
public void setThrowExceptionOnFirstDeleteEvent(boolean throwExceptionOnFirstDeleteEvent) {
73+
this.throwExceptionOnFirstDeleteEvent = throwExceptionOnFirstDeleteEvent;
74+
}
4675
}

operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/alleventmode/cleaner/AllEventCleanerIT.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ public class AllEventCleanerIT {
1818
LocallyRunOperatorExtension extension =
1919
LocallyRunOperatorExtension.builder().withReconciler(new AllEventCleanerReconciler()).build();
2020

21+
// todo delete event without finalizer
2122
@Test
2223
void eventsPresent() {
2324
var reconciler = extension.getReconcilerOfType(AllEventCleanerReconciler.class);
@@ -26,7 +27,7 @@ void eventsPresent() {
2627
await()
2728
.untilAsserted(
2829
() -> {
29-
assertThat(reconciler.isResourceEvent()).isTrue();
30+
assertThat(reconciler.isResourceEventPresent()).isTrue();
3031
assertThat(getResource().hasFinalizer(FINALIZER)).isTrue();
3132
});
3233

@@ -37,7 +38,7 @@ void eventsPresent() {
3738
() -> {
3839
var r = getResource();
3940
assertThat(r).isNull();
40-
assertThat(reconciler.isDeleteEvent()).isTrue();
41+
assertThat(reconciler.isDeleteEventPresent()).isTrue();
4142
assertThat(reconciler.isEventOnMarkedForDeletion()).isTrue();
4243
});
4344
}

operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/alleventmode/cleaner/AllEventCleanerReconciler.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ public UpdateControl<AllEventCleanerCustomResource> reconcile(
1919

2020
increaseEventCount();
2121
if (!resource.isMarkedForDeletion()) {
22-
setResourceEvent(true);
22+
setResourceEventPresent(true);
2323
}
2424

2525
if (!resource.hasFinalizer(FINALIZER)) {
@@ -46,7 +46,7 @@ public DeleteControl cleanup(
4646
}
4747

4848
if (context.isDeleteEventPresent()) {
49-
setDeleteEvent(true);
49+
setDeleteEventPresent(true);
5050
}
5151
// todo handle this document
5252
return DeleteControl.defaultDelete();

operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/alleventmode/onlyreconcile/AllEventIT.java

Lines changed: 44 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package io.javaoperatorsdk.operator.baseapi.alleventmode.onlyreconcile;
22

3+
import org.junit.jupiter.api.Disabled;
34
import org.junit.jupiter.api.Test;
45
import org.junit.jupiter.api.extension.RegisterExtension;
56

@@ -27,7 +28,7 @@ void eventsPresent() {
2728
await()
2829
.untilAsserted(
2930
() -> {
30-
assertThat(reconciler.isResourceEvent()).isTrue();
31+
assertThat(reconciler.isResourceEventPresent()).isTrue();
3132
assertThat(getResource().hasFinalizer(FINALIZER)).isTrue();
3233
});
3334

@@ -38,11 +39,52 @@ void eventsPresent() {
3839
() -> {
3940
var r = getResource();
4041
assertThat(r).isNull();
41-
assertThat(reconciler.isDeleteEvent()).isTrue();
42+
assertThat(reconciler.isDeleteEventPresent()).isTrue();
4243
assertThat(reconciler.isEventOnMarkedForDeletion()).isTrue();
4344
});
4445
}
4546

47+
@Test
48+
void deleteEventPresentWithoutFinalizer() {
49+
var reconciler = extension.getReconcilerOfType(AllEventReconciler.class);
50+
reconciler.setUseFinalizer(false);
51+
extension.serverSideApply(testResource());
52+
53+
await().untilAsserted(() -> assertThat(reconciler.isResourceEventPresent()).isTrue());
54+
55+
extension.delete(getResource());
56+
57+
await()
58+
.untilAsserted(
59+
() -> {
60+
var r = getResource();
61+
assertThat(r).isNull();
62+
assertThat(reconciler.isDeleteEventPresent()).isTrue();
63+
});
64+
}
65+
66+
@Disabled("fix")
67+
@Test
68+
void retriesExceptionOnDeleteEvent() {
69+
var reconciler = extension.getReconcilerOfType(AllEventReconciler.class);
70+
reconciler.setUseFinalizer(false);
71+
reconciler.setThrowExceptionOnFirstDeleteEvent(true);
72+
73+
extension.serverSideApply(testResource());
74+
75+
await().untilAsserted(() -> assertThat(reconciler.isResourceEventPresent()).isTrue());
76+
77+
extension.delete(getResource());
78+
79+
await()
80+
.untilAsserted(
81+
() -> {
82+
var r = getResource();
83+
assertThat(r).isNull();
84+
assertThat(reconciler.isDeleteEventPresent()).isTrue();
85+
});
86+
}
87+
4688
AllEventCustomResource getResource() {
4789
return extension.get(AllEventCustomResource.class, TEST);
4890
}

operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/alleventmode/onlyreconcile/AllEventReconciler.java

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,25 +18,32 @@ public UpdateControl<AllEventCustomResource> reconcile(
1818
increaseEventCount();
1919

2020
if (!resource.isMarkedForDeletion()) {
21-
setResourceEvent(true);
21+
setResourceEventPresent(true);
2222
}
2323

24-
if (!resource.hasFinalizer(FINALIZER)) {
24+
if (getUseFinalizer() && !resource.hasFinalizer(FINALIZER)) {
2525
resource.addFinalizer(FINALIZER);
2626
context.getClient().resource(resource).update();
2727
return UpdateControl.noUpdate();
2828
}
2929

3030
if (resource.isMarkedForDeletion() && !context.isDeleteEventPresent()) {
3131
setEventOnMarkedForDeletion(true);
32-
if (resource.hasFinalizer(FINALIZER)) {
32+
if (getUseFinalizer() && resource.hasFinalizer(FINALIZER)) {
3333
resource.removeFinalizer(FINALIZER);
3434
context.getClient().resource(resource).update();
3535
}
3636
}
3737

38+
if (context.isDeleteEventPresent()
39+
&& isFirstDeleteEvent()
40+
&& isThrowExceptionOnFirstDeleteEvent()) {
41+
isFirstDeleteEvent = false;
42+
throw new RuntimeException("On purpose exception");
43+
}
44+
3845
if (context.isDeleteEventPresent()) {
39-
setDeleteEvent(true);
46+
setDeleteEventPresent(true);
4047
}
4148

4249
return UpdateControl.noUpdate();

0 commit comments

Comments
 (0)