Skip to content

Commit 0cac209

Browse files
committed
Simplify AWS Lambda exception log assertions
1 parent 92b4883 commit 0cac209

6 files changed

Lines changed: 53 additions & 40 deletions

File tree

instrumentation/aws-lambda/aws-lambda-core-1.0/javaagent/build.gradle.kts

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,6 @@ tasks {
3434
testClassesDirs = sourceSets.test.get().output.classesDirs
3535
classpath = sourceSets.test.get().runtimeClasspath
3636

37-
filter {
38-
includeTestsMatching("AwsLambdaTest")
39-
}
4037
jvmArgs("-Dotel.semconv.exception.signal.preview=logs")
4138
systemProperty("metadataConfig", "otel.semconv.exception.signal.preview=logs")
4239
}

instrumentation/aws-lambda/aws-lambda-core-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/awslambdacore/v1_0/AwsLambdaStreamHandlerTest.java

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,18 @@
55

66
package io.opentelemetry.javaagent.instrumentation.awslambdacore.v1_0;
77

8+
import static io.opentelemetry.instrumentation.api.internal.SemconvExceptionSignal.emitExceptionAsLogs;
9+
import static io.opentelemetry.instrumentation.api.internal.SemconvExceptionSignal.emitExceptionAsSpanEvents;
10+
import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat;
811
import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo;
912
import static io.opentelemetry.semconv.incubating.FaasIncubatingAttributes.FAAS_INVOCATION_ID;
1013
import static java.nio.charset.StandardCharsets.UTF_8;
11-
import static org.assertj.core.api.Assertions.assertThat;
1214
import static org.assertj.core.api.Assertions.catchThrowable;
1315
import static org.mockito.Mockito.when;
1416

1517
import com.amazonaws.services.lambda.runtime.Context;
1618
import com.amazonaws.services.lambda.runtime.RequestStreamHandler;
19+
import io.opentelemetry.api.logs.Severity;
1720
import io.opentelemetry.api.trace.SpanKind;
1821
import io.opentelemetry.instrumentation.testing.junit.AgentInstrumentationExtension;
1922
import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension;
@@ -86,8 +89,18 @@ void handlerTracedWithException() {
8689
span.hasName("my_function")
8790
.hasKind(SpanKind.SERVER)
8891
.hasStatus(StatusData.error())
89-
.hasException(thrown)
92+
.hasException(emitExceptionAsSpanEvents() ? thrown : null)
9093
.hasAttributesSatisfyingExactly(equalTo(FAAS_INVOCATION_ID, "1-22-333"))));
94+
95+
if (emitExceptionAsLogs()) {
96+
testing.waitAndAssertLogRecords(
97+
logRecord ->
98+
logRecord
99+
.hasSeverity(Severity.ERROR)
100+
.hasEventName("faas.invocation.exception")
101+
.hasException(thrown)
102+
.hasTotalAttributeCount(3));
103+
}
91104
}
92105

