Skip to content

Commit 0b16e8b

Browse files
committed
Simplify OpenAI exception log assertions
1 parent 2c8040c commit 0b16e8b

2 files changed

Lines changed: 42 additions & 11 deletions

File tree

instrumentation/openai/openai-java-1.1/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/openai/v1_1/EmbeddingsTest.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,19 @@
55

66
package io.opentelemetry.javaagent.instrumentation.openai.v1_1;
77

8+
import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo;
9+
import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies;
10+
import static io.opentelemetry.semconv.ExceptionAttributes.EXCEPTION_MESSAGE;
11+
import static io.opentelemetry.semconv.ExceptionAttributes.EXCEPTION_STACKTRACE;
12+
import static io.opentelemetry.semconv.ExceptionAttributes.EXCEPTION_TYPE;
13+
814
import com.openai.client.OpenAIClient;
915
import com.openai.client.OpenAIClientAsync;
16+
import io.opentelemetry.api.logs.Severity;
1017
import io.opentelemetry.instrumentation.openai.v1_1.AbstractEmbeddingsTest;
1118
import io.opentelemetry.instrumentation.testing.junit.AgentInstrumentationExtension;
1219
import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension;
20+
import io.opentelemetry.sdk.testing.assertj.LogRecordDataAssert;
1321
import io.opentelemetry.sdk.testing.assertj.SpanDataAssert;
1422
import java.util.ArrayList;
1523
import java.util.List;
@@ -45,4 +53,23 @@ protected List<Consumer<SpanDataAssert>> maybeWithTransportSpan(Consumer<SpanDat
4553
result.add(s -> s.hasName("POST"));
4654
return result;
4755
}
56+
57+
@Override
58+
protected List<Consumer<LogRecordDataAssert>> maybeWithTransportExceptionLog(
59+
Consumer<LogRecordDataAssert> logRecord) {
60+
List<Consumer<LogRecordDataAssert>> result = new ArrayList<>();
61+
result.add(
62+
transportLog ->
63+
transportLog
64+
.hasSeverity(Severity.WARN)
65+
.hasEventName("http.client.request.exception")
66+
.hasAttributesSatisfyingExactly(
67+
equalTo(EXCEPTION_TYPE, "java.net.ConnectException"),
68+
satisfies(
69+
EXCEPTION_MESSAGE, val -> val.startsWith("Failed to connect to localhost")),
70+
satisfies(EXCEPTION_STACKTRACE, val -> val.isNotNull()))
71+
.hasTotalAttributeCount(3));
72+
result.add(logRecord);
73+
return result;
74+
}
4875
}

instrumentation/openai/openai-java-1.1/testing/src/main/java/io/opentelemetry/instrumentation/openai/v1_1/AbstractEmbeddingsTest.java

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,6 @@
1010
import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat;
1111
import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo;
1212
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;
1613
import static io.opentelemetry.semconv.incubating.GenAiIncubatingAttributes.GEN_AI_OPERATION_NAME;
1714
import static io.opentelemetry.semconv.incubating.GenAiIncubatingAttributes.GEN_AI_PROVIDER_NAME;
1815
import static io.opentelemetry.semconv.incubating.GenAiIncubatingAttributes.GEN_AI_REQUEST_ENCODING_FORMATS;
@@ -39,7 +36,10 @@
3936
import io.opentelemetry.api.trace.SpanKind;
4037
import io.opentelemetry.context.Context;
4138
import io.opentelemetry.instrumentation.testing.internal.AutoCleanupExtension;
39+
import io.opentelemetry.sdk.testing.assertj.LogRecordDataAssert;
40+
import java.util.List;
4241
import java.util.concurrent.CompletionException;
42+
import java.util.function.Consumer;
4343
import org.junit.jupiter.api.Test;
4444
import org.junit.jupiter.api.extension.RegisterExtension;
4545

@@ -264,14 +264,13 @@ void connectionError() {
264264
if (emitExceptionAsLogs()) {
265265
getTesting()
266266
.waitAndAssertLogRecords(
267-
logRecord ->
268-
logRecord
269-
.hasSeverity(Severity.WARN)
270-
.hasEventName("gen_ai.client.operation.exception")
271-
.hasAttributesSatisfyingExactly(
272-
equalTo(EXCEPTION_TYPE, thrown.getClass().getName()),
273-
equalTo(EXCEPTION_MESSAGE, thrown.getMessage()),
274-
satisfies(EXCEPTION_STACKTRACE, val -> val.isNotNull())));
267+
maybeWithTransportExceptionLog(
268+
logRecord ->
269+
logRecord
270+
.hasSeverity(Severity.WARN)
271+
.hasEventName("gen_ai.client.operation.exception")
272+
.hasException(thrown)
273+
.hasTotalAttributeCount(3)));
275274
}
276275

277276
getTesting()
@@ -291,4 +290,9 @@ void connectionError() {
291290
equalTo(GEN_AI_OPERATION_NAME, EMBEDDINGS),
292291
equalTo(GEN_AI_REQUEST_MODEL, MODEL)))));
293292
}
293+
294+
protected List<Consumer<LogRecordDataAssert>> maybeWithTransportExceptionLog(
295+
Consumer<LogRecordDataAssert> logRecord) {
296+
return singletonList(logRecord);
297+
}
294298
}

0 commit comments

Comments
 (0)