|
63 | 63 | import java.util.concurrent.TimeUnit;
|
64 | 64 | import java.util.concurrent.atomic.AtomicBoolean;
|
65 | 65 | import java.util.concurrent.atomic.AtomicLong;
|
| 66 | +import java.util.function.Consumer; |
66 | 67 | import java.util.stream.IntStream;
|
| 68 | +import java.util.stream.Stream; |
67 | 69 | import javax.annotation.Nullable;
|
68 | 70 | import org.junit.jupiter.api.BeforeEach;
|
69 | 71 | import org.junit.jupiter.api.Test;
|
70 | 72 | import org.junit.jupiter.api.extension.ExtendWith;
|
| 73 | +import org.junit.jupiter.params.ParameterizedTest; |
| 74 | +import org.junit.jupiter.params.provider.Arguments; |
| 75 | +import org.junit.jupiter.params.provider.MethodSource; |
71 | 76 | import org.mockito.Mock;
|
72 | 77 | import org.mockito.Mockito;
|
73 | 78 | import org.mockito.junit.jupiter.MockitoExtension;
|
@@ -1336,15 +1341,61 @@ void onStartOnEndNotRequired() {
|
1336 | 1341 | verify(spanProcessor, never()).onEnd(any());
|
1337 | 1342 | }
|
1338 | 1343 |
|
1339 |
| - @Test |
1340 |
| - void setStatusCannotOverrideStatusOK() { |
| 1344 | + @ParameterizedTest |
| 1345 | + @MethodSource("setStatusArgs") |
| 1346 | + void setStatus(Consumer<Span> spanConsumer, StatusData expectedSpanData) { |
1341 | 1347 | SdkSpan testSpan = createTestRootSpan();
|
1342 |
| - testSpan.setStatus(StatusCode.OK); |
1343 |
| - assertThat(testSpan.toSpanData().getStatus().getStatusCode()).isEqualTo(StatusCode.OK); |
1344 |
| - testSpan.setStatus(StatusCode.ERROR); |
1345 |
| - assertThat(testSpan.toSpanData().getStatus().getStatusCode()).isEqualTo(StatusCode.OK); |
1346 |
| - testSpan.setStatus(StatusCode.UNSET); |
1347 |
| - assertThat(testSpan.toSpanData().getStatus().getStatusCode()).isEqualTo(StatusCode.OK); |
| 1348 | + spanConsumer.accept(testSpan); |
| 1349 | + assertThat(testSpan.toSpanData().getStatus()).isEqualTo(expectedSpanData); |
| 1350 | + } |
| 1351 | + |
| 1352 | + private static Stream<Arguments> setStatusArgs() { |
| 1353 | + return Stream.of( |
| 1354 | + // Default status is UNSET |
| 1355 | + Arguments.of(spanConsumer(span -> {}), StatusData.unset()), |
| 1356 | + // Simple cases |
| 1357 | + Arguments.of(spanConsumer(span -> span.setStatus(StatusCode.OK)), StatusData.ok()), |
| 1358 | + Arguments.of(spanConsumer(span -> span.setStatus(StatusCode.ERROR)), StatusData.error()), |
| 1359 | + // UNSET is ignored |
| 1360 | + Arguments.of( |
| 1361 | + spanConsumer(span -> span.setStatus(StatusCode.OK).setStatus(StatusCode.UNSET)), |
| 1362 | + StatusData.ok()), |
| 1363 | + Arguments.of( |
| 1364 | + spanConsumer(span -> span.setStatus(StatusCode.ERROR).setStatus(StatusCode.UNSET)), |
| 1365 | + StatusData.error()), |
| 1366 | + // Description is ignored unless status is ERROR |
| 1367 | + Arguments.of( |
| 1368 | + spanConsumer(span -> span.setStatus(StatusCode.UNSET, "description")), |
| 1369 | + StatusData.unset()), |
| 1370 | + Arguments.of( |
| 1371 | + spanConsumer(span -> span.setStatus(StatusCode.OK, "description")), StatusData.ok()), |
| 1372 | + Arguments.of( |
| 1373 | + spanConsumer(span -> span.setStatus(StatusCode.ERROR, "description")), |
| 1374 | + StatusData.create(StatusCode.ERROR, "description")), |
| 1375 | + // ERROR is ignored if status is OK |
| 1376 | + Arguments.of( |
| 1377 | + spanConsumer( |
| 1378 | + span -> span.setStatus(StatusCode.OK).setStatus(StatusCode.ERROR, "description")), |
| 1379 | + StatusData.ok()), |
| 1380 | + // setStatus ignored after span is ended |
| 1381 | + Arguments.of( |
| 1382 | + spanConsumer( |
| 1383 | + span -> { |
| 1384 | + span.end(); |
| 1385 | + span.setStatus(StatusCode.OK); |
| 1386 | + }), |
| 1387 | + StatusData.unset()), |
| 1388 | + Arguments.of( |
| 1389 | + spanConsumer( |
| 1390 | + span -> { |
| 1391 | + span.end(); |
| 1392 | + span.setStatus(StatusCode.ERROR); |
| 1393 | + }), |
| 1394 | + StatusData.unset())); |
| 1395 | + } |
| 1396 | + |
| 1397 | + private static Consumer<Span> spanConsumer(Consumer<Span> spanConsumer) { |
| 1398 | + return spanConsumer; |
1348 | 1399 | }
|
1349 | 1400 |
|
1350 | 1401 | private SdkSpan createTestSpanWithAttributes(Map<AttributeKey, Object> attributes) {
|
|
0 commit comments