Convert log4j context-data tests from groovy to java (#9804)

This commit is contained in:
Jay DeLuca 2023-11-15 10:08:59 -05:00 committed by GitHub
parent 6f02a8c60c
commit 37d1035430
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
18 changed files with 318 additions and 210 deletions

View File

@ -27,8 +27,8 @@ testing {
// Regression test for https://github.com/open-telemetry/opentelemetry-java-instrumentation/issues/2403
val testDisableThreadLocals by registering(JvmTestSuite::class) {
sources {
groovy {
setSrcDirs(listOf("src/test/groovy"))
java {
setSrcDirs(listOf("src/test/java"))
}
}
dependencies {
@ -48,8 +48,8 @@ testing {
val testAddBaggage by registering(JvmTestSuite::class) {
sources {
groovy {
setSrcDirs(listOf("src/testAddBaggage/groovy"))
java {
setSrcDirs(listOf("src/testAddBaggage/java"))
}
}
dependencies {

View File

@ -1,29 +0,0 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
import io.opentelemetry.instrumentation.log4j.contextdata.ListAppender
import io.opentelemetry.instrumentation.test.AgentTestTrait
import org.apache.logging.log4j.LogManager
class AutoLog4j2Test extends Log4j2Test implements AgentTestTrait {
def "resource attributes"() {
given:
def logger = LogManager.getLogger("TestLogger")
when:
logger.info("log message 1")
def events = ListAppender.get().getEvents()
then:
events.size() == 1
events[0].message == "log message 1"
events[0].contextData["trace_id"] == null
events[0].contextData["span_id"] == null
events[0].contextData["service.name"] == "unknown_service:java"
events[0].contextData["telemetry.sdk.language"] == "java"
}
}

View File

@ -0,0 +1,45 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.javaagent.instrumentation.log4j.contextdata.v2_17;
import static org.assertj.core.api.Assertions.assertThat;
import io.opentelemetry.instrumentation.log4j.contextdata.ListAppender;
import io.opentelemetry.instrumentation.log4j.contextdata.Log4j2Test;
import io.opentelemetry.instrumentation.testing.junit.AgentInstrumentationExtension;
import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension;
import java.util.List;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;
class AutoLog4j2Test extends Log4j2Test {
@RegisterExtension
static final InstrumentationExtension testing = AgentInstrumentationExtension.create();
@Override
public InstrumentationExtension getInstrumentationExtension() {
return testing;
}
@Test
void testResourceAttributes() {
Logger logger = LogManager.getLogger("TestLogger");
logger.info("log message 1");
List<ListAppender.LoggedEvent> events = ListAppender.get().getEvents();
assertThat(events.size()).isEqualTo(1);
assertThat(events.get(0).getMessage()).isEqualTo("log message 1");
assertThat(events.get(0).getContextData().get("trace_id")).isNull();
assertThat(events.get(0).getContextData().get("span_id")).isNull();
assertThat(events.get(0).getContextData().get("service.name"))
.isEqualTo("unknown_service:java");
assertThat(events.get(0).getContextData().get("telemetry.sdk.language")).isEqualTo("java");
}
}

View File

@ -1,9 +0,0 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
import io.opentelemetry.instrumentation.test.AgentTestTrait
class AutoLog4jBaggageTest extends Log4J2BaggageTest implements AgentTestTrait {
}

View File

@ -0,0 +1,21 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.javaagent.instrumentation.log4j.contextdata.v2_17;
import io.opentelemetry.instrumentation.log4j.contextdata.Log4j2BaggageTest;
import io.opentelemetry.instrumentation.testing.junit.AgentInstrumentationExtension;
import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension;
import org.junit.jupiter.api.extension.RegisterExtension;
class AutoLog4jBaggageTest extends Log4j2BaggageTest {
@RegisterExtension
static final InstrumentationExtension testing = AgentInstrumentationExtension.create();
@Override
public InstrumentationExtension getInstrumentationExtension() {
return testing;
}
}

View File

@ -1,9 +0,0 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
import io.opentelemetry.instrumentation.test.LibraryTestTrait
class LibraryLog4j2BaggageTest extends Log4J2BaggageTest implements LibraryTestTrait {
}

View File

@ -1,9 +0,0 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
import io.opentelemetry.instrumentation.test.LibraryTestTrait
class LibraryLog4j2Test extends Log4j2Test implements LibraryTestTrait {
}

View File

@ -0,0 +1,21 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.instrumentation.log4j.contextdata.v2_17;
import io.opentelemetry.instrumentation.log4j.contextdata.Log4j2BaggageTest;
import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension;
import io.opentelemetry.instrumentation.testing.junit.LibraryInstrumentationExtension;
import org.junit.jupiter.api.extension.RegisterExtension;
class LibraryLog4j2BaggageTest extends Log4j2BaggageTest {
@RegisterExtension
static final InstrumentationExtension testing = LibraryInstrumentationExtension.create();
@Override
public InstrumentationExtension getInstrumentationExtension() {
return testing;
}
}

View File

@ -0,0 +1,21 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.instrumentation.log4j.contextdata.v2_17;
import io.opentelemetry.instrumentation.log4j.contextdata.Log4j2Test;
import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension;
import io.opentelemetry.instrumentation.testing.junit.LibraryInstrumentationExtension;
import org.junit.jupiter.api.extension.RegisterExtension;
class LibraryLog4j2Test extends Log4j2Test {
@RegisterExtension
static final InstrumentationExtension testing = LibraryInstrumentationExtension.create();
@Override
public InstrumentationExtension getInstrumentationExtension() {
return testing;
}
}

View File

@ -1,9 +0,0 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
import io.opentelemetry.instrumentation.test.AgentTestTrait
class Log4j27BaggageTest extends Log4J2BaggageTest implements AgentTestTrait {
}

View File

@ -1,29 +0,0 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
import io.opentelemetry.instrumentation.log4j.contextdata.ListAppender
import io.opentelemetry.instrumentation.test.AgentTestTrait
import org.apache.logging.log4j.LogManager
class Log4j27Test extends Log4j2Test implements AgentTestTrait {
def "resource attributes"() {
given:
def logger = LogManager.getLogger("TestLogger")
when:
logger.info("log message 1")
def events = ListAppender.get().getEvents()
then:
events.size() == 1
events[0].message == "log message 1"
events[0].contextData["trace_id"] == null
events[0].contextData["span_id"] == null
events[0].contextData["service.name"] == "unknown_service:java"
events[0].contextData["telemetry.sdk.language"] == "java"
}
}

View File

@ -0,0 +1,21 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.javaagent.instrumentation.log4j.contextdata.v2_7;
import io.opentelemetry.instrumentation.log4j.contextdata.Log4j2BaggageTest;
import io.opentelemetry.instrumentation.testing.junit.AgentInstrumentationExtension;
import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension;
import org.junit.jupiter.api.extension.RegisterExtension;
class Log4j27BaggageTest extends Log4j2BaggageTest {
@RegisterExtension
static final InstrumentationExtension testing = AgentInstrumentationExtension.create();
@Override
public InstrumentationExtension getInstrumentationExtension() {
return testing;
}
}

View File

@ -0,0 +1,45 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.javaagent.instrumentation.log4j.contextdata.v2_7;
import static org.assertj.core.api.Assertions.assertThat;
import io.opentelemetry.instrumentation.log4j.contextdata.ListAppender;
import io.opentelemetry.instrumentation.log4j.contextdata.Log4j2Test;
import io.opentelemetry.instrumentation.testing.junit.AgentInstrumentationExtension;
import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension;
import java.util.List;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;
class Log4j27Test extends Log4j2Test {
@RegisterExtension
static final InstrumentationExtension testing = AgentInstrumentationExtension.create();
@Override
public InstrumentationExtension getInstrumentationExtension() {
return testing;
}
@Test
void testResourceAttributes() {
Logger logger = LogManager.getLogger("TestLogger");
logger.info("log message 1");
List<ListAppender.LoggedEvent> events = ListAppender.get().getEvents();
assertThat(events.size()).isEqualTo(1);
assertThat(events.get(0).getMessage()).isEqualTo("log message 1");
assertThat(events.get(0).getContextData().get("trace_id")).isNull();
assertThat(events.get(0).getContextData().get("span_id")).isNull();
assertThat(events.get(0).getContextData().get("service.name"))
.isEqualTo("unknown_service:java");
assertThat(events.get(0).getContextData().get("telemetry.sdk.language")).isEqualTo("java");
}
}

View File

@ -9,9 +9,7 @@ dependencies {
implementation("com.google.guava:guava")
implementation("org.apache.groovy:groovy")
implementation("io.opentelemetry:opentelemetry-api")
implementation("org.spockframework:spock-core")
annotationProcessor("org.apache.logging.log4j:log4j-core:2.7")
}

View File

@ -1,11 +0,0 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
abstract class Log4J2BaggageTest extends Log4j2Test {
@Override
boolean expectBaggage() {
return true
}
}

View File

@ -1,99 +0,0 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
import io.opentelemetry.api.baggage.Baggage
import io.opentelemetry.api.trace.Span
import io.opentelemetry.instrumentation.log4j.contextdata.ListAppender
import io.opentelemetry.instrumentation.test.InstrumentationSpecification
import org.apache.logging.log4j.LogManager
abstract class Log4j2Test extends InstrumentationSpecification {
def setup() {
ListAppender.get().clearEvents()
}
def "no ids when no span"() {
given:
def logger = LogManager.getLogger("TestLogger")
when:
logger.info("log message 1")
logger.info("log message 2")
def events = ListAppender.get().getEvents()
then:
events.size() == 2
events[0].message == "log message 1"
events[0].contextData["trace_id"] == null
events[0].contextData["span_id"] == null
events[0].contextData["trace_flags"] == null
events[1].message == "log message 2"
events[1].contextData["trace_id"] == null
events[1].contextData["span_id"] == null
events[1].contextData["trace_flags"] == null
}
def "ids when span"() {
given:
def logger = LogManager.getLogger("TestLogger")
when:
Baggage baggage = Baggage.empty().toBuilder().put("baggage_key", "baggage_value").build()
Span spanParent
Span spanChild
try (var unusedScope = baggage.makeCurrent()) {
runWithSpan("test") {
spanParent = Span.current()
logger.info("log span parent")
runWithSpan("test-child") {
logger.info("log span child")
spanChild = Span.current()
}
}
}
logger.info("log message 2")
Span span2 = runWithSpan("test 2") {
logger.info("log message 3")
Span.current()
}
def events = ListAppender.get().getEvents()
then:
events.size() == 4
events[0].message == "log span parent"
events[0].contextData["trace_id"] == spanParent.spanContext.traceId
events[0].contextData["span_id"] == spanParent.spanContext.spanId
events[0].contextData["trace_flags"] == "01"
events[0].contextData["baggage.baggage_key"] == (expectBaggage() ? "baggage_value" : null)
events[1].message == "log span child"
events[1].contextData["trace_id"] == spanChild.spanContext.traceId
events[1].contextData["span_id"] == spanChild.spanContext.spanId
events[1].contextData["trace_flags"] == "01"
events[1].contextData["baggage.baggage_key"] == (expectBaggage() ? "baggage_value" : null)
events[2].message == "log message 2"
events[2].contextData["trace_id"] == null
events[2].contextData["span_id"] == null
events[2].contextData["trace_flags"] == null
events[2].contextData["baggage.baggage_key"] == null
events[3].message == "log message 3"
events[3].contextData["trace_id"] == span2.spanContext.traceId
events[3].contextData["span_id"] == span2.spanContext.spanId
events[3].contextData["trace_flags"] == "01"
events[3].contextData["baggage.baggage_key"] == null
}
boolean expectBaggage() {
return false
}
}

View File

@ -0,0 +1,13 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.instrumentation.log4j.contextdata;
public abstract class Log4j2BaggageTest extends Log4j2Test {
@Override
boolean expectBaggage() {
return true;
}
}

View File

@ -0,0 +1,127 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.instrumentation.log4j.contextdata;
import static org.assertj.core.api.Assertions.assertThat;
import io.opentelemetry.api.baggage.Baggage;
import io.opentelemetry.api.trace.Span;
import io.opentelemetry.context.Scope;
import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension;
import java.util.List;
import java.util.concurrent.atomic.AtomicReference;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
public abstract class Log4j2Test {
public abstract InstrumentationExtension getInstrumentationExtension();
@BeforeEach
void setUp() {
ListAppender.get().clearEvents();
}
boolean expectBaggage() {
return false;
}
@Test
void testNoIdsWhenNoSpan() {
Logger logger = LogManager.getLogger("TestLogger");
logger.info("log message 1");
logger.info("log message 2");
List<ListAppender.LoggedEvent> events = ListAppender.get().getEvents();
assertThat(events.size()).isEqualTo(2);
assertThat(events.get(0).getMessage()).isEqualTo("log message 1");
assertThat(events.get(0).getContextData().get("trace_id")).isNull();
assertThat(events.get(0).getContextData().get("span_id")).isNull();
assertThat(events.get(0).getContextData().get("trace_flags")).isNull();
assertThat(events.get(1).getMessage()).isEqualTo("log message 2");
assertThat(events.get(1).getContextData().get("trace_id")).isNull();
assertThat(events.get(1).getContextData().get("span_id")).isNull();
assertThat(events.get(1).getContextData().get("trace_flags")).isNull();
}
@Test
void testIdsWhenSpan() {
Logger logger = LogManager.getLogger("TestLogger");
Baggage baggage = Baggage.empty().toBuilder().put("baggage_key", "baggage_value").build();
AtomicReference<Span> spanParent = new AtomicReference<>();
AtomicReference<Span> spanChild = new AtomicReference<>();
try (Scope unusedScope = baggage.makeCurrent()) {
getInstrumentationExtension()
.runWithSpan(
"test",
() -> {
spanParent.set(Span.current());
logger.info("log span parent");
getInstrumentationExtension()
.runWithSpan(
"test-child",
() -> {
logger.info("log span child");
spanChild.set(Span.current());
});
});
}
logger.info("log message 2");
Span span2 =
getInstrumentationExtension()
.runWithSpan(
"test 2",
() -> {
logger.info("log message 3");
return Span.current();
});
List<ListAppender.LoggedEvent> events = ListAppender.get().getEvents();
assertThat(events.size()).isEqualTo(4);
assertThat(events.get(0).getMessage()).isEqualTo("log span parent");
assertThat(events.get(0).getContextData().get("trace_id"))
.isEqualTo(spanParent.get().getSpanContext().getTraceId());
assertThat(events.get(0).getContextData().get("span_id"))
.isEqualTo(spanParent.get().getSpanContext().getSpanId());
assertThat(events.get(0).getContextData().get("trace_flags")).isEqualTo("01");
assertThat(events.get(0).getContextData().get("baggage.baggage_key"))
.isEqualTo((expectBaggage() ? "baggage_value" : null));
assertThat(events.get(1).getMessage()).isEqualTo("log span child");
assertThat(events.get(1).getContextData().get("trace_id"))
.isEqualTo(spanChild.get().getSpanContext().getTraceId());
assertThat(events.get(1).getContextData().get("span_id"))
.isEqualTo(spanChild.get().getSpanContext().getSpanId());
assertThat(events.get(1).getContextData().get("trace_flags")).isEqualTo("01");
assertThat(events.get(1).getContextData().get("baggage.baggage_key"))
.isEqualTo((expectBaggage() ? "baggage_value" : null));
assertThat(events.get(2).getMessage()).isEqualTo("log message 2");
assertThat(events.get(2).getContextData().get("trace_id")).isNull();
assertThat(events.get(2).getContextData().get("span_id")).isNull();
assertThat(events.get(2).getContextData().get("trace_flags")).isNull();
assertThat(events.get(2).getContextData().get("baggage.baggage_key")).isNull();
assertThat(events.get(3).getMessage()).isEqualTo("log message 3");
assertThat(events.get(3).getContextData().get("trace_id"))
.isEqualTo(span2.getSpanContext().getTraceId());
assertThat(events.get(3).getContextData().get("span_id"))
.isEqualTo(span2.getSpanContext().getSpanId());
assertThat(events.get(3).getContextData().get("trace_flags")).isEqualTo("01");
assertThat(events.get(3).getContextData().get("baggage.baggage_key")).isNull();
}
}