Skip to content

Commit 0260dfb

Browse files
committed
update resource and status impl, unit test
1 parent da6f814 commit 0260dfb

File tree

3 files changed

+27
-1
lines changed

3 files changed

+27
-1
lines changed

operator-framework/src/main/java/io/javaoperatorsdk/operator/api/UpdateControl.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,11 @@ public static <T extends CustomResource> UpdateControl<T> updateStatusSubResourc
2727
return new UpdateControl<>(customResource, true, false);
2828
}
2929

30+
public static <T extends CustomResource>
31+
UpdateControl<T> updateCustomResourceAndStatusSubResource(T customResource) {
32+
return new UpdateControl<>(customResource, true, true);
33+
}
34+
3035
public static <T extends CustomResource> UpdateControl<T> noUpdate() {
3136
return new UpdateControl<>(null, false, false);
3237
}
@@ -42,4 +47,8 @@ public boolean isUpdateStatusSubResource() {
4247
public boolean isUpdateCustomResource() {
4348
return updateCustomResource;
4449
}
50+
51+
public boolean isUpdateCustomResourceAndStatusSubResource() {
52+
return updateCustomResource && updateStatusSubResource;
53+
}
4554
}

operator-framework/src/main/java/io/javaoperatorsdk/operator/processing/EventDispatcher.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,12 +103,16 @@ private PostExecutionControl handleCreateOrUpdate(
103103
UpdateControl<? extends CustomResource> updateControl =
104104
controller.createOrUpdateResource(resource, context);
105105
CustomResource updatedCustomResource = null;
106-
if (updateControl.isUpdateStatusSubResource()) {
106+
if (updateControl.isUpdateCustomResourceAndStatusSubResource()) {
107+
updatedCustomResource = updateCustomResource(updateControl.getCustomResource());
108+
updatedCustomResource = customResourceFacade.updateStatus(updatedCustomResource);
109+
} else if (updateControl.isUpdateStatusSubResource()) {
107110
updatedCustomResource =
108111
customResourceFacade.updateStatus(updateControl.getCustomResource());
109112
} else if (updateControl.isUpdateCustomResource()) {
110113
updatedCustomResource = updateCustomResource(updateControl.getCustomResource());
111114
}
115+
112116
if (updatedCustomResource != null) {
113117
return PostExecutionControl.customResourceUpdated(updatedCustomResource);
114118
} else {

operator-framework/src/test/java/io/javaoperatorsdk/operator/EventDispatcherTest.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,19 @@ void updatesOnlyStatusSubResource() {
7272
verify(customResourceFacade, never()).replaceWithLock(any());
7373
}
7474

75+
@Test
76+
void updatesBothResourceAndStatus() {
77+
when(controller.createOrUpdateResource(eq(testCustomResource), any()))
78+
.thenReturn(UpdateControl.updateCustomResourceAndStatusSubResource(testCustomResource));
79+
when(customResourceFacade.replaceWithLock(testCustomResource)).thenReturn(testCustomResource);
80+
81+
eventDispatcher.handleExecution(
82+
executionScopeWithCREvent(Watcher.Action.MODIFIED, testCustomResource));
83+
84+
verify(customResourceFacade, times(1)).replaceWithLock(testCustomResource);
85+
verify(customResourceFacade, times(1)).updateStatus(testCustomResource);
86+
}
87+
7588
@Test
7689
void callCreateOrUpdateOnModifiedResource() {
7790
eventDispatcher.handleExecution(

0 commit comments

Comments
 (0)