From 94942fed29d842f584013aabd350df77bd5ebdfd Mon Sep 17 00:00:00 2001 From: etrandafir93 Date: Sun, 21 Sep 2025 16:55:08 +0300 Subject: [PATCH 1/3] BAEL-5956: micrometer version --- .../spring-boot-3-observation/pom.xml | 5 ++ .../micrometer/test/FooApplication.java | 13 ++++ .../baeldung/micrometer/test/FooService.java | 38 ++++++++++++ .../test/MicrometerIntegrationTest.java | 59 +++++++++++++++++++ .../micrometer/test/MicrometerUnitTest.java | 45 ++++++++++++++ 5 files changed, 160 insertions(+) create mode 100644 spring-boot-modules/spring-boot-3-observation/src/main/java/com/baeldung/micrometer/test/FooApplication.java create mode 100644 spring-boot-modules/spring-boot-3-observation/src/main/java/com/baeldung/micrometer/test/FooService.java create mode 100644 spring-boot-modules/spring-boot-3-observation/src/test/java/com/baeldung/micrometer/test/MicrometerIntegrationTest.java create mode 100644 spring-boot-modules/spring-boot-3-observation/src/test/java/com/baeldung/micrometer/test/MicrometerUnitTest.java diff --git a/spring-boot-modules/spring-boot-3-observation/pom.xml b/spring-boot-modules/spring-boot-3-observation/pom.xml index a67f0c3a2450..090693e926bd 100644 --- a/spring-boot-modules/spring-boot-3-observation/pom.xml +++ b/spring-boot-modules/spring-boot-3-observation/pom.xml @@ -32,6 +32,11 @@ micrometer-tracing-bridge-brave + + io.micrometer + micrometer-test + test + io.micrometer micrometer-observation-test diff --git a/spring-boot-modules/spring-boot-3-observation/src/main/java/com/baeldung/micrometer/test/FooApplication.java b/spring-boot-modules/spring-boot-3-observation/src/main/java/com/baeldung/micrometer/test/FooApplication.java new file mode 100644 index 000000000000..a1a1949de362 --- /dev/null +++ b/spring-boot-modules/spring-boot-3-observation/src/main/java/com/baeldung/micrometer/test/FooApplication.java @@ -0,0 +1,13 @@ +package com.baeldung.micrometer.test; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class FooApplication { + + public static void main(String[] args) { + SpringApplication.run(FooApplication.class, args); + } + +} diff --git a/spring-boot-modules/spring-boot-3-observation/src/main/java/com/baeldung/micrometer/test/FooService.java b/spring-boot-modules/spring-boot-3-observation/src/main/java/com/baeldung/micrometer/test/FooService.java new file mode 100644 index 000000000000..fb5636f9ead4 --- /dev/null +++ b/spring-boot-modules/spring-boot-3-observation/src/main/java/com/baeldung/micrometer/test/FooService.java @@ -0,0 +1,38 @@ +package com.baeldung.micrometer.test; + +import java.util.concurrent.ThreadLocalRandom; + +import org.springframework.stereotype.Service; + +import io.micrometer.core.instrument.MeterRegistry; + +@Service +public class FooService { + + private final MeterRegistry registry; + + public FooService(MeterRegistry registry) { + this.registry = registry; + } + + public int foo() { + int delayedMs = registry.timer("foo.time") + .record(this::doSomething); + + registry.counter("foo.count") + .increment(); + + return delayedMs; + } + + private int doSomething() { + int delayMs = ThreadLocalRandom.current() + .nextInt(10, 100); + try { + Thread.sleep(delayMs); + return delayMs; + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } +} diff --git a/spring-boot-modules/spring-boot-3-observation/src/test/java/com/baeldung/micrometer/test/MicrometerIntegrationTest.java b/spring-boot-modules/spring-boot-3-observation/src/test/java/com/baeldung/micrometer/test/MicrometerIntegrationTest.java new file mode 100644 index 000000000000..2b7f262b7438 --- /dev/null +++ b/spring-boot-modules/spring-boot-3-observation/src/test/java/com/baeldung/micrometer/test/MicrometerIntegrationTest.java @@ -0,0 +1,59 @@ +package com.baeldung.micrometer.test; + +import static java.time.Duration.ofMillis; +import static org.assertj.core.api.Assertions.assertThat; + +import java.util.concurrent.TimeUnit; + +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +import io.micrometer.core.instrument.MeterRegistry; + +@SpringBootTest( + classes = { FooApplication.class } +) +class MicrometerIntegrationTest { + + @Autowired + private MeterRegistry meterRegistry; + + @Autowired + private FooService fooService; + + @AfterEach + void reset() { + meterRegistry.clear(); + } + + @Test + void whenFooIsCalled_thenCounterIsIncremented() { + fooService.foo(); + fooService.foo(); + fooService.foo(); + + double invocations = meterRegistry.get("foo.count") + .counter() + .count(); + + assertThat(invocations) + .isEqualTo(3); + } + + @Test + void whenFooIsCalled_thenTimerIsUpdated() { + fooService.foo(); + fooService.foo(); + fooService.foo(); + + int totalTimeMs = (int) meterRegistry.get("foo.time") + .timer() + .totalTime(TimeUnit.MILLISECONDS); + + assertThat(ofMillis(totalTimeMs)) + .isBetween(ofMillis(30), ofMillis(400)); + } + +} diff --git a/spring-boot-modules/spring-boot-3-observation/src/test/java/com/baeldung/micrometer/test/MicrometerUnitTest.java b/spring-boot-modules/spring-boot-3-observation/src/test/java/com/baeldung/micrometer/test/MicrometerUnitTest.java new file mode 100644 index 000000000000..d22e099f2252 --- /dev/null +++ b/spring-boot-modules/spring-boot-3-observation/src/test/java/com/baeldung/micrometer/test/MicrometerUnitTest.java @@ -0,0 +1,45 @@ +package com.baeldung.micrometer.test; + +import static java.time.Duration.ofMillis; +import static org.assertj.core.api.Assertions.assertThat; + +import java.util.concurrent.TimeUnit; + +import org.junit.jupiter.api.Test; + +import io.micrometer.core.instrument.MeterRegistry; +import io.micrometer.core.instrument.simple.SimpleMeterRegistry; + +class MicrometerUnitTest { + + private MeterRegistry meterRegistry= new SimpleMeterRegistry(); + private FooService fooService = new FooService(meterRegistry); + + @Test + void whenFooIsCalled_thenCounterIsIncremented() { + fooService.foo(); + fooService.foo(); + fooService.foo(); + + double invocations = meterRegistry.get("foo.count") + .counter() + .count(); + + assertThat(invocations) + .isEqualTo(3); + } + + @Test + void whenFooIsCalled_thenTimerIsUpdated() { + fooService.foo(); + fooService.foo(); + fooService.foo(); + + int totalTimeMs = (int) meterRegistry.get("foo.time") + .timer() + .totalTime(TimeUnit.MILLISECONDS); + + assertThat(ofMillis(totalTimeMs)) + .isBetween(ofMillis(30), ofMillis(400)); + } +} From 803452277ddc51146370b66a90c1cc82d1c002cb Mon Sep 17 00:00:00 2001 From: etrandafir93 Date: Tue, 23 Sep 2025 18:17:41 +0300 Subject: [PATCH 2/3] BAEL-8605: use beforeEach block --- .../micrometer/test/MicrometerIntegrationTest.java | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/spring-boot-modules/spring-boot-3-observation/src/test/java/com/baeldung/micrometer/test/MicrometerIntegrationTest.java b/spring-boot-modules/spring-boot-3-observation/src/test/java/com/baeldung/micrometer/test/MicrometerIntegrationTest.java index 2b7f262b7438..691bf011bec8 100644 --- a/spring-boot-modules/spring-boot-3-observation/src/test/java/com/baeldung/micrometer/test/MicrometerIntegrationTest.java +++ b/spring-boot-modules/spring-boot-3-observation/src/test/java/com/baeldung/micrometer/test/MicrometerIntegrationTest.java @@ -5,16 +5,14 @@ import java.util.concurrent.TimeUnit; -import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import io.micrometer.core.instrument.MeterRegistry; -@SpringBootTest( - classes = { FooApplication.class } -) +@SpringBootTest(classes = FooApplication.class ) class MicrometerIntegrationTest { @Autowired @@ -23,7 +21,7 @@ class MicrometerIntegrationTest { @Autowired private FooService fooService; - @AfterEach + @BeforeEach void reset() { meterRegistry.clear(); } From 85978570f7522624546d3070a9ab928f336e7662 Mon Sep 17 00:00:00 2001 From: etrandafir93 Date: Tue, 23 Sep 2025 18:34:11 +0300 Subject: [PATCH 3/3] BAEL-8605: micrometer-test --- .../baeldung/micrometer/test/MicrometerUnitTest.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/spring-boot-modules/spring-boot-3-observation/src/test/java/com/baeldung/micrometer/test/MicrometerUnitTest.java b/spring-boot-modules/spring-boot-3-observation/src/test/java/com/baeldung/micrometer/test/MicrometerUnitTest.java index d22e099f2252..5c027046a5d3 100644 --- a/spring-boot-modules/spring-boot-3-observation/src/test/java/com/baeldung/micrometer/test/MicrometerUnitTest.java +++ b/spring-boot-modules/spring-boot-3-observation/src/test/java/com/baeldung/micrometer/test/MicrometerUnitTest.java @@ -9,6 +9,7 @@ import io.micrometer.core.instrument.MeterRegistry; import io.micrometer.core.instrument.simple.SimpleMeterRegistry; +import io.micrometer.core.tck.MeterRegistryAssert; class MicrometerUnitTest { @@ -42,4 +43,13 @@ void whenFooIsCalled_thenTimerIsUpdated() { assertThat(ofMillis(totalTimeMs)) .isBetween(ofMillis(30), ofMillis(400)); } + + @Test + void whenFooIsCalled_thenTimerIsRegistered() { + fooService.foo(); + + MeterRegistryAssert.assertThat(meterRegistry) + .hasTimerWithName("foo.time"); + } + }