Skip to content

Commit 183c29a

Browse files
committed
tests: add integration test for meter cleaning
1 parent 46a674a commit 183c29a

File tree

3 files changed

+123
-0
lines changed

3 files changed

+123
-0
lines changed

micrometer-support/pom.xml

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,37 @@
2626
<groupId>io.javaoperatorsdk</groupId>
2727
<artifactId>operator-framework-core</artifactId>
2828
</dependency>
29+
<dependency>
30+
<groupId>org.junit.jupiter</groupId>
31+
<artifactId>junit-jupiter-api</artifactId>
32+
<scope>test</scope>
33+
</dependency>
34+
<dependency>
35+
<groupId>org.junit.jupiter</groupId>
36+
<artifactId>junit-jupiter-engine</artifactId>
37+
<scope>test</scope>
38+
</dependency>
39+
<dependency>
40+
<groupId>org.assertj</groupId>
41+
<artifactId>assertj-core</artifactId>
42+
<scope>test</scope>
43+
</dependency>
44+
<dependency>
45+
<groupId>org.awaitility</groupId>
46+
<artifactId>awaitility</artifactId>
47+
<scope>test</scope>
48+
</dependency>
49+
<dependency>
50+
<groupId>io.javaoperatorsdk</groupId>
51+
<artifactId>operator-framework-junit-5</artifactId>
52+
<version>${project.version}</version>
53+
<scope>test</scope>
54+
</dependency>
55+
<dependency>
56+
<groupId>org.mockito</groupId>
57+
<artifactId>mockito-core</artifactId>
58+
<scope>test</scope>
59+
</dependency>
2960
</dependencies>
3061

3162
</project>

micrometer-support/src/main/java/io/javaoperatorsdk/operator/monitoring/micrometer/MicrometerMetrics.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -222,4 +222,8 @@ private void incrementCounter(ResourceID id, String counterName, Map<String, Obj
222222
metersPerResource.computeIfAbsent(id, resourceID -> new HashSet<>()).add(counter.getId());
223223
counter.increment();
224224
}
225+
226+
protected Set<Meter.Id> recordedMeterIdsFor(ResourceID resourceID) {
227+
return metersPerResource.get(resourceID);
228+
}
225229
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
package io.javaoperatorsdk.operator.monitoring.micrometer;
2+
3+
import java.util.concurrent.TimeUnit;
4+
5+
import org.junit.jupiter.api.AfterAll;
6+
import org.junit.jupiter.api.BeforeAll;
7+
import org.junit.jupiter.api.Test;
8+
import org.junit.jupiter.api.extension.RegisterExtension;
9+
10+
import io.fabric8.kubernetes.api.model.ConfigMap;
11+
import io.fabric8.kubernetes.api.model.ConfigMapBuilder;
12+
import io.javaoperatorsdk.operator.api.config.ConfigurationServiceProvider;
13+
import io.javaoperatorsdk.operator.api.reconciler.*;
14+
import io.javaoperatorsdk.operator.junit.LocallyRunOperatorExtension;
15+
import io.javaoperatorsdk.operator.processing.event.ResourceID;
16+
import io.micrometer.core.instrument.MeterRegistry;
17+
18+
import static org.assertj.core.api.Assertions.assertThat;
19+
import static org.awaitility.Awaitility.await;
20+
import static org.mockito.Mockito.mock;
21+
22+
public class MetricsCleaningOnDeleteIT {
23+
@RegisterExtension
24+
static LocallyRunOperatorExtension operator =
25+
LocallyRunOperatorExtension.builder().withReconciler(new MetricsCleaningTestReconciler())
26+
.build();
27+
28+
private static final MeterRegistry mockRegistry = mock(MeterRegistry.class);
29+
private static final int testDelay = 15;
30+
private static final TestMetrics metrics = new TestMetrics(mockRegistry, testDelay);
31+
private static final String testResourceName = "cleaning-metrics-cr";
32+
33+
@BeforeAll
34+
static void setup() {
35+
ConfigurationServiceProvider.overrideCurrent(
36+
overrider -> overrider.withMetrics(new TestMetrics(mockRegistry, testDelay)));
37+
}
38+
39+
@AfterAll
40+
static void reset() {
41+
ConfigurationServiceProvider.reset();
42+
}
43+
44+
@Test
45+
void addsFinalizerAndCallsCleanupIfCleanerImplemented() {
46+
var testResource = new ConfigMapBuilder()
47+
.withNewMetadata()
48+
.withName(testResourceName)
49+
.endMetadata()
50+
.build();
51+
final var created = operator.create(testResource);
52+
53+
var meters = metrics.recordedMeterIdsFor(ResourceID.fromResource(created));
54+
assertThat(meters).isNotNull();
55+
assertThat(meters).isNotEmpty();
56+
57+
await().until(() -> !operator.get(ConfigMap.class, testResourceName)
58+
.getMetadata().getFinalizers().isEmpty());
59+
60+
operator.delete(testResource);
61+
62+
await().until(() -> operator.get(ConfigMap.class, testResourceName) == null);
63+
64+
await().atLeast(testDelay + 3, TimeUnit.SECONDS);
65+
meters = metrics.recordedMeterIdsFor(ResourceID.fromResource(created));
66+
assertThat(meters).isNull();
67+
}
68+
69+
private static class MetricsCleaningTestReconciler
70+
implements Reconciler<ConfigMap>, Cleaner<ConfigMap> {
71+
@Override
72+
public UpdateControl<ConfigMap> reconcile(ConfigMap resource, Context<ConfigMap> context) {
73+
return UpdateControl.noUpdate();
74+
}
75+
76+
@Override
77+
public DeleteControl cleanup(ConfigMap resource, Context<ConfigMap> context) {
78+
return DeleteControl.defaultDelete();
79+
}
80+
}
81+
82+
private static class TestMetrics extends MicrometerMetrics {
83+
84+
public TestMetrics(MeterRegistry registry, int cleanUpDelayInSeconds) {
85+
super(registry, cleanUpDelayInSeconds);
86+
}
87+
}
88+
}

0 commit comments

Comments
 (0)