From ba64bfbc8970b1576a77d660c88de867ffd70712 Mon Sep 17 00:00:00 2001 From: Andrea Marziali Date: Mon, 29 Jun 2026 15:09:42 +0200 Subject: [PATCH 1/2] Add coverage for ForeignMemoryWriterFactoryTest --- .../ForeignMemoryWriterFactoryTest.java | 47 +++++++++++++++++++ .../org.mockito.plugins.MockMaker | 1 + 2 files changed, 48 insertions(+) create mode 100644 dd-trace-core/src/test/java/datadog/trace/core/servicediscovery/ForeignMemoryWriterFactoryTest.java create mode 100644 dd-trace-core/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker diff --git a/dd-trace-core/src/test/java/datadog/trace/core/servicediscovery/ForeignMemoryWriterFactoryTest.java b/dd-trace-core/src/test/java/datadog/trace/core/servicediscovery/ForeignMemoryWriterFactoryTest.java new file mode 100644 index 00000000000..597a96d3ef3 --- /dev/null +++ b/dd-trace-core/src/test/java/datadog/trace/core/servicediscovery/ForeignMemoryWriterFactoryTest.java @@ -0,0 +1,47 @@ +package datadog.trace.core.servicediscovery; + +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.mockito.Mockito.mockStatic; + +import datadog.environment.JavaVirtualMachine; +import datadog.environment.OperatingSystem; +import org.mockito.MockedStatic; +import org.tabletest.junit.TableTest; + +class ForeignMemoryWriterFactoryTest { + + @TableTest({ + "scenario | osType | architecture | javaAtLeast22 | expectedClassFragment", + "macOS | MACOS | X64 | false | ", + "Windows | WINDOWS | X64 | false | ", + "Linux unknown arch | LINUX | UNKNOWN | false | ", + "Linux pre-Java22 | LINUX | X64 | false | JNA ", + "Linux Java22+ | LINUX | X64 | true | FFM " + }) + void get( + String scenario, + String osType, + String architecture, + boolean javaAtLeast22, + String expectedClassFragment) { + try (MockedStatic osMock = mockStatic(OperatingSystem.class); + MockedStatic jvmMock = mockStatic(JavaVirtualMachine.class)) { + osMock.when(OperatingSystem::type).thenReturn(OperatingSystem.Type.valueOf(osType)); + osMock + .when(OperatingSystem::architecture) + .thenReturn(OperatingSystem.Architecture.valueOf(architecture)); + jvmMock.when(() -> JavaVirtualMachine.isJavaVersionAtLeast(22)).thenReturn(javaAtLeast22); + + ForeignMemoryWriter writer = new ForeignMemoryWriterFactory().get(); + + if (expectedClassFragment == null) { + assertNull(writer, scenario); + } else { + assertNotNull(writer, scenario); + assertTrue(writer.getClass().getName().contains(expectedClassFragment), scenario); + } + } + } +} diff --git a/dd-trace-core/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker b/dd-trace-core/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker new file mode 100644 index 00000000000..ca6ee9cea8e --- /dev/null +++ b/dd-trace-core/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker @@ -0,0 +1 @@ +mock-maker-inline \ No newline at end of file From 944f7c6cb09f647f8d6d5e4cf92b1a33bcdec893 Mon Sep 17 00:00:00 2001 From: Andrea Marziali Date: Mon, 29 Jun 2026 15:32:18 +0200 Subject: [PATCH 2/2] test on 22+ --- .../core/servicediscovery/ForeignMemoryWriterFactoryTest.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/dd-trace-core/src/test/java/datadog/trace/core/servicediscovery/ForeignMemoryWriterFactoryTest.java b/dd-trace-core/src/test/java/datadog/trace/core/servicediscovery/ForeignMemoryWriterFactoryTest.java index 597a96d3ef3..ff41ce694ff 100644 --- a/dd-trace-core/src/test/java/datadog/trace/core/servicediscovery/ForeignMemoryWriterFactoryTest.java +++ b/dd-trace-core/src/test/java/datadog/trace/core/servicediscovery/ForeignMemoryWriterFactoryTest.java @@ -7,6 +7,7 @@ import datadog.environment.JavaVirtualMachine; import datadog.environment.OperatingSystem; +import org.junit.jupiter.api.Assumptions; import org.mockito.MockedStatic; import org.tabletest.junit.TableTest; @@ -26,6 +27,9 @@ void get( String architecture, boolean javaAtLeast22, String expectedClassFragment) { + // MemFDUnixWriterFFM uses java.lang.foreign and will fail to load on pre-22 JVMs + boolean realJavaAtLeast22 = JavaVirtualMachine.isJavaVersionAtLeast(22); + Assumptions.assumeTrue(!javaAtLeast22 || realJavaAtLeast22, "FFM writer requires Java 22+"); try (MockedStatic osMock = mockStatic(OperatingSystem.class); MockedStatic jvmMock = mockStatic(JavaVirtualMachine.class)) { osMock.when(OperatingSystem::type).thenReturn(OperatingSystem.Type.valueOf(osType));