93106
private static class RequestStreamHandlerTestImpl implements RequestStreamHandler {

instrumentation/aws-lambda/aws-lambda-core-1.0/library/build.gradle.kts

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,6 @@ tasks {
4040
testClassesDirs = sourceSets.test.get().output.classesDirs
4141
classpath = sourceSets.test.get().runtimeClasspath
4242

43-
filter {
44-
includeTestsMatching("AwsLambdaTest")
45-
}
4643
jvmArgs("-Dotel.semconv.exception.signal.preview=logs")
4744
}
4845

instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/AwsLambdaStreamWrapperHttpPropagationTest.java

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,14 @@
55

66
package io.opentelemetry.instrumentation.awslambdacore.v1_0;
77

8+
import static io.opentelemetry.instrumentation.api.internal.SemconvExceptionSignal.emitExceptionAsLogs;
9+
import static io.opentelemetry.instrumentation.api.internal.SemconvExceptionSignal.emitExceptionAsSpanEvents;
10+
import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat;
811
import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo;
912
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CLOUD_ACCOUNT_ID;
1013
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CLOUD_RESOURCE_ID;
1114
import static io.opentelemetry.semconv.incubating.FaasIncubatingAttributes.FAAS_INVOCATION_ID;
1215
import static java.nio.charset.StandardCharsets.UTF_8;
13-
import static org.assertj.core.api.Assertions.assertThat;
1416
import static org.assertj.core.api.Assertions.catchThrowable;
1517
import static org.mockito.Mockito.when;
1618

@@ -19,6 +21,7 @@
1921
import com.fasterxml.jackson.core.JsonFactory;
2022
import com.fasterxml.jackson.core.JsonParser;
2123
import com.fasterxml.jackson.core.JsonToken;
24+
import io.opentelemetry.api.logs.Severity;
2225
import io.opentelemetry.api.trace.SpanKind;
2326
import io.opentelemetry.instrumentation.awslambdacore.v1_0.internal.WrappedLambda;
2427
import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension;
@@ -126,13 +129,23 @@ void handlerTracedWithException() {
126129
.hasTraceId("4fd0b6131f19f39af59518d127b0cafe")
127130
.hasParentSpanId("0000000000000456")
128131
.hasStatus(StatusData.error())
129-
.hasException(thrown)
132+
.hasException(emitExceptionAsSpanEvents() ? thrown : null)
130133
.hasAttributesSatisfyingExactly(
131134
equalTo(
132135
CLOUD_RESOURCE_ID,
133136
"arn:aws:lambda:us-east-1:123456789:function:test"),
134137
equalTo(CLOUD_ACCOUNT_ID, "123456789"),
135138
equalTo(FAAS_INVOCATION_ID, "1-22-333"))));
139+
140+
if (emitExceptionAsLogs()) {
141+
testing.waitAndAssertLogRecords(
142+
logRecord ->
143+
logRecord
144+
.hasSeverity(Severity.ERROR)
145+
.hasEventName("faas.invocation.exception")
146+
.hasException(thrown)
147+
.hasTotalAttributeCount(3));
148+
}
136149
}
137150

138151
public static class TestRequestHandler implements RequestStreamHandler {

instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/AwsLambdaStreamWrapperTest.java

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,20 @@
55

66
package io.opentelemetry.instrumentation.awslambdacore.v1_0;
77

8+
import static io.opentelemetry.instrumentation.api.internal.SemconvExceptionSignal.emitExceptionAsLogs;
9+
import static io.opentelemetry.instrumentation.api.internal.SemconvExceptionSignal.emitExceptionAsSpanEvents;
10+
import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat;
811
import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo;
912
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CLOUD_ACCOUNT_ID;
1013
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CLOUD_RESOURCE_ID;
1114
import static io.opentelemetry.semconv.incubating.FaasIncubatingAttributes.FAAS_INVOCATION_ID;
1215
import static java.nio.charset.StandardCharsets.UTF_8;
13-
import static org.assertj.core.api.Assertions.assertThat;
1416
import static org.assertj.core.api.Assertions.catchThrowable;
1517
import static org.mockito.Mockito.when;
1618

1719
import com.amazonaws.services.lambda.runtime.Context;
1820
import com.amazonaws.services.lambda.runtime.RequestStreamHandler;
21+
import io.opentelemetry.api.logs.Severity;
1922
import io.opentelemetry.api.trace.SpanKind;
2023
import io.opentelemetry.instrumentation.awslambdacore.v1_0.internal.WrappedLambda;
2124
import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension;
@@ -107,13 +110,23 @@ void handlerTracedWithException() {
107110
span.hasName("my_function")
108111
.hasKind(SpanKind.SERVER)
109112
.hasStatus(StatusData.error())
110-
.hasException(thrown)
113+
.hasException(emitExceptionAsSpanEvents() ? thrown : null)
111114
.hasAttributesSatisfyingExactly(
112115
equalTo(
113116
CLOUD_RESOURCE_ID,
114117
"arn:aws:lambda:us-east-1:123456789:function:test"),
115118
equalTo(CLOUD_ACCOUNT_ID, "123456789"),
116119
equalTo(FAAS_INVOCATION_ID, "1-22-333"))));
120+
121+
if (emitExceptionAsLogs()) {
122+
testing.waitAndAssertLogRecords(
123+
logRecord ->
124+
logRecord
125+
.hasSeverity(Severity.ERROR)
126+
.hasEventName("faas.invocation.exception")
127+
.hasException(thrown)
128+
.hasTotalAttributeCount(3));
129+
}
117130
}
118131

