Skip to content

Commit e89fbd4

Browse files
committedJan 18, 2024
allow to force delete resources (#572)
Signed-off-by: Andre Dietisheim <[email protected]>
1 parent 24b0698 commit e89fbd4

File tree

13 files changed

+158
-60
lines changed

13 files changed

+158
-60
lines changed
 

‎src/main/kotlin/com/redhat/devtools/intellij/kubernetes/actions/DeleteResourceAction.kt

+42-8
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
******************************************************************************/
1111
package com.redhat.devtools.intellij.kubernetes.actions
1212

13+
import com.intellij.icons.AllIcons
1314
import com.intellij.openapi.actionSystem.AnActionEvent
1415
import com.intellij.openapi.diagnostic.logger
1516
import com.intellij.openapi.progress.Progressive
@@ -23,6 +24,7 @@ import com.redhat.devtools.intellij.kubernetes.telemetry.TelemetryService
2324
import com.redhat.devtools.intellij.kubernetes.telemetry.TelemetryService.PROP_RESOURCE_KIND
2425
import com.redhat.devtools.intellij.kubernetes.telemetry.TelemetryService.getKinds
2526
import io.fabric8.kubernetes.api.model.HasMetadata
27+
import javax.swing.JCheckBox
2628
import javax.swing.tree.TreePath
2729

2830
class DeleteResourceAction: StructureTreeAction() {
@@ -34,15 +36,16 @@ class DeleteResourceAction: StructureTreeAction() {
3436
override fun actionPerformed(event: AnActionEvent?, path: Array<out TreePath>?, selected: Array<out Any>?) {
3537
val model = getResourceModel() ?: return
3638
val toDelete = selected?.map { it.getDescriptor()?.element as HasMetadata} ?: return
37-
if (!userConfirmed(toDelete)) {
39+
val operation = userConfirms(toDelete)
40+
if (operation.isNo) {
3841
return
3942
}
4043
run("Deleting ${toMessage(toDelete, 30)}...", true,
4144
Progressive {
4245
val telemetry = TelemetryService.instance.action("delete resource")
4346
.property(PROP_RESOURCE_KIND, getKinds(toDelete))
4447
try {
45-
model.delete(toDelete)
48+
model.delete(toDelete, operation.isForce)
4649
Notification().info("Resources Deleted", toMessage(toDelete, 30))
4750
telemetry.success().send()
4851
} catch (e: MultiResourceException) {
@@ -54,12 +57,18 @@ class DeleteResourceAction: StructureTreeAction() {
5457
})
5558
}
5659

57-
private fun userConfirmed(resources: List<HasMetadata>): Boolean {
58-
val answer = Messages.showYesNoDialog(
60+
private fun userConfirms(resources: List<HasMetadata>): DeleteOperation {
61+
val answer = Messages.showCheckboxMessageDialog(
5962
"Delete ${toMessage(resources, 30)}?",
60-
"Delete resources?",
61-
Messages.getQuestionIcon())
62-
return answer == Messages.OK
63+
"Delete",
64+
arrayOf(Messages.getYesButton(), Messages.getNoButton()),
65+
"Force (immediate)",
66+
false,
67+
0,
68+
0,
69+
AllIcons.General.QuestionDialog,
70+
DeleteOperation.processDialogReturnValue)
71+
return DeleteOperation(answer)
6372
}
6473

6574
override fun isVisible(selected: Array<out Any>?): Boolean {
@@ -72,4 +81,29 @@ class DeleteResourceAction: StructureTreeAction() {
7281
return element != null
7382
&& !hasDeletionTimestamp(element)
7483
}
75-
}
84+
85+
private class DeleteOperation(private val dialogReturn: Int) {
86+
87+
companion object {
88+
const val FORCE_MASK = 0b1000000
89+
90+
val processDialogReturnValue = { exitCode: Int, checkbox: JCheckBox ->
91+
if (exitCode == -1) {
92+
Messages.CANCEL
93+
} else {
94+
exitCode or (if (checkbox.isSelected) FORCE_MASK else 0)
95+
}
96+
}
97+
}
98+
99+
val isForce: Boolean
100+
get() {
101+
return (dialogReturn and FORCE_MASK) == FORCE_MASK
102+
}
103+
104+
val isNo: Boolean
105+
get() {
106+
return (dialogReturn and Messages.NO) == Messages.NO
107+
}
108+
}
109+
}

‎src/main/kotlin/com/redhat/devtools/intellij/kubernetes/model/ResourceModel.kt

+3-3
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ interface IResourceModel {
5252
fun stopWatch(kind: ResourceKind<out HasMetadata>)
5353
fun stopWatch(definition: CustomResourceDefinition)
5454
fun invalidate(element: Any?)
55-
fun delete(resources: List<HasMetadata>)
55+
fun delete(resources: List<HasMetadata>, force: Boolean)
5656
fun canWatchLog(resource: HasMetadata): Boolean
5757
fun watchLog(container: Container, resource: HasMetadata, out: OutputStream): LogWatch?
5858
fun stopWatch(watch: LogWatch): Boolean
@@ -189,8 +189,8 @@ open class ResourceModel : IResourceModel {
189189
allContexts.current?.replaced(resource)
190190
}
191191

192-
override fun delete(resources: List<HasMetadata>) {
193-
allContexts.current?.delete(resources)
192+
override fun delete(resources: List<HasMetadata>, force: Boolean) {
193+
allContexts.current?.delete(resources, force)
194194
}
195195

196196
override fun canWatchLog(resource: HasMetadata): Boolean {

‎src/main/kotlin/com/redhat/devtools/intellij/kubernetes/model/context/ActiveContext.kt

+4-4
Original file line numberDiff line numberDiff line change
@@ -434,14 +434,14 @@ abstract class ActiveContext<N : HasMetadata, C : KubernetesClient>(
434434
.filter { it.namespace == namespace }
435435
}
436436

437-
override fun delete(resources: List<HasMetadata>) {
437+
override fun delete(resources: List<HasMetadata>, force: Boolean) {
438438
logger<ActiveContext<*, *>>().debug("Deleting ${toMessage(resources)}.")
439439
val exceptions = resources
440440
.distinct()
441441
.groupBy { Pair(ResourceKind.create(it), ResourcesIn.valueOf(it, getCurrentNamespace())) }
442442
.mapNotNull {
443443
try {
444-
delete(it.key.first, it.key.second, it.value)
444+
delete(it.key.first, it.key.second, it.value, force)
445445
modelChange.fireModified(it.value)
446446
null
447447
} catch (e: KubernetesClientException) {
@@ -454,7 +454,7 @@ abstract class ActiveContext<N : HasMetadata, C : KubernetesClient>(
454454
}
455455
}
456456

457-
private fun delete(kind: ResourceKind<out HasMetadata>, scope: ResourcesIn, resources: List<HasMetadata>): Collection<HasMetadata> {
457+
private fun delete(kind: ResourceKind<out HasMetadata>, scope: ResourcesIn, resources: List<HasMetadata>, force: Boolean): Collection<HasMetadata> {
458458
val operator = getOperator(kind, scope)
459459
if (operator == null) {
460460
logger<ActiveContext<*,*>>().warn(
@@ -463,7 +463,7 @@ abstract class ActiveContext<N : HasMetadata, C : KubernetesClient>(
463463
return emptyList()
464464
}
465465
try {
466-
val deleted = operator.delete(resources)
466+
val deleted = operator.delete(resources, force)
467467
return if (deleted) {
468468
resources.forEach { setWillBeDeleted(it) }
469469
resources

‎src/main/kotlin/com/redhat/devtools/intellij/kubernetes/model/context/IActiveContext.kt

+5-1
Original file line numberDiff line numberDiff line change
@@ -100,10 +100,14 @@ interface IActiveContext<N: HasMetadata, C: KubernetesClient>: IContext {
100100
* Returns `false` otherwise.
101101
*/
102102
fun isCurrentNamespace(namespace: String): Boolean
103+
103104
/**
104105
* Deletes the given resources.
106+
*
107+
* @param resources the resources to delete
108+
* @param force whether deletion should be forced (immediate deletion, no grace period)
105109
*/
106-
fun delete(resources: List<HasMetadata>)
110+
fun delete(resources: List<HasMetadata>, force: Boolean)
107111

108112
/**
109113
* Returns all resources of the given kind in the given scope.

‎src/main/kotlin/com/redhat/devtools/intellij/kubernetes/model/resource/AbstractResourceOperator.kt

+26-4
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@ import com.redhat.devtools.intellij.kubernetes.model.util.isSameResource
1515
import io.fabric8.kubernetes.api.model.HasMetadata
1616
import io.fabric8.kubernetes.client.Client
1717
import io.fabric8.kubernetes.client.KubernetesClient
18+
import io.fabric8.kubernetes.client.PropagationPolicyConfigurable
19+
import io.fabric8.kubernetes.client.dsl.Deletable
20+
import io.fabric8.kubernetes.client.dsl.ListVisitFromServerGetDeleteRecreateWaitApplicable
21+
import io.fabric8.kubernetes.client.dsl.Resource
1822

1923
abstract class AbstractResourceOperator<R : HasMetadata, C : Client>(protected val client: C) : IResourceOperator<R> {
2024

@@ -77,11 +81,13 @@ abstract class AbstractResourceOperator<R : HasMetadata, C : Client>(protected v
7781
return true
7882
}
7983

80-
override fun delete(resources: List<HasMetadata>): Boolean {
84+
override fun delete(resources: List<HasMetadata>, force: Boolean): Boolean {
8185
@Suppress("UNCHECKED_CAST")
8286
val toDelete = resources as? List<R> ?: return false
83-
val status = client.adapt(KubernetesClient::class.java)
84-
.resourceList(toDelete)
87+
val resourceList = client.adapt(KubernetesClient::class.java)
88+
.resourceList(toDelete) ?: return false
89+
val status = resourceList
90+
.immediate(force)
8591
.delete()
8692
return status.size == toDelete.size
8793
}
@@ -90,7 +96,23 @@ abstract class AbstractResourceOperator<R : HasMetadata, C : Client>(protected v
9096
return kind.clazz.isAssignableFrom(resource::class.java)
9197
}
9298

93-
override fun close() {
99+
private fun <T: HasMetadata> ListVisitFromServerGetDeleteRecreateWaitApplicable<T>.immediate(force: Boolean): PropagationPolicyConfigurable<out Deletable> {
100+
return if (force) {
101+
withGracePeriod(0)
102+
} else {
103+
this
104+
}
105+
}
106+
107+
protected fun <T: HasMetadata> Resource<T>?.immediate(force: Boolean): PropagationPolicyConfigurable<out Deletable>? {
108+
return if (force) {
109+
this?.withGracePeriod(0)
110+
} else {
111+
this
112+
}
113+
}
114+
115+
override fun close() {
94116
client.close()
95117
}
96118
}

‎src/main/kotlin/com/redhat/devtools/intellij/kubernetes/model/resource/IResourceOperator.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ interface IResourceOperator<R: HasMetadata>: Closeable {
2727
fun replaced(resource: HasMetadata): Boolean
2828
fun added(resource: HasMetadata): Boolean
2929
fun removed(resource: HasMetadata): Boolean
30-
fun delete(resources: List<HasMetadata>): Boolean
30+
fun delete(resources: List<HasMetadata>, force: Boolean): Boolean
3131
fun replace(resource: HasMetadata): HasMetadata?
3232
fun create(resource: HasMetadata): HasMetadata?
3333
fun get(resource: HasMetadata): HasMetadata?

‎src/main/kotlin/com/redhat/devtools/intellij/kubernetes/model/resource/kubernetes/custom/NamespacedCustomResourceOperator.kt

+9-6
Original file line numberDiff line numberDiff line change
@@ -58,20 +58,23 @@ open class NamespacedCustomResourceOperator(
5858
?.watch(typedWatcher)
5959
}
6060

61-
override fun delete(resources: List<HasMetadata>): Boolean {
61+
override fun delete(resources: List<HasMetadata>, force: Boolean): Boolean {
6262
@Suppress("UNCHECKED_CAST")
6363
val toDelete = resources as? List<GenericKubernetesResource> ?: return false
6464
return toDelete.stream()
65-
.map { delete(it) }
65+
.map { delete(it, force) }
6666
.reduce(false) { thisDelete, thatDelete -> thisDelete || thatDelete }
6767
}
6868

69-
private fun delete(resource: HasMetadata): Boolean {
69+
private fun delete(resource: HasMetadata, force: Boolean): Boolean {
7070
val inNamespace = resourceNamespaceOrCurrent(resource)
71-
getOperation()
71+
val operation = getOperation()
7272
?.inNamespace(inNamespace)
7373
?.withName(resource.metadata.name)
74-
?.delete()
74+
?: return false
75+
operation
76+
.immediate(force)
77+
?.delete()
7578
return true
7679
}
7780

@@ -103,4 +106,4 @@ open class NamespacedCustomResourceOperator(
103106
return client.genericKubernetesResources(context)
104107
}
105108

106-
}
109+
}

‎src/main/kotlin/com/redhat/devtools/intellij/kubernetes/model/resource/kubernetes/custom/NonNamespacedCustomResourceOperator.kt

+9-7
Original file line numberDiff line numberDiff line change
@@ -49,18 +49,20 @@ class NonNamespacedCustomResourceOperator(
4949
?.watch(typedWatcher)
5050
}
5151

52-
override fun delete(resources: List<HasMetadata>): Boolean {
52+
override fun delete(resources: List<HasMetadata>, force: Boolean): Boolean {
5353
@Suppress("UNCHECKED_CAST")
5454
val toDelete = resources as? List<GenericKubernetesResource> ?: return false
5555
return toDelete.stream()
56-
.map { delete(it.metadata.name) }
56+
.map { delete(it.metadata.name, force) }
5757
.reduce(false ) { thisDelete, thatDelete -> thisDelete || thatDelete }
5858
}
5959

60-
private fun delete(name: String): Boolean {
61-
getOperation()
62-
?.withName(name)
63-
?.delete()
60+
private fun delete(name: String, force: Boolean): Boolean {
61+
val operation = getOperation()
62+
?.withName(name) ?: return false
63+
operation
64+
.immediate(force)
65+
?.delete()
6466
return true
6567
}
6668

@@ -85,4 +87,4 @@ class NonNamespacedCustomResourceOperator(
8587
override fun getOperation(): NonNamespacedOperation<GenericKubernetesResource>? {
8688
return client.genericKubernetesResources(context)
8789
}
88-
}
90+
}

‎src/test/kotlin/com/redhat/devtools/intellij/kubernetes/model/context/KubernetesContextTest.kt

+28-18
Original file line numberDiff line numberDiff line change
@@ -334,50 +334,60 @@ class KubernetesContextTest {
334334
// given
335335
val toDelete = listOf(POD2)
336336
// when
337-
context.delete(toDelete)
337+
context.delete(toDelete, false)
338338
// then
339-
verify(namespacedPodsOperator).delete(toDelete)
339+
verify(namespacedPodsOperator).delete(toDelete, false)
340+
}
341+
342+
@Test
343+
fun `#delete should call operator#delete with force = true`() {
344+
// given
345+
val toDelete = listOf(POD2)
346+
// when
347+
context.delete(toDelete, true)
348+
// then
349+
verify(namespacedPodsOperator).delete(toDelete, true)
340350
}
341351

342352
@Test
343353
fun `#delete should not call operator#delete if there is no operator for it`() {
344354
// given
345355
val toDelete = listOf(resource<HasMetadata>("lord sith", "ns1", "uid", "v1"))
346356
// when
347-
context.delete(toDelete)
357+
context.delete(toDelete, false)
348358
// then
349-
verify(namespacedPodsOperator, never()).delete(toDelete)
359+
verify(namespacedPodsOperator, never()).delete(any(), any())
350360
}
351361

352362
@Test
353363
fun `#delete should only delete 1 resource if it is given twice the same resource`() {
354364
// given
355365
val toDelete = listOf(POD2, POD2)
356366
// when
357-
context.delete(toDelete)
367+
context.delete(toDelete, false)
358368
// then
359-
verify(namespacedPodsOperator, times(1)).delete(eq(listOf(POD2)))
369+
verify(namespacedPodsOperator, times(1)).delete(eq(listOf(POD2)), eq(false))
360370
}
361371

362372
@Test
363373
fun `#delete should delete in 2 separate operators if resources of 2 kinds are given`() {
364374
// given
365375
val toDelete = listOf(POD2, NAMESPACE2)
366376
// when
367-
context.delete(toDelete)
377+
context.delete(toDelete, false)
368378
// then
369-
verify(namespacedPodsOperator, times(1)).delete(eq(listOf(POD2)))
370-
verify(namespacesOperator, times(1)).delete(eq(listOf(NAMESPACE2)))
379+
verify(namespacedPodsOperator, times(1)).delete(eq(listOf(POD2)), eq(false))
380+
verify(namespacesOperator, times(1)).delete(eq(listOf(NAMESPACE2)), eq(false))
371381
}
372382

373383
@Test
374384
fun `#delete should fire if resource was deleted`() {
375385
// given
376386
val toDelete = listOf(POD2)
377-
whenever(allPodsOperator.delete(any()))
387+
whenever(allPodsOperator.delete(any(), any()))
378388
.thenReturn(true)
379389
// when
380-
context.delete(toDelete)
390+
context.delete(toDelete, false)
381391
// then
382392
verify(modelChange).fireModified(toDelete)
383393
}
@@ -387,7 +397,7 @@ class KubernetesContextTest {
387397
// given
388398
val toDelete = listOf(POD2, POD3)
389399
// when
390-
context.delete(toDelete)
400+
context.delete(toDelete, false)
391401
// then
392402
verify(POD2.metadata, atLeastOnce()).deletionTimestamp = any()
393403
verify(POD3.metadata, atLeastOnce()).deletionTimestamp = any()
@@ -397,10 +407,10 @@ class KubernetesContextTest {
397407
fun `#delete should throw if resource was NOT deleted`() {
398408
// given
399409
val toDelete = listOf(POD2)
400-
whenever(namespacedPodsOperator.delete(any()))
410+
whenever(namespacedPodsOperator.delete(any(), any()))
401411
.thenReturn(false)
402412
// when
403-
context.delete(toDelete)
413+
context.delete(toDelete, false)
404414
// then
405415
// expect exception
406416
}
@@ -409,11 +419,11 @@ class KubernetesContextTest {
409419
fun `#delete should throw for operator that failed, not successful ones`() {
410420
// given
411421
val toDelete = listOf(POD2, NAMESPACE2)
412-
whenever(namespacedPodsOperator.delete(any()))
422+
whenever(namespacedPodsOperator.delete(any(), any()))
413423
.thenReturn(false)
414424
// when
415425
val ex = try {
416-
context.delete(toDelete)
426+
context.delete(toDelete, false)
417427
null
418428
} catch (e: MultiResourceException) {
419429
e
@@ -428,11 +438,11 @@ class KubernetesContextTest {
428438
fun `#delete should NOT fire if resource was NOT deleted`() {
429439
// given
430440
val toDelete = listOf(POD2)
431-
whenever(namespacedPodsOperator.delete(any()))
441+
whenever(namespacedPodsOperator.delete(any(), any()))
432442
.thenReturn(false)
433443
// when
434444
try {
435-
context.delete(toDelete)
445+
context.delete(toDelete, false)
436446
} catch (e: MultiResourceException) {
437447
// ignore expected exception
438448
}

‎src/test/kotlin/com/redhat/devtools/intellij/kubernetes/model/mocks/ClientMocks.kt

+9
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ import io.fabric8.kubernetes.client.dsl.NonNamespaceOperation
5757
import io.fabric8.kubernetes.client.dsl.PodResource
5858
import io.fabric8.kubernetes.client.dsl.Resource
5959
import io.fabric8.kubernetes.client.dsl.internal.HasMetadataOperation
60+
import io.fabric8.kubernetes.client.extension.ExtensibleResource
6061
import java.net.URL
6162

6263

@@ -149,18 +150,26 @@ object ClientMocks {
149150
statusDetails: List<StatusDetails> = statusDetails(1),
150151
client: KubernetesClient
151152
) {
153+
val extensibleResource: ExtensibleResource<HasMetadata> = mock {
154+
on { delete() } doReturn statusDetails
155+
}
156+
152157
val resourceListInNamespaceOp: ListVisitFromServerGetDeleteRecreateWaitApplicable<HasMetadata> = mock {
153158
on { delete() } doReturn statusDetails
154159
on { replace() } doReturn resourceList
155160
on { create() } doReturn resourceList
156161
on { get() } doReturn resourceList
162+
on { withGracePeriod(any()) } doReturn extensibleResource
157163
}
164+
158165
/** [KubernetesClient.resourceList] */
159166
val resourceListOperation: NamespaceListVisitFromServerGetDeleteRecreateWaitApplicable<HasMetadata> = mock {
160167
on { inNamespace(any()) } doReturn resourceListInNamespaceOp
161168
on { delete() } doReturn statusDetails
162169
on { replace() } doReturn resourceList
170+
on { withGracePeriod(any()) } doReturn extensibleResource
163171
}
172+
164173
doReturn(resourceListOperation)
165174
.whenever(client).resourceList(any<Collection<HasMetadata>>())
166175
}

‎src/test/kotlin/com/redhat/devtools/intellij/kubernetes/model/mocks/Mocks.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ object Mocks {
163163
.whenever(mock).watchAll(any())
164164

165165
doReturn(deleteSuccess)
166-
.whenever(mock).delete(any())
166+
.whenever(mock).delete(any(), any())
167167
doReturn(getReturnValue)
168168
.whenever(mock).get(any())
169169
}
@@ -183,7 +183,7 @@ object Mocks {
183183
on { watchAll(any()) } doAnswer { invocation ->
184184
watchOperation.invoke(invocation.getArgument(0))
185185
}
186-
on { delete(any()) } doReturn deleteSuccess
186+
on { delete(any(), any()) } doReturn deleteSuccess
187187
}
188188
}
189189

‎src/test/kotlin/com/redhat/devtools/intellij/kubernetes/model/resource/kubernetes/NamespacedPodsOperatorTest.kt

+18-4
Original file line numberDiff line numberDiff line change
@@ -322,25 +322,39 @@ class NamespacedPodsOperatorTest {
322322
}
323323

324324
@Test
325-
fun `#delete(List) deletes given resources`() {
325+
fun `#delete(List, false) deletes given resources`() {
326326
// given
327327
val toDelete = listOf(POD2)
328328
resourceListOperation(resourceList = toDelete, client = client.get())
329329
// when
330-
operator.delete(toDelete)
330+
operator.delete(toDelete, false)
331331
// then
332332
verify(client.get().adapt(KubernetesClient::class.java)
333333
.resourceList(toDelete))
334334
.delete()
335335
}
336336

337+
@Test
338+
fun `#delete(List, true) deletes given resources with grace period 0`() {
339+
// given
340+
val toDelete = listOf(POD2)
341+
resourceListOperation(resourceList = toDelete, client = client.get())
342+
// when
343+
operator.delete(toDelete, true)
344+
// then
345+
verify(client.get().adapt(KubernetesClient::class.java)
346+
.resourceList(toDelete)
347+
.withGracePeriod(0))
348+
.delete()
349+
}
350+
337351
@Test
338352
fun `#delete(List) returns true if client could delete`() {
339353
// given
340354
val toDelete = listOf(POD2)
341355
resourceListOperation(resourceList = toDelete, client = client.get())
342356
// when
343-
val success = operator.delete(toDelete)
357+
val success = operator.delete(toDelete, false)
344358
// then
345359
assertThat(success).isTrue
346360
}
@@ -351,7 +365,7 @@ class NamespacedPodsOperatorTest {
351365
val toDelete = listOf(POD2)
352366
resourceListOperation(resourceList = toDelete, statusDetails = emptyList(), client = client.get())
353367
// when
354-
val success = operator.delete(toDelete)
368+
val success = operator.delete(toDelete, false)
355369
// then
356370
assertThat(success).isFalse
357371
}

‎src/test/kotlin/com/redhat/devtools/intellij/kubernetes/model/resource/kubernetes/custom/NamespacedCustomResourceOperatorTest.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ class NamespacedCustomResourceOperatorTest {
152152
val namespaceUsed = ArgumentCaptor.forClass(String::class.java)
153153
assertThat(operator.namespace).isNotEqualTo(customResource.metadata.namespace)
154154
// when
155-
operator.delete(listOf(customResource))
155+
operator.delete(listOf(customResource), false)
156156
// then
157157
verify(op).inNamespace(namespaceUsed.capture())
158158
assertThat(namespaceUsed.value).isEqualTo(customResource.metadata.namespace)
@@ -166,7 +166,7 @@ class NamespacedCustomResourceOperatorTest {
166166
assertThat(operator.namespace).isNotNull()
167167
val namespaceUsed = ArgumentCaptor.forClass(String::class.java)
168168
// when
169-
operator.delete(listOf(noNamespace))
169+
operator.delete(listOf(noNamespace), false)
170170
// then
171171
verify(op).inNamespace(namespaceUsed.capture())
172172
assertThat(namespaceUsed.value).isEqualTo(operator.namespace)

0 commit comments

Comments
 (0)
Please sign in to comment.