119132
public static class TestRequestHandler implements RequestStreamHandler {

instrumentation/aws-lambda/aws-lambda-core-1.0/testing/src/main/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/AbstractAwsLambdaTest.java

Lines changed: 8 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,7 @@
99
import static io.opentelemetry.instrumentation.api.internal.SemconvExceptionSignal.emitExceptionAsSpanEvents;
1010
import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat;
1111
import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo;
12-
import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies;
13-
import static io.opentelemetry.semconv.ExceptionAttributes.EXCEPTION_MESSAGE;
14-
import static io.opentelemetry.semconv.ExceptionAttributes.EXCEPTION_STACKTRACE;
15-
import static io.opentelemetry.semconv.ExceptionAttributes.EXCEPTION_TYPE;
1612
import static io.opentelemetry.semconv.incubating.FaasIncubatingAttributes.FAAS_INVOCATION_ID;
17-
import static java.util.stream.Collectors.toList;
1813
import static org.assertj.core.api.Assertions.catchThrowable;
1914
import static org.mockito.Mockito.when;
2015

@@ -23,10 +18,7 @@
2318
import io.opentelemetry.api.logs.Severity;
2419
import io.opentelemetry.api.trace.SpanKind;
2520
import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension;
26-
import io.opentelemetry.sdk.logs.data.LogRecordData;
2721
import io.opentelemetry.sdk.trace.data.StatusData;
28-
import java.util.List;
29-
import org.awaitility.Awaitility;
3022
import org.junit.jupiter.api.AfterEach;
3123
import org.junit.jupiter.api.BeforeEach;
3224
import org.junit.jupiter.api.Test;
@@ -100,29 +92,17 @@ void handlerTracedWithException() {
10092
}));
10193

10294
if (emitExceptionAsLogs()) {
103-
assertInvocationExceptionLog();
95+
testing()
96+
.waitAndAssertLogRecords(
97+
logRecord ->
98+
logRecord
99+
.hasSeverity(Severity.ERROR)
100+
.hasEventName("faas.invocation.exception")
101+
.hasException(thrown)
102+
.hasTotalAttributeCount(3));
104103
}
105104
}
106105

107-
private void assertInvocationExceptionLog() {
108-
Awaitility.await()
109-
.untilAsserted(
110-
() -> {
111-
List<LogRecordData> logs =
112-
testing().logRecords().stream()
113-
.filter(log -> "faas.invocation.exception".equals(log.getEventName()))
114-
.collect(toList());
115-
assertThat(logs).hasSize(1);
116-
assertThat(logs.get(0))
117-
.hasSeverity(Severity.ERROR)
118-
.hasEventName("faas.invocation.exception")
119-
.hasAttributesSatisfyingExactly(
120-
satisfies(EXCEPTION_TYPE, val -> val.isNotNull()),
121-
satisfies(EXCEPTION_MESSAGE, val -> val.isNotNull()),
122-
satisfies(EXCEPTION_STACKTRACE, val -> val.isNotNull()));
123-
});
124-
}
125-
126106
/**
127107
* For more details about active tracing see
128108
* https://docs.aws.amazon.com/lambda/latest/dg/services-xray.html

0 commit comments

Comments
 (0)