diff --git a/buildSrc/call-site-instrumentation-plugin/src/main/java/datadog/trace/plugin/csi/PluginApplication.java b/buildSrc/call-site-instrumentation-plugin/src/main/java/datadog/trace/plugin/csi/PluginApplication.java index 341c66f15ad..69b68f06d10 100644 --- a/buildSrc/call-site-instrumentation-plugin/src/main/java/datadog/trace/plugin/csi/PluginApplication.java +++ b/buildSrc/call-site-instrumentation-plugin/src/main/java/datadog/trace/plugin/csi/PluginApplication.java @@ -50,14 +50,13 @@ private static Function generateAdviceClo if (result.isSuccess()) { Extension.EXTENSIONS.stream() .filter(ext -> ext.appliesTo(spec)) - .forEach( - ext -> { - try { - ext.apply(configuration, result); - } catch (final Throwable e) { - result.addError(e, ErrorCode.EXTENSION_ERROR, ext.getClass()); - } - }); + .forEach(ext -> { + try { + ext.apply(configuration, result); + } catch (final Throwable e) { + result.addError(e, ErrorCode.EXTENSION_ERROR, ext.getClass()); + } + }); } return result; }; diff --git a/buildSrc/call-site-instrumentation-plugin/src/main/java/datadog/trace/plugin/csi/impl/AsmSpecificationBuilder.java b/buildSrc/call-site-instrumentation-plugin/src/main/java/datadog/trace/plugin/csi/impl/AsmSpecificationBuilder.java index 00a93721f51..dc1add815b4 100644 --- a/buildSrc/call-site-instrumentation-plugin/src/main/java/datadog/trace/plugin/csi/impl/AsmSpecificationBuilder.java +++ b/buildSrc/call-site-instrumentation-plugin/src/main/java/datadog/trace/plugin/csi/impl/AsmSpecificationBuilder.java @@ -273,13 +273,10 @@ public void visit(final String key, final Object value) { @Override public void visitEnd() { - adviceData.forEach( - (adviceCtor, list) -> - list.stream() - .map( - data -> - adviceCtor.build(advice, parameters, data.signature, data.invokeDynamic)) - .forEach(spec.advices::add)); + adviceData.forEach((adviceCtor, list) -> + list.stream() + .map(data -> adviceCtor.build(advice, parameters, data.signature, data.invokeDynamic)) + .forEach(spec.advices::add)); } } diff --git a/buildSrc/call-site-instrumentation-plugin/src/main/java/datadog/trace/plugin/csi/impl/ext/IastExtension.java b/buildSrc/call-site-instrumentation-plugin/src/main/java/datadog/trace/plugin/csi/impl/ext/IastExtension.java index 9373073291c..10a59be28d1 100644 --- a/buildSrc/call-site-instrumentation-plugin/src/main/java/datadog/trace/plugin/csi/impl/ext/IastExtension.java +++ b/buildSrc/call-site-instrumentation-plugin/src/main/java/datadog/trace/plugin/csi/impl/ext/IastExtension.java @@ -466,11 +466,10 @@ private AdviceMetadata(final AnnotationExpr kind, final Expression tag) { private static AdviceMetadata findAdviceMetadata(final BodyDeclaration target) { return target.getAnnotations().stream() .filter(AdviceMetadata::isAdviceAnnotation) - .map( - annotation -> { - final Expression tag = getAnnotationExpression(annotation); - return new AdviceMetadata(annotation, tag); - }) + .map(annotation -> { + final Expression tag = getAnnotationExpression(annotation); + return new AdviceMetadata(annotation, tag); + }) .findFirst() .orElse(null); } diff --git a/buildSrc/call-site-instrumentation-plugin/src/test/java/datadog/trace/plugin/csi/impl/BaseCsiPluginTest.java b/buildSrc/call-site-instrumentation-plugin/src/test/java/datadog/trace/plugin/csi/impl/BaseCsiPluginTest.java index a2bd158d20b..af5639096de 100644 --- a/buildSrc/call-site-instrumentation-plugin/src/test/java/datadog/trace/plugin/csi/impl/BaseCsiPluginTest.java +++ b/buildSrc/call-site-instrumentation-plugin/src/test/java/datadog/trace/plugin/csi/impl/BaseCsiPluginTest.java @@ -24,11 +24,10 @@ public abstract class BaseCsiPluginTest { protected static void assertNoErrors(HasErrors hasErrors) { List errors = hasErrors.getErrors().stream() - .map( - error -> { - String causeString = error.getCause() == null ? "-" : error.getCauseString(); - return error.getMessage() + ": " + causeString; - }) + .map(error -> { + String causeString = error.getCause() == null ? "-" : error.getCauseString(); + return error.getMessage() + ": " + causeString; + }) .collect(Collectors.toList()); assertEquals(Collections.emptyList(), errors); } diff --git a/buildSrc/call-site-instrumentation-plugin/src/test/java/datadog/trace/plugin/csi/impl/assertion/AssertBuilder.java b/buildSrc/call-site-instrumentation-plugin/src/test/java/datadog/trace/plugin/csi/impl/assertion/AssertBuilder.java index 42e87842adc..4bb7d824af0 100644 --- a/buildSrc/call-site-instrumentation-plugin/src/test/java/datadog/trace/plugin/csi/impl/assertion/AssertBuilder.java +++ b/buildSrc/call-site-instrumentation-plugin/src/test/java/datadog/trace/plugin/csi/impl/assertion/AssertBuilder.java @@ -53,42 +53,38 @@ public CallSiteAssert build() { protected Set> getSpi(ClassOrInterfaceDeclaration type) { return type.getAnnotationByName("AutoService") - .>>map( - annotation -> - annotation.asNormalAnnotationExpr().getPairs().stream() - .filter(pair -> pair.getNameAsString().equals("value")) - .flatMap( - pair -> - pair.getValue().asArrayInitializerExpr().getValues().stream() - .map( - value -> - value - .asClassExpr() - .getType() - .resolve() - .asReferenceType() - .getTypeDeclaration() - .get() - .getQualifiedName())) - .map(AssertBuilder::loadClass) - .collect(Collectors.toSet())) + .>>map(annotation -> + annotation.asNormalAnnotationExpr().getPairs().stream() + .filter(pair -> pair.getNameAsString().equals("value")) + .flatMap(pair -> + pair.getValue().asArrayInitializerExpr().getValues().stream() + .map(value -> + value + .asClassExpr() + .getType() + .resolve() + .asReferenceType() + .getTypeDeclaration() + .get() + .getQualifiedName())) + .map(AssertBuilder::loadClass) + .collect(Collectors.toSet())) .orElse(Collections.emptySet()); } protected Set> getInterfaces(ClassOrInterfaceDeclaration type) { return type.getImplementedTypes().stream() - .map( - implementedType -> { - String qualifiedName = - implementedType - .asClassOrInterfaceType() - .resolve() - .asReferenceType() - .getTypeDeclaration() - .get() - .getQualifiedName(); - return loadClass(qualifiedName); - }) + .map(implementedType -> { + String qualifiedName = + implementedType + .asClassOrInterfaceType() + .resolve() + .asReferenceType() + .getTypeDeclaration() + .get() + .getQualifiedName(); + return loadClass(qualifiedName); + }) .collect(Collectors.toSet()); } @@ -139,11 +135,10 @@ protected Set> getHelpers(ClassOrInterfaceDeclaration type) { return methodCalls.stream() .filter(methodCall -> methodCall.getNameAsString().equals("addHelpers")) .flatMap(methodCall -> methodCall.getArguments().stream()) - .map( - arg -> { - String className = arg.asStringLiteralExpr().asString(); - return typeResolver().resolveType(classNameToType(className)); - }) + .map(arg -> { + String className = arg.asStringLiteralExpr().asString(); + return typeResolver().resolveType(classNameToType(className)); + }) .collect(Collectors.toSet()); } @@ -151,33 +146,30 @@ protected List getAdvices(ClassOrInterfaceDeclaration type) { MethodDeclaration acceptMethod = type.getMethodsByName("accept").get(0); return getMethodCalls(acceptMethod).stream() .filter(methodCall -> methodCall.getNameAsString().equals("addAdvice")) - .map( - methodCall -> { - String adviceType = methodCall.getArgument(0).asFieldAccessExpr().getNameAsString(); - String owner = methodCall.getArgument(1).asStringLiteralExpr().asString(); - String method = methodCall.getArgument(2).asStringLiteralExpr().asString(); - String descriptor = methodCall.getArgument(3).asStringLiteralExpr().asString(); - List statements = - methodCall - .getArgument(4) - .asLambdaExpr() - .getBody() - .asBlockStmt() - .getStatements() - .stream() - .map(Object::toString) - .collect(Collectors.toList()); - return new AdviceAssert(adviceType, owner, method, descriptor, statements); - }) + .map(methodCall -> { + String adviceType = methodCall.getArgument(0).asFieldAccessExpr().getNameAsString(); + String owner = methodCall.getArgument(1).asStringLiteralExpr().asString(); + String method = methodCall.getArgument(2).asStringLiteralExpr().asString(); + String descriptor = methodCall.getArgument(3).asStringLiteralExpr().asString(); + List statements = + methodCall + .getArgument(4) + .asLambdaExpr() + .getBody() + .asBlockStmt() + .getStatements() + .stream() + .map(Object::toString) + .collect(Collectors.toList()); + return new AdviceAssert(adviceType, owner, method, descriptor, statements); + }) .collect(Collectors.toList()); } protected static List getMethodCalls(MethodDeclaration method) { return method.getBody().get().asBlockStmt().getStatements().stream() - .filter( - stmt -> - stmt.isExpressionStmt() - && stmt.asExpressionStmt().getExpression().isMethodCallExpr()) + .filter(stmt -> + stmt.isExpressionStmt() && stmt.asExpressionStmt().getExpression().isMethodCallExpr()) .map(stmt -> stmt.asExpressionStmt().getExpression().asMethodCallExpr()) .collect(Collectors.toList()); } diff --git a/buildSrc/call-site-instrumentation-plugin/src/test/java/datadog/trace/plugin/csi/impl/ext/IastExtensionTest.java b/buildSrc/call-site-instrumentation-plugin/src/test/java/datadog/trace/plugin/csi/impl/ext/IastExtensionTest.java index cf42e18cbd5..7e8f5119334 100644 --- a/buildSrc/call-site-instrumentation-plugin/src/test/java/datadog/trace/plugin/csi/impl/ext/IastExtensionTest.java +++ b/buildSrc/call-site-instrumentation-plugin/src/test/java/datadog/trace/plugin/csi/impl/ext/IastExtensionTest.java @@ -272,33 +272,27 @@ public IastExtensionCallSiteAssert build() { protected List getAdvices(ClassOrInterfaceDeclaration type) { return getMethodCalls(type.getMethodsByName("accept").get(0)).stream() .filter(methodCall -> methodCall.getNameAsString().equals("addAdvice")) - .map( - methodCall -> { - String owner = methodCall.getArgument(1).asStringLiteralExpr().asString(); - String method = methodCall.getArgument(2).asStringLiteralExpr().asString(); - String descriptor = methodCall.getArgument(3).asStringLiteralExpr().asString(); - List statements = - methodCall - .getArgument(4) - .asLambdaExpr() - .getBody() - .asBlockStmt() - .getStatements(); - IfStmt instrumentedStmt = statements.get(0).asIfStmt(); - IfStmt executedStmt = statements.get(1).asIfStmt(); - List nonIfStatements = - statements.stream() - .filter(stmt -> !stmt.isIfStmt()) - .map(Object::toString) - .collect(Collectors.toList()); - return new IastExtensionAdviceAssert( - owner, - method, - descriptor, - buildMetricAsserter(instrumentedStmt), - buildMetricAsserter(executedStmt), - nonIfStatements); - }) + .map(methodCall -> { + String owner = methodCall.getArgument(1).asStringLiteralExpr().asString(); + String method = methodCall.getArgument(2).asStringLiteralExpr().asString(); + String descriptor = methodCall.getArgument(3).asStringLiteralExpr().asString(); + List statements = + methodCall.getArgument(4).asLambdaExpr().getBody().asBlockStmt().getStatements(); + IfStmt instrumentedStmt = statements.get(0).asIfStmt(); + IfStmt executedStmt = statements.get(1).asIfStmt(); + List nonIfStatements = + statements.stream() + .filter(stmt -> !stmt.isIfStmt()) + .map(Object::toString) + .collect(Collectors.toList()); + return new IastExtensionAdviceAssert( + owner, + method, + descriptor, + buildMetricAsserter(instrumentedStmt), + buildMetricAsserter(executedStmt), + nonIfStatements); + }) .collect(Collectors.toList()); } diff --git a/communication/src/main/java/datadog/communication/BackendApiFactory.java b/communication/src/main/java/datadog/communication/BackendApiFactory.java index bc54da66460..0242c99f62f 100644 --- a/communication/src/main/java/datadog/communication/BackendApiFactory.java +++ b/communication/src/main/java/datadog/communication/BackendApiFactory.java @@ -275,14 +275,13 @@ OkHttpClient configureHttpClient(final OkHttpClient httpClient) { builder.retryOnConnectionFailure(false).followRedirects(false).followSslRedirects(false); } if (!requestHeaders.isEmpty()) { - builder.addInterceptor( - chain -> { - final Request.Builder requestBuilder = chain.request().newBuilder(); - for (Map.Entry header : requestHeaders.entrySet()) { - requestBuilder.header(header.getKey(), header.getValue()); - } - return chain.proceed(requestBuilder.build()); - }); + builder.addInterceptor(chain -> { + final Request.Builder requestBuilder = chain.request().newBuilder(); + for (Map.Entry header : requestHeaders.entrySet()) { + requestBuilder.header(header.getKey(), header.getValue()); + } + return chain.proceed(requestBuilder.build()); + }); } return builder.build(); } diff --git a/communication/src/main/java/datadog/communication/ddagent/SharedCommunicationObjects.java b/communication/src/main/java/datadog/communication/ddagent/SharedCommunicationObjects.java index 73e9fbc037c..74ef4c85b0b 100644 --- a/communication/src/main/java/datadog/communication/ddagent/SharedCommunicationObjects.java +++ b/communication/src/main/java/datadog/communication/ddagent/SharedCommunicationObjects.java @@ -102,14 +102,13 @@ public void createRemaining(Config config) { private OkHttpClient injectTestAgentSessionHeaderInterceptor(String testSessionToken) { return agentHttpClient .newBuilder() - .addInterceptor( - chain -> - chain.proceed( - chain - .request() - .newBuilder() - .header(X_DATADOG_TEST_SESSION_TOKEN, testSessionToken) - .build())) + .addInterceptor(chain -> + chain.proceed( + chain + .request() + .newBuilder() + .header(X_DATADOG_TEST_SESSION_TOKEN, testSessionToken) + .build())) .build(); } diff --git a/communication/src/main/java/datadog/communication/http/OkHttpUtils.java b/communication/src/main/java/datadog/communication/http/OkHttpUtils.java index 44105ae772d..7172c757263 100644 --- a/communication/src/main/java/datadog/communication/http/OkHttpUtils.java +++ b/communication/src/main/java/datadog/communication/http/OkHttpUtils.java @@ -156,12 +156,11 @@ private static OkHttpClient buildHttpClient( final OkHttpClient.Builder builder = new OkHttpClient.Builder(); try { - builder.eventListenerFactory( - call -> { - Request request = call.request(); - CustomListener listener = request.tag(CustomListener.class); - return listener != null ? listener : EventListener.NONE; - }); + builder.eventListenerFactory(call -> { + Request request = call.request(); + CustomListener listener = request.tag(CustomListener.class); + return listener != null ? listener : EventListener.NONE; + }); } catch (NoSuchMethodError e) { // A workaround for OKHTTP instrumentation tests // where the version of OKHTTP conflicts with the one used in this module. @@ -213,17 +212,12 @@ private static OkHttpClient buildHttpClient( if (proxyHost != null) { builder.proxy(new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxyHost, proxyPort))); if (proxyUsername != null) { - builder.proxyAuthenticator( - (route, response) -> { - final String credential = - Credentials.basic(proxyUsername, proxyPassword == null ? "" : proxyPassword); - - return response - .request() - .newBuilder() - .header("Proxy-Authorization", credential) - .build(); - }); + builder.proxyAuthenticator((route, response) -> { + final String credential = + Credentials.basic(proxyUsername, proxyPassword == null ? "" : proxyPassword); + + return response.request().newBuilder().header("Proxy-Authorization", credential).build(); + }); } } diff --git a/communication/src/test/java/datadog/communication/SendOnceTransportTest.java b/communication/src/test/java/datadog/communication/SendOnceTransportTest.java index 9d761b98e90..32307a347d7 100644 --- a/communication/src/test/java/datadog/communication/SendOnceTransportTest.java +++ b/communication/src/test/java/datadog/communication/SendOnceTransportTest.java @@ -38,19 +38,18 @@ void setUp() throws IOException { // server. intakeClient = new OkHttpClient.Builder() - .addInterceptor( - chain -> { - final Request original = chain.request(); - final HttpUrl local = - original - .url() - .newBuilder() - .scheme("http") - .host(server.getHostName()) - .port(server.getPort()) - .build(); - return chain.proceed(original.newBuilder().url(local).build()); - }) + .addInterceptor(chain -> { + final Request original = chain.request(); + final HttpUrl local = + original + .url() + .newBuilder() + .scheme("http") + .host(server.getHostName()) + .port(server.getPort()) + .build(); + return chain.proceed(original.newBuilder().url(local).build()); + }) .build(); } diff --git a/communication/src/test/java/datadog/communication/serialization/GenerationalUtf8CacheTest.java b/communication/src/test/java/datadog/communication/serialization/GenerationalUtf8CacheTest.java index f7f9ff502dc..e38e95cda36 100644 --- a/communication/src/test/java/datadog/communication/serialization/GenerationalUtf8CacheTest.java +++ b/communication/src/test/java/datadog/communication/serialization/GenerationalUtf8CacheTest.java @@ -203,47 +203,45 @@ public void concurrentAccess_neverThrowsOrReturnsWrongBytes() throws Interrupted Thread[] readers = new Thread[threadCount]; for (int t = 0; t < threadCount; ++t) { readers[t] = - new Thread( - () -> { - try { - start.await(); - ThreadLocalRandom random = ThreadLocalRandom.current(); - for (int i = 0; i < iterationsPerThread && failure.get() == null; ++i) { - String value = values[random.nextInt(values.length)]; - byte[] result = cache.getUtf8(value); - if (!Arrays.equals(value.getBytes(StandardCharsets.UTF_8), result)) { - failure.compareAndSet( - null, - new AssertionError( - "getUtf8(\"" - + value - + "\") returned bytes for \"" - + new String(result, StandardCharsets.UTF_8) - + "\"")); - return; - } - } - } catch (Throwable e) { - failure.compareAndSet(null, e); - } finally { - readersRunning.decrementAndGet(); + new Thread(() -> { + try { + start.await(); + ThreadLocalRandom random = ThreadLocalRandom.current(); + for (int i = 0; i < iterationsPerThread && failure.get() == null; ++i) { + String value = values[random.nextInt(values.length)]; + byte[] result = cache.getUtf8(value); + if (!Arrays.equals(value.getBytes(StandardCharsets.UTF_8), result)) { + failure.compareAndSet( + null, + new AssertionError( + "getUtf8(\"" + + value + + "\") returned bytes for \"" + + new String(result, StandardCharsets.UTF_8) + + "\"")); + return; } - }); + } + } catch (Throwable e) { + failure.compareAndSet(null, e); + } finally { + readersRunning.decrementAndGet(); + } + }); } // Recalibrate in a tight loop for the duration, nulling decayed slots concurrently with reads. Thread recalibrator = - new Thread( - () -> { - try { - start.await(); - while (readersRunning.get() > 0 && failure.get() == null) { - cache.recalibrate(); - } - } catch (Throwable e) { - failure.compareAndSet(null, e); - } - }); + new Thread(() -> { + try { + start.await(); + while (readersRunning.get() > 0 && failure.get() == null) { + cache.recalibrate(); + } + } catch (Throwable e) { + failure.compareAndSet(null, e); + } + }); for (Thread reader : readers) { reader.start(); diff --git a/components/context/src/test/java/datadog/context/ContextContinuationTest.java b/components/context/src/test/java/datadog/context/ContextContinuationTest.java index 5f818332c89..5a9cea49389 100644 --- a/components/context/src/test/java/datadog/context/ContextContinuationTest.java +++ b/components/context/src/test/java/datadog/context/ContextContinuationTest.java @@ -152,14 +152,13 @@ void testResumeOnDifferentThread() { ExecutorService executor = Executors.newSingleThreadExecutor(); try { Future future = - executor.submit( - () -> { - assertEquals(root(), current()); // thread starts with root context - try (ContextScope scope = continuation.resume()) { - assertEquals(context, current()); - } - assertEquals(root(), current()); // restored after scope close - }); + executor.submit(() -> { + assertEquals(root(), current()); // thread starts with root context + try (ContextScope scope = continuation.resume()) { + assertEquals(context, current()); + } + assertEquals(root(), current()); // restored after scope close + }); assertDoesNotThrow(() -> future.get()); } finally { executor.shutdown(); @@ -188,27 +187,25 @@ public void onRelease(Context c) { ExecutorService executor = Executors.newFixedThreadPool(2); try { Future f1 = - executor.submit( - () -> { - try (ContextScope scope = continuation.resume()) { - bothResumed.countDown(); - closeFirst.await(); - } catch (InterruptedException e) { - Thread.currentThread().interrupt(); - } finally { - firstClosed.countDown(); - } - }); + executor.submit(() -> { + try (ContextScope scope = continuation.resume()) { + bothResumed.countDown(); + closeFirst.await(); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } finally { + firstClosed.countDown(); + } + }); Future f2 = - executor.submit( - () -> { - try (ContextScope scope = continuation.resume()) { - bothResumed.countDown(); - closeSecond.await(); - } catch (InterruptedException e) { - Thread.currentThread().interrupt(); - } - }); + executor.submit(() -> { + try (ContextScope scope = continuation.resume()) { + bothResumed.countDown(); + closeSecond.await(); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } + }); bothResumed.await(); assertTrue(events.isEmpty(), "release should not fire while scopes are open"); closeFirst.countDown(); diff --git a/components/context/src/test/java/datadog/context/ContextListenerExceptionTest.java b/components/context/src/test/java/datadog/context/ContextListenerExceptionTest.java index 160873e7103..2f1596f3f4c 100644 --- a/components/context/src/test/java/datadog/context/ContextListenerExceptionTest.java +++ b/components/context/src/test/java/datadog/context/ContextListenerExceptionTest.java @@ -21,12 +21,11 @@ public void onUpdate(Context before, Context after) { } }); Context context = root().with(TEST_KEY, "value"); - assertDoesNotThrow( - () -> { - try (ContextScope scope = context.attach()) { - assertEquals(context, current()); - } - }); + assertDoesNotThrow(() -> { + try (ContextScope scope = context.attach()) { + assertEquals(context, current()); + } + }); } @Test @@ -40,13 +39,12 @@ public void onCapture(Context c) { }); Context context = root().with(TEST_KEY, "value"); try (ContextScope scope = context.attach()) { - assertDoesNotThrow( - () -> { - ContextContinuation continuation = context.capture(); - assertNotNull(continuation); - assertEquals(context, continuation.context()); - continuation.release(); - }); + assertDoesNotThrow(() -> { + ContextContinuation continuation = context.capture(); + assertNotNull(continuation); + assertEquals(context, continuation.context()); + continuation.release(); + }); } } diff --git a/components/context/src/test/java/datadog/context/ContextManagerTest.java b/components/context/src/test/java/datadog/context/ContextManagerTest.java index 052c71914f0..31467e5fe66 100644 --- a/components/context/src/test/java/datadog/context/ContextManagerTest.java +++ b/components/context/src/test/java/datadog/context/ContextManagerTest.java @@ -151,29 +151,28 @@ void testClosingScopeOnDifferentThread(boolean resumed) throws Exception { try (ContextScope ignored = previous.attach()) { try (ContextScope scope = resumed ? context.capture().resume() : context.attach()) { executor - .submit( - () -> { - try { - try (ContextScope workerScope = unrelated.attach()) { - // A foreign close must leave both threads' contexts intact. - scope.close(); - assertEquals(unrelated, current()); - } - assertEquals(root(), current()); + .submit(() -> { + try { + try (ContextScope workerScope = unrelated.attach()) { + // A foreign close must leave both threads' contexts intact. + scope.close(); + assertEquals(unrelated, current()); + } + assertEquals(root(), current()); - // Simulate restoring a coroutine's context on its new thread. - context.swap(); - scope.close(); - assertEquals(previous, current()); + // Simulate restoring a coroutine's context on its new thread. + context.swap(); + scope.close(); + assertEquals(previous, current()); - // Migrated scope stays closed, even if its context is restored again. - context.swap(); - scope.close(); - assertEquals(context, current()); - } finally { - root().swap(); - } - }) + // Migrated scope stays closed, even if its context is restored again. + context.swap(); + scope.close(); + assertEquals(context, current()); + } finally { + root().swap(); + } + }) .get(10, TimeUnit.SECONDS); assertEquals(context, current()); } finally { @@ -199,59 +198,57 @@ void testThreadIndependence() { * Create first executor. */ Future future1 = - executor.submit( - () -> { - try { - // Fist step: check empty context + executor.submit(() -> { + try { + // Fist step: check empty context + phaser.arriveAndAwaitAdvance(); + assertEquals(root(), current()); + // Second step: set context on first executor + Context context1 = root().with(STRING_KEY, "executor1"); + try (ContextScope ignored1 = context1.attach()) { + phaser.arriveAndAwaitAdvance(); + assertEquals(context1, current()); + // Third step: set context on second executor + phaser.arriveAndAwaitAdvance(); + assertEquals(context1, current()); + // Fourth step: set child context on first executor + Context context11 = context1.with(STRING_KEY, "executor1.1"); + try (ContextScope ignored11 = context11.attach()) { phaser.arriveAndAwaitAdvance(); - assertEquals(root(), current()); - // Second step: set context on first executor - Context context1 = root().with(STRING_KEY, "executor1"); - try (ContextScope ignored1 = context1.attach()) { - phaser.arriveAndAwaitAdvance(); - assertEquals(context1, current()); - // Third step: set context on second executor - phaser.arriveAndAwaitAdvance(); - assertEquals(context1, current()); - // Fourth step: set child context on first executor - Context context11 = context1.with(STRING_KEY, "executor1.1"); - try (ContextScope ignored11 = context11.attach()) { - phaser.arriveAndAwaitAdvance(); - assertEquals(context11, current()); - } - } - } finally { - // Complete the execution - phaser.arriveAndDeregister(); + assertEquals(context11, current()); } - }); + } + } finally { + // Complete the execution + phaser.arriveAndDeregister(); + } + }); /* * Create second executor. */ Future future2 = - executor.submit( - () -> { - try { - // First step: check empty context - phaser.arriveAndAwaitAdvance(); - assertEquals(root(), current()); - // Second step: set context on first executor - phaser.arriveAndAwaitAdvance(); - assertEquals(root(), current()); - // Third step: set context on second executor - Context context2 = root().with(STRING_KEY, "executor2"); - try (ContextScope ignored2 = context2.attach()) { - phaser.arriveAndAwaitAdvance(); - assertEquals(context2, current()); - // Fourth step: set child context on first executor - phaser.arriveAndAwaitAdvance(); - assertEquals(context2, current()); - } - } finally { - // Complete the execution - phaser.arriveAndDeregister(); - } - }); + executor.submit(() -> { + try { + // First step: check empty context + phaser.arriveAndAwaitAdvance(); + assertEquals(root(), current()); + // Second step: set context on first executor + phaser.arriveAndAwaitAdvance(); + assertEquals(root(), current()); + // Third step: set context on second executor + Context context2 = root().with(STRING_KEY, "executor2"); + try (ContextScope ignored2 = context2.attach()) { + phaser.arriveAndAwaitAdvance(); + assertEquals(context2, current()); + // Fourth step: set child context on first executor + phaser.arriveAndAwaitAdvance(); + assertEquals(context2, current()); + } + } finally { + // Complete the execution + phaser.arriveAndDeregister(); + } + }); /* * Run main thread. */ diff --git a/components/environment/src/test/java/datadog/environment/ThreadSupportTest.java b/components/environment/src/test/java/datadog/environment/ThreadSupportTest.java index be2032c5470..63488e38162 100644 --- a/components/environment/src/test/java/datadog/environment/ThreadSupportTest.java +++ b/components/environment/src/test/java/datadog/environment/ThreadSupportTest.java @@ -59,11 +59,10 @@ void testVirtualThread() { static void assertVirtualThread(ExecutorService executorService, boolean expected) { Future futureCurrent = executorService.submit(() -> ThreadSupport.isVirtual()); Future futureGiven = - executorService.submit( - () -> { - Thread thread = Thread.currentThread(); - return ThreadSupport.isVirtual(thread); - }); + executorService.submit(() -> { + Thread thread = Thread.currentThread(); + return ThreadSupport.isVirtual(thread); + }); try { assertEquals(expected, futureCurrent.get(), "invalid current thread virtual status"); assertEquals(expected, futureGiven.get(), "invalid given thread virtual status"); diff --git a/components/http/http-api/src/testFixtures/java/datadog/http/client/HttpClientAsyncTest.java b/components/http/http-api/src/testFixtures/java/datadog/http/client/HttpClientAsyncTest.java index 30c2df16168..f53db00ebd8 100644 --- a/components/http/http-api/src/testFixtures/java/datadog/http/client/HttpClientAsyncTest.java +++ b/components/http/http-api/src/testFixtures/java/datadog/http/client/HttpClientAsyncTest.java @@ -192,14 +192,13 @@ void testExecuteAsyncComposition() throws Exception { CompletableFuture future = this.client .executeAsync(request) - .thenApply( - response -> { - try { - return Integer.parseInt(response.bodyAsString().trim()); - } catch (IOException e) { - throw new RuntimeException(e); - } - }); + .thenApply(response -> { + try { + return Integer.parseInt(response.bodyAsString().trim()); + } catch (IOException e) { + throw new RuntimeException(e); + } + }); Integer result = future.get(TIMEOUT_SECONDS, SECONDS); assertEquals(42, result); diff --git a/components/native-loader/src/test/java/datadog/nativeloader/NativeLoaderTest.java b/components/native-loader/src/test/java/datadog/nativeloader/NativeLoaderTest.java index 0a44b91f912..00125cda98b 100644 --- a/components/native-loader/src/test/java/datadog/nativeloader/NativeLoaderTest.java +++ b/components/native-loader/src/test/java/datadog/nativeloader/NativeLoaderTest.java @@ -169,10 +169,9 @@ public void resolutionFailure_in_LibraryResolver() { NativeLoader loader = NativeLoader.builder() - .libResolver( - (pathLocator, platformSpec, component, libName) -> { - throw exception; - }) + .libResolver((pathLocator, platformSpec, component, libName) -> { + throw exception; + }) .build(); TestLibraryLoadingListener scopedListener = @@ -192,10 +191,9 @@ public void resolutionFailure_in_PathLocator() { NativeLoader loader = NativeLoader.builder() .addListener(sharedListener) - .pathLocator( - (comp, path) -> { - throw exception; - }) + .pathLocator((comp, path) -> { + throw exception; + }) .build(); sharedListener.expectResolveDynamicFailure("dummy", exception); @@ -554,17 +552,16 @@ static Path jarHelper(Path dir) throws IOException { try (JarOutputStream jarStream = new JarOutputStream(Files.newOutputStream(jarPath))) { Files.walk(dir) .filter(path -> !Files.isDirectory(path)) - .forEach( - path -> { - try { - JarEntry jarEntry = new JarEntry(dir.relativize(path).toString()); - jarStream.putNextEntry(jarEntry); - Files.copy(path, jarStream); - jarStream.closeEntry(); - } catch (IOException e) { - throw new UncheckedIOException(e); - } - }); + .forEach(path -> { + try { + JarEntry jarEntry = new JarEntry(dir.relativize(path).toString()); + jarStream.putNextEntry(jarEntry); + Files.copy(path, jarStream); + jarStream.closeEntry(); + } catch (IOException e) { + throw new UncheckedIOException(e); + } + }); } return jarPath; } diff --git a/components/native-loader/src/test/java/datadog/nativeloader/TestLibraryLoadingListener.java b/components/native-loader/src/test/java/datadog/nativeloader/TestLibraryLoadingListener.java index 65af2e522a0..3d5421b5e3f 100644 --- a/components/native-loader/src/test/java/datadog/nativeloader/TestLibraryLoadingListener.java +++ b/components/native-loader/src/test/java/datadog/nativeloader/TestLibraryLoadingListener.java @@ -22,7 +22,7 @@ public final class TestLibraryLoadingListener implements LibraryLoadingListener // By design, listeners are supposed to receive the underlying cause not a LibraryLoadException // directly static final ThrowableCheck NOT_LIB_LOAD_EXCEPTION = - (t) -> { + t -> { assertFalse( t instanceof LibraryLoadException, "LibraryLoadException - instead of underlying cause"); @@ -92,7 +92,7 @@ public TestLibraryLoadingListener expectResolveDynamicFailure(String expectedLib public TestLibraryLoadingListener expectResolveDynamicFailure( String expectedLibName, Throwable expectedThrowable) { return this.expectResolveDynamicFailure( - new LibCheck(expectedLibName), (t) -> assertSame(expectedThrowable, t)); + new LibCheck(expectedLibName), t -> assertSame(expectedThrowable, t)); } private TestLibraryLoadingListener expectResolveDynamicFailure(LibCheck libCheck) { @@ -282,10 +282,8 @@ public void onResolveDynamic( String libName, boolean isPreloaded, URL optionalUrl) { - this.nextCheck( - check -> - check.onResolveDynamic( - platformSpec, optionalComponent, libName, isPreloaded, optionalUrl)); + this.nextCheck(check -> + check.onResolveDynamic(platformSpec, optionalComponent, libName, isPreloaded, optionalUrl)); } @Override @@ -294,9 +292,8 @@ public void onResolveDynamicFailure( String optionalComponent, String libName, Throwable optionalCause) { - this.nextCheck( - check -> - check.onResolveDynamicFailure(platformSpec, optionalComponent, libName, optionalCause)); + this.nextCheck(check -> + check.onResolveDynamicFailure(platformSpec, optionalComponent, libName, optionalCause)); } @Override @@ -306,9 +303,8 @@ public void onLoad( String libName, boolean isPreloaded, Path optionalLibPath) { - this.nextCheck( - check -> - check.onLoad(platformSpec, optionalComponent, libName, isPreloaded, optionalLibPath)); + this.nextCheck(check -> + check.onLoad(platformSpec, optionalComponent, libName, isPreloaded, optionalLibPath)); } @Override @@ -336,10 +332,9 @@ public void onTempFileCreationFailure( Path tempDir, String libExt, Throwable optionalCause) { - this.nextCheck( - check -> - check.onTempFileCreationFailure( - platformSpec, optionalComponent, libName, tempDir, libExt, optionalCause)); + this.nextCheck(check -> + check.onTempFileCreationFailure( + platformSpec, optionalComponent, libName, tempDir, libExt, optionalCause)); } @Override diff --git a/dd-java-agent/agent-aiguard/src/test/java/com/datadog/aiguard/AIGuardContextPropagationTest.java b/dd-java-agent/agent-aiguard/src/test/java/com/datadog/aiguard/AIGuardContextPropagationTest.java index 20fa2076010..54161b1a3da 100644 --- a/dd-java-agent/agent-aiguard/src/test/java/com/datadog/aiguard/AIGuardContextPropagationTest.java +++ b/dd-java-agent/agent-aiguard/src/test/java/com/datadog/aiguard/AIGuardContextPropagationTest.java @@ -76,29 +76,28 @@ void isolatesHttpWorkAndRestoresCaller( Call call = mock(Call.class); when(client.newCall(any(Request.class))).thenReturn(call); when(call.execute()) - .thenAnswer( - invocation -> { - DDSpan span = (DDSpan) tracer.activeSpan(); - assertEquals( - scopeDepthLimit == 1 ? "parent" : "ai_guard", span.getOperationName().toString()); - assertFalse(tracer.isAsyncPropagationEnabled()); - if (outcome == Outcome.ERROR) { - throw new IOException("Transport failed"); - } - String action = outcome == Outcome.BLOCK ? "DENY" : "ALLOW"; - return new Response.Builder() - .request(new Request.Builder().url(url).build()) - .protocol(Protocol.HTTP_1_1) - .code(200) - .message("OK") - .body( - ResponseBody.create( - MediaType.get("application/json"), - "{\"data\":{\"attributes\":{\"action\":\"" - + action - + "\",\"is_blocking_enabled\":true}}}")) - .build(); - }); + .thenAnswer(invocation -> { + DDSpan span = (DDSpan) tracer.activeSpan(); + assertEquals( + scopeDepthLimit == 1 ? "parent" : "ai_guard", span.getOperationName().toString()); + assertFalse(tracer.isAsyncPropagationEnabled()); + if (outcome == Outcome.ERROR) { + throw new IOException("Transport failed"); + } + String action = outcome == Outcome.BLOCK ? "DENY" : "ALLOW"; + return new Response.Builder() + .request(new Request.Builder().url(url).build()) + .protocol(Protocol.HTTP_1_1) + .code(200) + .message("OK") + .body( + ResponseBody.create( + MediaType.get("application/json"), + "{\"data\":{\"attributes\":{\"action\":\"" + + action + + "\",\"is_blocking_enabled\":true}}}")) + .build(); + }); AIGuardInternal evaluator = new AIGuardInternal(url, emptyMap(), client); List messages = singletonList(AIGuard.Message.message("user", "Hello")); AgentSpan parent = tracer.startSpan("test", "parent"); diff --git a/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/Agent.java b/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/Agent.java index 8ca910dde7c..2e903b698aa 100644 --- a/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/Agent.java +++ b/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/Agent.java @@ -1625,11 +1625,10 @@ private static boolean startProfilingAgent( private static void initProfilerContext() { log.debug("Scheduling profiler context initialization"); - WithGlobalTracer.registerOrExecute( - tracer -> { - log.debug("Initializing profiler context integration"); - tracer.getProfilingContext().onStart(); - }); + WithGlobalTracer.registerOrExecute(tracer -> { + log.debug("Initializing profiler context integration"); + tracer.getProfilingContext().onStart(); + }); } private static boolean isAwsLambdaRuntime() { diff --git a/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/AgentJarIndex.java b/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/AgentJarIndex.java index 5350933897c..48ade080f1d 100644 --- a/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/AgentJarIndex.java +++ b/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/AgentJarIndex.java @@ -115,16 +115,15 @@ void buildIndex() throws IOException { .map(resourcesDir::relativize) .sorted() .filter(entry -> entry.getNameCount() >= 2) - .forEach( - entry -> { - String prefix = entry.getName(0) + "/"; - int prefixId = prefixIdFor(prefix); - String entryKey = computeEntryKey(entry.subpath(1, entry.getNameCount())); - if (null != entryKey && seen.add(prefixId + "\0" + entryKey)) { - collectedEntryKeys.add(entryKey); - collectedPrefixIds.add(prefixId); - } - }); + .forEach(entry -> { + String prefix = entry.getName(0) + "/"; + int prefixId = prefixIdFor(prefix); + String entryKey = computeEntryKey(entry.subpath(1, entry.getNameCount())); + if (null != entryKey && seen.add(prefixId + "\0" + entryKey)) { + collectedEntryKeys.add(entryKey); + collectedPrefixIds.add(prefixId); + } + }); } for (int i = 0; i < collectedEntryKeys.size(); i++) { diff --git a/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/java/concurrent/TPEHelper.java b/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/java/concurrent/TPEHelper.java index e95a6580849..6deb7af35a8 100644 --- a/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/java/concurrent/TPEHelper.java +++ b/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/java/concurrent/TPEHelper.java @@ -28,14 +28,13 @@ public final class TPEHelper { private static final ThreadLocal threadLocalScope; private static final ClassValue WRAP = - GenericClassValue.of( - input -> { - String className = input.getName(); - // We should always wrap anonymous lambda classes since we can't inject fields into - // them, and they can never be anything more than a _pure_ Runnable. They have '/' in - // their class name which is not allowed in 'normal' classes. - return className.indexOf('/', className.lastIndexOf('.')) > 0; - }); + GenericClassValue.of(input -> { + String className = input.getName(); + // We should always wrap anonymous lambda classes since we can't inject fields into + // them, and they can never be anything more than a _pure_ Runnable. They have '/' in + // their class name which is not allowed in 'normal' classes. + return className.indexOf('/', className.lastIndexOf('.')) > 0; + }); static { InstrumenterConfig config = InstrumenterConfig.get(); diff --git a/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/java/lang/VirtualThreadState.java b/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/java/lang/VirtualThreadState.java index d3cef2cce48..bec26bd9fcb 100644 --- a/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/java/lang/VirtualThreadState.java +++ b/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/java/lang/VirtualThreadState.java @@ -33,12 +33,11 @@ */ public final class VirtualThreadState { private static final ClassValue PROPAGATE_CONTEXT = - GenericClassValue.of( - type -> { - String name = type.getName(); - return !name.equals("jdk.internal.net.http.HttpClientImpl$SelectorManager") - && !name.startsWith("java.lang.VirtualThread$$Lambda/"); - }); + GenericClassValue.of(type -> { + String name = type.getName(); + return !name.equals("jdk.internal.net.http.HttpClientImpl$SelectorManager") + && !name.startsWith("java.lang.VirtualThread$$Lambda/"); + }); /** Internal selector and virtual-thread timeout tasks do not consume the creating context. */ public static boolean shouldPropagateContext(Runnable task) { diff --git a/dd-java-agent/agent-bootstrap/src/test/java/datadog/trace/bootstrap/BoxedContextStoresForkedTest.java b/dd-java-agent/agent-bootstrap/src/test/java/datadog/trace/bootstrap/BoxedContextStoresForkedTest.java index 3b5918647c5..46ae6dbc22e 100644 --- a/dd-java-agent/agent-bootstrap/src/test/java/datadog/trace/bootstrap/BoxedContextStoresForkedTest.java +++ b/dd-java-agent/agent-bootstrap/src/test/java/datadog/trace/bootstrap/BoxedContextStoresForkedTest.java @@ -76,20 +76,19 @@ void concurrentAllocationAssignsOneContiguousIdPerName() throws Exception { for (int t = 0; t < THREAD_COUNT; t++) { // every thread requests the same names in the same order to maximise contention results.add( - executor.submit( - () -> { - start.await(); - int[] storeIds = new int[STORE_COUNT]; - for (int i = 0; i < STORE_COUNT; i++) { - int storeId = BoxedContextStores.getContextStoreId(keys.get(i), "context"); - // store must be visible as soon as its id is returned - BoxedContextStore store = BoxedContextStores.getContextStore(storeId); - assertNotNull(store, "Missing store for id " + storeId); - assertEquals(storeId, store.storeId); - storeIds[i] = storeId; - } - return storeIds; - })); + executor.submit(() -> { + start.await(); + int[] storeIds = new int[STORE_COUNT]; + for (int i = 0; i < STORE_COUNT; i++) { + int storeId = BoxedContextStores.getContextStoreId(keys.get(i), "context"); + // store must be visible as soon as its id is returned + BoxedContextStore store = BoxedContextStores.getContextStore(storeId); + assertNotNull(store, "Missing store for id " + storeId); + assertEquals(storeId, store.storeId); + storeIds[i] = storeId; + } + return storeIds; + })); } start.countDown(); diff --git a/dd-java-agent/agent-bootstrap/src/test/java/datadog/trace/bootstrap/DatadogClassLoaderTest.java b/dd-java-agent/agent-bootstrap/src/test/java/datadog/trace/bootstrap/DatadogClassLoaderTest.java index 376b035a043..f63339d383d 100644 --- a/dd-java-agent/agent-bootstrap/src/test/java/datadog/trace/bootstrap/DatadogClassLoaderTest.java +++ b/dd-java-agent/agent-bootstrap/src/test/java/datadog/trace/bootstrap/DatadogClassLoaderTest.java @@ -91,11 +91,10 @@ void agentClassloaderSuccessfullyLoadsClassesConcurrently() throws Exception { List> futures = new ArrayList<>(); for (int i = 0; i < 100; i++) { futures.add( - executorService.submit( - () -> { - ddLoader.loadClass("a.A"); - return null; - })); + executorService.submit(() -> { + ddLoader.loadClass("a.A"); + return null; + })); } for (Future future : futures) { try { diff --git a/dd-java-agent/agent-bootstrap/src/test/java/datadog/trace/bootstrap/FieldBackedContextStoresForkedTest.java b/dd-java-agent/agent-bootstrap/src/test/java/datadog/trace/bootstrap/FieldBackedContextStoresForkedTest.java index bed99c3811e..2fb265a2602 100644 --- a/dd-java-agent/agent-bootstrap/src/test/java/datadog/trace/bootstrap/FieldBackedContextStoresForkedTest.java +++ b/dd-java-agent/agent-bootstrap/src/test/java/datadog/trace/bootstrap/FieldBackedContextStoresForkedTest.java @@ -77,22 +77,19 @@ void concurrentAllocationAssignsOneContiguousIdPerName() throws Exception { for (int t = 0; t < THREAD_COUNT; t++) { // every thread requests the same names in the same order to maximise contention results.add( - executor.submit( - () -> { - start.await(); - int[] storeIds = new int[STORE_COUNT]; - for (int i = 0; i < STORE_COUNT; i++) { - int storeId = - FieldBackedContextStores.getContextStoreId(keys.get(i), "context"); - // store must be visible as soon as its id is returned - FieldBackedContextStore store = - FieldBackedContextStores.getContextStore(storeId); - assertNotNull(store, "Missing store for id " + storeId); - assertEquals(storeId, store.storeId); - storeIds[i] = storeId; - } - return storeIds; - })); + executor.submit(() -> { + start.await(); + int[] storeIds = new int[STORE_COUNT]; + for (int i = 0; i < STORE_COUNT; i++) { + int storeId = FieldBackedContextStores.getContextStoreId(keys.get(i), "context"); + // store must be visible as soon as its id is returned + FieldBackedContextStore store = FieldBackedContextStores.getContextStore(storeId); + assertNotNull(store, "Missing store for id " + storeId); + assertEquals(storeId, store.storeId); + storeIds[i] = storeId; + } + return storeIds; + })); } start.countDown(); diff --git a/dd-java-agent/agent-bootstrap/src/test/java/datadog/trace/bootstrap/instrumentation/classloading/ClassDefiningTest.java b/dd-java-agent/agent-bootstrap/src/test/java/datadog/trace/bootstrap/instrumentation/classloading/ClassDefiningTest.java index b3941727472..3b268a0d295 100644 --- a/dd-java-agent/agent-bootstrap/src/test/java/datadog/trace/bootstrap/instrumentation/classloading/ClassDefiningTest.java +++ b/dd-java-agent/agent-bootstrap/src/test/java/datadog/trace/bootstrap/instrumentation/classloading/ClassDefiningTest.java @@ -49,13 +49,12 @@ void observerReceivesCorrectArguments() { int[] capturedOffset = new int[1]; int[] capturedLength = new int[1]; - ClassDefining.observe( - (l, b, o, len) -> { - capturedLoader[0] = l; - capturedBytecode[0] = b; - capturedOffset[0] = o; - capturedLength[0] = len; - }); + ClassDefining.observe((l, b, o, len) -> { + capturedLoader[0] = l; + capturedBytecode[0] = b; + capturedOffset[0] = o; + capturedLength[0] = len; + }); ClassDefining.begin(loader, bytecode, 1, 3); diff --git a/dd-java-agent/agent-ci-visibility/civisibility-test-fixtures/src/main/java/datadog/trace/civisibility/CiVisibilitySmokeTest.java b/dd-java-agent/agent-ci-visibility/civisibility-test-fixtures/src/main/java/datadog/trace/civisibility/CiVisibilitySmokeTest.java index 2dc35bc1d5f..5637d27b5b8 100644 --- a/dd-java-agent/agent-ci-visibility/civisibility-test-fixtures/src/main/java/datadog/trace/civisibility/CiVisibilitySmokeTest.java +++ b/dd-java-agent/agent-ci-visibility/civisibility-test-fixtures/src/main/java/datadog/trace/civisibility/CiVisibilitySmokeTest.java @@ -385,10 +385,8 @@ protected static void verifySnapshots(List> logs, int expect Map snapshotContent = (Map) debuggerMap.get("snapshot"); assertNotNull(snapshotContent, "snapshot must not be null"); - requiredSnapshotFields.forEach( - field -> - assertTrue( - snapshotContent.containsKey(field), "snapshot must contain field: " + field)); + requiredSnapshotFields.forEach(field -> + assertTrue(snapshotContent.containsKey(field), "snapshot must contain field: " + field)); } } } diff --git a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/CiVisibilityServices.java b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/CiVisibilityServices.java index 12dfa0709d7..4709fc72ad2 100644 --- a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/CiVisibilityServices.java +++ b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/CiVisibilityServices.java @@ -109,7 +109,7 @@ public class CiVisibilityServices { this.signalClientFactory = new SignalClient.Factory(signalServerAddress, config); RepoIndexProvider indexFetcher = new RepoIndexFetcher(signalClientFactory); - this.repoIndexProviderFactory = (repoRoot) -> indexFetcher; + this.repoIndexProviderFactory = repoRoot -> indexFetcher; } else { this.signalClientFactory = null; diff --git a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/config/ExecutionSettingsFactoryImpl.java b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/config/ExecutionSettingsFactoryImpl.java index 322d494b56b..440bf2a1cc9 100644 --- a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/config/ExecutionSettingsFactoryImpl.java +++ b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/config/ExecutionSettingsFactoryImpl.java @@ -234,19 +234,15 @@ private Map doCreate( executor.submit( () -> getSkippableTests(tracerEnvironment, itrEnabled, skippableTestsError)); Future>> flakyTestsFuture = - executor.submit( - () -> - getFlakyTestsByModule(tracerEnvironment, flakyTestRetriesEnabled, flakyTestsError)); + executor.submit(() -> + getFlakyTestsByModule(tracerEnvironment, flakyTestRetriesEnabled, flakyTestsError)); Future>> knownTestsFuture = executor.submit( () -> getKnownTestsByModule(tracerEnvironment, knownTestsRequest, knownTestsError)); Future>>> testManagementTestsFuture = - executor.submit( - () -> - getTestManagementTestsByModule( - tracerEnvironment, - testManagementSettings.isEnabled(), - testManagementTestsError)); + executor.submit(() -> + getTestManagementTestsByModule( + tracerEnvironment, testManagementSettings.isEnabled(), testManagementTestsError)); Future pullRequestDiffFuture = executor.submit( () -> getPullRequestDiff(impactedTestsEnabled, settings.getDefaultBranch())); diff --git a/dd-java-agent/agent-ci-visibility/src/test/java/datadog/trace/civisibility/config/ConfigurationApiImplTest.java b/dd-java-agent/agent-ci-visibility/src/test/java/datadog/trace/civisibility/config/ConfigurationApiImplTest.java index 117e4e4e48c..f423eb92009 100644 --- a/dd-java-agent/agent-ci-visibility/src/test/java/datadog/trace/civisibility/config/ConfigurationApiImplTest.java +++ b/dd-java-agent/agent-ci-visibility/src/test/java/datadog/trace/civisibility/config/ConfigurationApiImplTest.java @@ -72,13 +72,11 @@ void closeServers() { @Override protected ConfigurationApi apiReturning(Endpoint endpoint, String responseBody) { JavaTestHttpServer server = - JavaTestHttpServer.httpServer( - s -> - s.handlers( - h -> - h.prefix( - ENDPOINT_PATHS.get(endpoint), - api -> sendResponseBody(api, responseBody.getBytes())))); + JavaTestHttpServer.httpServer(s -> + s.handlers(h -> + h.prefix( + ENDPOINT_PATHS.get(endpoint), + api -> sendResponseBody(api, responseBody.getBytes())))); servers.add(server); return givenConfigurationApi(server, true, true); } @@ -203,16 +201,14 @@ void testKnownTestsRequestWithPagination() throws IOException { List responses = Arrays.asList(page1, page2, page3); JavaTestHttpServer intakeServer = - JavaTestHttpServer.httpServer( - s -> - s.handlers( - h -> - h.prefix( - "/api/v2/ci/libraries/tests", - api -> { - int current = requestCount.incrementAndGet(); - sendResponseBody(api, responses.get(current - 1).getBytes()); - }))); + JavaTestHttpServer.httpServer(s -> + s.handlers(h -> + h.prefix( + "/api/v2/ci/libraries/tests", + api -> { + int current = requestCount.incrementAndGet(); + sendResponseBody(api, responses.get(current - 1).getBytes()); + }))); servers.add(intakeServer); ConfigurationApi configurationApi = givenConfigurationApi(intakeServer, true, true); @@ -254,26 +250,23 @@ private JavaTestHttpServer givenBackendEndpoint( String expectedRequestBody = render(requestTemplate, requestData); byte[] responseBody = render(responseTemplate, responseData).getBytes(); JavaTestHttpServer server = - JavaTestHttpServer.httpServer( - s -> - s.handlers( - h -> - h.prefix( - path, - api -> { - JavaTestHttpServer.HandlerApi.ResponseApi response = - api.getResponse(); - try { - JSONAssert.assertEquals( - expectedRequestBody, - new String(api.getRequest().getBody()), - JSONCompareMode.LENIENT); - } catch (AssertionError error) { - response.status(400).send(error.getMessage().getBytes()); - return; - } - sendResponseBody(api, responseBody); - }))); + JavaTestHttpServer.httpServer(s -> + s.handlers(h -> + h.prefix( + path, + api -> { + JavaTestHttpServer.HandlerApi.ResponseApi response = api.getResponse(); + try { + JSONAssert.assertEquals( + expectedRequestBody, + new String(api.getRequest().getBody()), + JSONCompareMode.LENIENT); + } catch (AssertionError error) { + response.status(400).send(error.getMessage().getBytes()); + return; + } + sendResponseBody(api, responseBody); + }))); servers.add(server); return server; } diff --git a/dd-java-agent/agent-ci-visibility/src/test/java/datadog/trace/civisibility/coverage/report/CoverageReportUploaderTest.java b/dd-java-agent/agent-ci-visibility/src/test/java/datadog/trace/civisibility/coverage/report/CoverageReportUploaderTest.java index 0a2c82c18dc..cc30b044e27 100644 --- a/dd-java-agent/agent-ci-visibility/src/test/java/datadog/trace/civisibility/coverage/report/CoverageReportUploaderTest.java +++ b/dd-java-agent/agent-ci-visibility/src/test/java/datadog/trace/civisibility/coverage/report/CoverageReportUploaderTest.java @@ -71,24 +71,20 @@ void uploadsCoverageReportWithOrderedDuplicateFlags() throws IOException { private static CapturedRequest uploadCoverageReport(List flags) throws IOException { CapturedRequest capturedRequest = new CapturedRequest(); try (JavaTestHttpServer server = - httpServer( - s -> - s.handlers( - h -> - h.prefix( - "/api/v2/cicovreprt", - api -> { - Map> multipart = - MultipartRequestParser.parseRequest( - api.getRequest().getBody(), - api.getRequest().getHeader("Content-Type")); - capturedRequest.event = - JSON_MAPPER.readValue( - multipart.get("event").get(0).get(), EVENT_TYPE); - capturedRequest.coverage = - gunzip(multipart.get("coverage").get(0).get()); - api.getResponse().status(200).send(); - })))) { + httpServer(s -> + s.handlers(h -> + h.prefix( + "/api/v2/cicovreprt", + api -> { + Map> multipart = + MultipartRequestParser.parseRequest( + api.getRequest().getBody(), + api.getRequest().getHeader("Content-Type")); + capturedRequest.event = + JSON_MAPPER.readValue(multipart.get("event").get(0).get(), EVENT_TYPE); + capturedRequest.coverage = gunzip(multipart.get("coverage").get(0).get()); + api.getResponse().status(200).send(); + })))) { BackendApi backendApi = givenIntakeApi(server.getAddress()); CoverageReportUploader uploader = new CoverageReportUploader( diff --git a/dd-java-agent/agent-ci-visibility/src/test/java/datadog/trace/civisibility/events/TestEventsHandlerImplTest.java b/dd-java-agent/agent-ci-visibility/src/test/java/datadog/trace/civisibility/events/TestEventsHandlerImplTest.java index 4c20bba1d2b..1fa854d3247 100644 --- a/dd-java-agent/agent-ci-visibility/src/test/java/datadog/trace/civisibility/events/TestEventsHandlerImplTest.java +++ b/dd-java-agent/agent-ci-visibility/src/test/java/datadog/trace/civisibility/events/TestEventsHandlerImplTest.java @@ -25,11 +25,10 @@ class TestEventsHandlerImplTest { void doesNotCreateSessionWhenUnused() { AtomicInteger creations = new AtomicInteger(); TestEventsHandlerImpl handler = - handler( - () -> { - creations.incrementAndGet(); - return mock(TestFrameworkSession.class); - }); + handler(() -> { + creations.incrementAndGet(); + return mock(TestFrameworkSession.class); + }); handler.close(); @@ -45,11 +44,10 @@ void createsSessionAndModuleOnceAndClosesThem() { when(module.skipReason(test)).thenReturn(SkipReason.ITR); AtomicInteger creations = new AtomicInteger(); TestEventsHandlerImpl handler = - handler( - () -> { - creations.incrementAndGet(); - return session; - }); + handler(() -> { + creations.incrementAndGet(); + return session; + }); assertSame(SkipReason.ITR, handler.skipReason(test)); assertSame(SkipReason.ITR, handler.skipReason(test)); diff --git a/dd-java-agent/agent-crashtracking/src/main/java/datadog/crashtracking/CrashUploader.java b/dd-java-agent/agent-crashtracking/src/main/java/datadog/crashtracking/CrashUploader.java index 87fc4592751..b5eef041c95 100644 --- a/dd-java-agent/agent-crashtracking/src/main/java/datadog/crashtracking/CrashUploader.java +++ b/dd-java-agent/agent-crashtracking/src/main/java/datadog/crashtracking/CrashUploader.java @@ -359,11 +359,10 @@ static String extractErrorMessage(String fileContent) { return null; } return Arrays.stream(matcher.group().split(System.lineSeparator())) - .filter( - s -> - !s.equals("# A fatal error has been detected by the Java Runtime Environment:") - && !s.equals( - "# There is insufficient memory for the Java Runtime Environment to continue.")) + .filter(s -> + !s.equals("# A fatal error has been detected by the Java Runtime Environment:") + && !s.equals( + "# There is insufficient memory for the Java Runtime Environment to continue.")) .map(s -> s.replaceFirst("^#\\s*", "").trim()) .collect(Collectors.joining("\n")) .trim(); diff --git a/dd-java-agent/agent-crashtracking/src/test/java/datadog/crashtracking/ScriptInitializerSecurityTest.java b/dd-java-agent/agent-crashtracking/src/test/java/datadog/crashtracking/ScriptInitializerSecurityTest.java index c17d0416e08..95ef897c884 100644 --- a/dd-java-agent/agent-crashtracking/src/test/java/datadog/crashtracking/ScriptInitializerSecurityTest.java +++ b/dd-java-agent/agent-crashtracking/src/test/java/datadog/crashtracking/ScriptInitializerSecurityTest.java @@ -50,12 +50,11 @@ void teardown() throws IOException { stream .sorted(Comparator.reverseOrder()) .map(Path::toFile) - .forEach( - f -> { - // Restore write permission before delete to handle read-only test artefacts - f.setWritable(true, false); - f.delete(); - }); + .forEach(f -> { + // Restore write permission before delete to handle read-only test artefacts + f.setWritable(true, false); + f.delete(); + }); } } diff --git a/dd-java-agent/agent-crashtracking/src/test/java/datadog/crashtracking/ScriptInitializerTest.java b/dd-java-agent/agent-crashtracking/src/test/java/datadog/crashtracking/ScriptInitializerTest.java index 53cf66f72a1..b5ccb725761 100644 --- a/dd-java-agent/agent-crashtracking/src/test/java/datadog/crashtracking/ScriptInitializerTest.java +++ b/dd-java-agent/agent-crashtracking/src/test/java/datadog/crashtracking/ScriptInitializerTest.java @@ -40,10 +40,8 @@ void teardown() throws Exception { @Test void testCrashUploaderSanity() { assertDoesNotThrow(() -> CrashUploaderScriptInitializer.initialize(null, null)); - assertDoesNotThrow( - () -> - CrashUploaderScriptInitializer.initialize( - tempDir.resolve("dummy.sh").toString(), null)); + assertDoesNotThrow(() -> + CrashUploaderScriptInitializer.initialize(tempDir.resolve("dummy.sh").toString(), null)); assertDoesNotThrow(() -> CrashUploaderScriptInitializer.initialize(null, "hs_err.log")); } diff --git a/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/agent/DebuggerTransformer.java b/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/agent/DebuggerTransformer.java index 73409f22bd7..75e204372ee 100644 --- a/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/agent/DebuggerTransformer.java +++ b/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/agent/DebuggerTransformer.java @@ -233,21 +233,20 @@ private void processITWFiles( } try { try (Stream lines = Files.lines(excludePath)) { - lines.forEach( - line -> { - if (line.startsWith("#")) { - return; - } - if (line.endsWith("*")) { - prefixes.insert(line.substring(0, line.length() - 1)); - return; - } - if (line.contains("::")) { - methods.add(line); - return; - } - classes.add(line); - }); + lines.forEach(line -> { + if (line.startsWith("#")) { + return; + } + if (line.endsWith("*")) { + prefixes.insert(line.substring(0, line.length() - 1)); + return; + } + if (line.contains("::")) { + methods.add(line); + return; + } + classes.add(line); + }); } } catch (IOException ex) { LOGGER.warn("Error reading exclude file '{}' for Instrument-The-World: ", fileName, ex); @@ -798,11 +797,10 @@ private void notifyBlockedDefinitions( private InstrumentationResult applyInstrumentation( MethodInfo methodInfo, List definitions) { Map> diagnostics = new HashMap<>(); - definitions.forEach( - probeDefinition -> { - probeDefinition.buildLocation(methodInfo); - diagnostics.put(probeDefinition.getProbeId(), new ArrayList<>()); - }); + definitions.forEach(probeDefinition -> { + probeDefinition.buildLocation(methodInfo); + diagnostics.put(probeDefinition.getProbeId(), new ArrayList<>()); + }); InstrumentationResult.Status status = preCheckInstrumentation(diagnostics, methodInfo); if (status != InstrumentationResult.Status.ERROR) { try { @@ -878,12 +876,11 @@ private List filterAndSortDefinitions( processCapturedContextMethodProbes( classFileLines, capturedContextProbes, probeMetadata, toInstrument); // ordering: metric < log < span decoration < span - toInstrument.sort( - (info1, info2) -> { - int idx1 = PROBE_ORDER.indexOf(info1.definition.getClass()); - int idx2 = PROBE_ORDER.indexOf(info2.definition.getClass()); - return Integer.compare(idx1, idx2); - }); + toInstrument.sort((info1, info2) -> { + int idx1 = PROBE_ORDER.indexOf(info1.definition.getClass()); + int idx2 = PROBE_ORDER.indexOf(info2.definition.getClass()); + return Integer.compare(idx1, idx2); + }); return toInstrument; } diff --git a/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/codeorigin/DefaultCodeOriginRecorder.java b/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/codeorigin/DefaultCodeOriginRecorder.java index 1cfd654d295..5ea587f0d3d 100644 --- a/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/codeorigin/DefaultCodeOriginRecorder.java +++ b/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/codeorigin/DefaultCodeOriginRecorder.java @@ -134,12 +134,11 @@ private CodeOriginProbe createProbe(String fingerPrint, boolean entry, Where whe } private StackTraceElement findPlaceInStack() { - return StackWalkerFactory.INSTANCE.walk( - stream -> - stream - .filter(element -> !DebuggerContext.isClassNameExcluded(element.getClassName())) - .findFirst() - .orElse(null)); + return StackWalkerFactory.INSTANCE.walk(stream -> + stream + .filter(element -> !DebuggerContext.isClassNameExcluded(element.getClassName())) + .findFirst() + .orElse(null)); } public void installProbes() { diff --git a/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/exception/AbstractExceptionDebugger.java b/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/exception/AbstractExceptionDebugger.java index e92f65ef223..697f681f039 100644 --- a/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/exception/AbstractExceptionDebugger.java +++ b/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/exception/AbstractExceptionDebugger.java @@ -145,12 +145,11 @@ private void processSnapshotsAndSetTags( LOGGER.debug("Clear previous frame tags"); // already set for this span, clear the frame tags span.getTags() - .forEach( - (k, v) -> { - if (k.startsWith(DD_DEBUG_ERROR_PREFIX)) { - span.setTag(k, (String) null); - } - }); + .forEach((k, v) -> { + if (k.startsWith(DD_DEBUG_ERROR_PREFIX)) { + span.setTag(k, (String) null); + } + }); } boolean snapshotAssigned = false; List snapshots = state.getSnapshots(); diff --git a/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/instrumentation/InstrumentationResult.java b/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/instrumentation/InstrumentationResult.java index 45b0161984a..93b73c68a07 100644 --- a/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/instrumentation/InstrumentationResult.java +++ b/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/instrumentation/InstrumentationResult.java @@ -32,9 +32,8 @@ public static InstrumentationResult blocked(String className) { public static InstrumentationResult blocked( String className, List definitions, DiagnosticMessage... messages) { Map> diagnostics = new HashMap<>(); - definitions.forEach( - probeDefinition -> - diagnostics.put(probeDefinition.getProbeId(), Arrays.asList(messages))); + definitions.forEach(probeDefinition -> + diagnostics.put(probeDefinition.getProbeId(), Arrays.asList(messages))); return new InstrumentationResult(Status.BLOCKED, diagnostics, null, className, null); } } diff --git a/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/symbol/AvroFilter.java b/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/symbol/AvroFilter.java index 8a7b1130d08..7a05e828447 100644 --- a/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/symbol/AvroFilter.java +++ b/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/symbol/AvroFilter.java @@ -18,12 +18,11 @@ public boolean filterOut(Scope scope) { if (scope.getScopeType() == ScopeType.CLASS && scope.getSymbols() != null && scope.getSymbols().stream() - .anyMatch( - it -> - it.getSymbolType() == SymbolType.STATIC_FIELD - && "SCHEMA$".equals(it.getName()) - && it.getType() != null - && it.getType().contains("org.apache.avro.Schema"))) { + .anyMatch(it -> + it.getSymbolType() == SymbolType.STATIC_FIELD + && "SCHEMA$".equals(it.getName()) + && it.getType() != null + && it.getType().contains("org.apache.avro.Schema"))) { return true; } // Otherwise, do not filter. diff --git a/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/symbol/ProtoFilter.java b/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/symbol/ProtoFilter.java index b5b94627122..df62f897e91 100644 --- a/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/symbol/ProtoFilter.java +++ b/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/symbol/ProtoFilter.java @@ -48,10 +48,9 @@ private boolean hasProtoDescriptorField(Scope scope) { return scope.getScopeType() == ScopeType.CLASS && scope.getSymbols() != null && scope.getSymbols().stream() - .anyMatch( - it -> - it.getSymbolType() == SymbolType.STATIC_FIELD - && it.getType() != null - && it.getType().contains("com.google.protobuf.Descriptors")); + .anyMatch(it -> + it.getSymbolType() == SymbolType.STATIC_FIELD + && it.getType() != null + && it.getType().contains("com.google.protobuf.Descriptors")); } } diff --git a/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/symbol/SymbolAggregator.java b/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/symbol/SymbolAggregator.java index c88976187bd..d30f77811e1 100644 --- a/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/symbol/SymbolAggregator.java +++ b/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/symbol/SymbolAggregator.java @@ -211,10 +211,9 @@ public void scanJar( try (JarFile jarFile = openJarFile(jarPathFile)) { jarFile.stream() .filter(jarEntry -> jarEntry.getName().endsWith(".class")) - .filter( - jarEntry -> - !classNameFilter.isExcluded( - Strings.getClassName(trimPrefixes(jarEntry.getName())))) + .filter(jarEntry -> + !classNameFilter.isExcluded( + Strings.getClassName(trimPrefixes(jarEntry.getName())))) .forEach( jarEntry -> parseJarEntry(symDBReport, jarEntry, jarFile, jarPath, baos, buffer)); } @@ -243,10 +242,9 @@ private void scanDirectory( // explicitly no follow links walking the directory to avoid cycles .filter(path -> Files.isRegularFile(path, LinkOption.NOFOLLOW_LINKS)) .filter(path -> path.toString().endsWith(".class")) - .filter( - path -> - !classNameFilter.isExcluded( - Strings.getClassName(trimPrefixes(jarPath.relativize(path).toString())))) + .filter(path -> + !classNameFilter.isExcluded( + Strings.getClassName(trimPrefixes(jarPath.relativize(path).toString())))) .forEach(path -> parseFileEntry(symDBReport, path, jarPath, baos, buffer)); alreadyScannedJars.add(jarPath.toString()); } catch (IOException e) { diff --git a/dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/agent/CapturedSnapshotTest.java b/dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/agent/CapturedSnapshotTest.java index 6b280e34c4e..bc1a949d7f4 100644 --- a/dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/agent/CapturedSnapshotTest.java +++ b/dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/agent/CapturedSnapshotTest.java @@ -244,10 +244,9 @@ public void resolutionThrows() throws IOException, URISyntaxException { createMethodProbe(PROBE_ID2, CLASS_NAME, "main", "int (java.lang.String)"); TestSnapshotListener listener = installProbes(lineProbe, methodProbe); DebuggerAgentHelper.injectSink(listener); - DebuggerContext.initProbeResolver( - probeIndex -> { - throw new IllegalArgumentException("oops"); - }); + DebuggerContext.initProbeResolver(probeIndex -> { + throw new IllegalArgumentException("oops"); + }); Class testClass = compileAndLoadClass(CLASS_NAME); int result = Reflect.onClass(testClass).call("main", "1").get(); assertEquals(3, result); @@ -2779,12 +2778,11 @@ private void doSamplingTest( MockSampler probeSampler = new MockSampler(); MockSampler errorSampler = new MockSampler(); MockSampler globalSampler = new MockSampler(); - ProbeRateLimiter.setSamplerSupplier( - rate -> { - if (rate < 2) return errorSampler; - if (rate < 101) return probeSampler; - return globalSampler; - }); + ProbeRateLimiter.setSamplerSupplier(rate -> { + if (rate < 2) return errorSampler; + if (rate < 101) return probeSampler; + return globalSampler; + }); globalRateSetter.accept(1000); try { testRun.run(); diff --git a/dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/agent/ConfigurationUpdaterTest.java b/dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/agent/ConfigurationUpdaterTest.java index c8270e2e956..f89cc67d35e 100644 --- a/dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/agent/ConfigurationUpdaterTest.java +++ b/dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/agent/ConfigurationUpdaterTest.java @@ -441,12 +441,11 @@ public void acceptMustAppliedAtomically() throws Exception { LogProbe probe = LogProbe.builder().probeId(probeId).where("java.lang.String", "concat").build(); futures.add( - executor.submit( - () -> { - barrier.await(); - configurationUpdater.accept(source, singletonList(probe)); - return null; - })); + executor.submit(() -> { + barrier.await(); + configurationUpdater.accept(source, singletonList(probe)); + return null; + })); } for (Future future : futures) { future.get(); diff --git a/dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/agent/DebuggerProductChangesListenerTest.java b/dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/agent/DebuggerProductChangesListenerTest.java index 94a5a4afdc8..78d4789411b 100644 --- a/dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/agent/DebuggerProductChangesListenerTest.java +++ b/dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/agent/DebuggerProductChangesListenerTest.java @@ -196,10 +196,8 @@ byte[] toContent(TriggerProbe probe) { } void acceptMetricProbe(DebuggerProductChangesListener listener, MetricProbe probe) { - assertDoesNotThrow( - () -> - listener.accept( - createConfigKey("metricProbe_" + probe.getId()), toContent(probe), NOOP)); + assertDoesNotThrow(() -> + listener.accept(createConfigKey("metricProbe_" + probe.getId()), toContent(probe), NOOP)); } void removeMetricProbe(DebuggerProductChangesListener listener, MetricProbe probe) { @@ -208,9 +206,8 @@ void removeMetricProbe(DebuggerProductChangesListener listener, MetricProbe prob } void acceptLogProbe(DebuggerProductChangesListener listener, LogProbe probe) { - assertDoesNotThrow( - () -> - listener.accept(createConfigKey("logProbe_" + probe.getId()), toContent(probe), NOOP)); + assertDoesNotThrow(() -> + listener.accept(createConfigKey("logProbe_" + probe.getId()), toContent(probe), NOOP)); } void removeLogProbe(DebuggerProductChangesListener listener, LogProbe probe) { @@ -218,24 +215,20 @@ void removeLogProbe(DebuggerProductChangesListener listener, LogProbe probe) { } void acceptSpanProbe(DebuggerProductChangesListener listener, SpanProbe probe) { - assertDoesNotThrow( - () -> - listener.accept(createConfigKey("spanProbe_" + probe.getId()), toContent(probe), NOOP)); + assertDoesNotThrow(() -> + listener.accept(createConfigKey("spanProbe_" + probe.getId()), toContent(probe), NOOP)); } void acceptSpanDecorationProbe( DebuggerProductChangesListener listener, SpanDecorationProbe probe) { - assertDoesNotThrow( - () -> - listener.accept( - createConfigKey("spanDecorationProbe_" + probe.getId()), toContent(probe), NOOP)); + assertDoesNotThrow(() -> + listener.accept( + createConfigKey("spanDecorationProbe_" + probe.getId()), toContent(probe), NOOP)); } void acceptTriggerProbe(DebuggerProductChangesListener listener, TriggerProbe probe) { - assertDoesNotThrow( - () -> - listener.accept( - createConfigKey("triggerProbe_" + probe.getId()), toContent(probe), NOOP)); + assertDoesNotThrow(() -> + listener.accept(createConfigKey("triggerProbe_" + probe.getId()), toContent(probe), NOOP)); } void removeSpanProbe(DebuggerProductChangesListener listener, SpanProbe probe) { diff --git a/dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/agent/ProbeStatusTest.java b/dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/agent/ProbeStatusTest.java index eeb6fcde8bf..5931e5ea42b 100644 --- a/dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/agent/ProbeStatusTest.java +++ b/dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/agent/ProbeStatusTest.java @@ -55,10 +55,9 @@ void builderReceived() { @Test void builderReceivedNullSafe() { - assertDoesNotThrow( - () -> { - builder.receivedMessage(null); - }); + assertDoesNotThrow(() -> { + builder.receivedMessage(null); + }); } @Test diff --git a/dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/origin/CodeOriginTest.java b/dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/origin/CodeOriginTest.java index 65bbd72ae9d..df0c53aa095 100644 --- a/dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/origin/CodeOriginTest.java +++ b/dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/origin/CodeOriginTest.java @@ -110,11 +110,10 @@ public void before() { .with(InitializationStrategy.NoOp.INSTANCE) .with(TypeStrategy.Default.REDEFINE) .type(nameStartsWith("com.datadog.debugger.")) - .transform( - (builder, typeDescription, classLoader, module, protectionDomain) -> - builder.visit( - Advice.to(CodeOriginTestAdvice.class) - .on(new Conjunction<>(isMethod(), isAnnotatedWith(CodeOrigin.class))))) + .transform((builder, typeDescription, classLoader, module, protectionDomain) -> + builder.visit( + Advice.to(CodeOriginTestAdvice.class) + .on(new Conjunction<>(isMethod(), isAnnotatedWith(CodeOrigin.class))))) // .installOn(instr) ; } diff --git a/dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/symbol/SymDBEnablementTest.java b/dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/symbol/SymDBEnablementTest.java index 9c3916067d3..fe64ef5e24b 100644 --- a/dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/symbol/SymDBEnablementTest.java +++ b/dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/symbol/SymDBEnablementTest.java @@ -233,14 +233,13 @@ public void noDuplicateSymbolExtraction() { .when(instr) .addTransformer(any(SymbolExtractionTransformer.class), eq(true)); when(instr.getAllLoadedClasses()) - .thenAnswer( - invocation -> { - URL jarFileUrl = getClass().getResource("/debugger-symbol.jar"); - URL jarUrl = new URL("jar:file:" + jarFileUrl.getFile() + "!/"); - URLClassLoader urlClassLoader = new URLClassLoader(new URL[] {jarUrl}, null); - Class testClass = urlClassLoader.loadClass(Strings.getClassName(CLASS_NAME_PATH)); - return new Class[] {testClass}; - }); + .thenAnswer(invocation -> { + URL jarFileUrl = getClass().getResource("/debugger-symbol.jar"); + URL jarUrl = new URL("jar:file:" + jarFileUrl.getFile() + "!/"); + URLClassLoader urlClassLoader = new URLClassLoader(new URL[] {jarUrl}, null); + Class testClass = urlClassLoader.loadClass(Strings.getClassName(CLASS_NAME_PATH)); + return new Class[] {testClass}; + }); symDBEnablement.startSymbolExtraction(); verify(mockSymbolSink, times(1)).addScope(any()); diff --git a/dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/trigger/TriggerProbeTest.java b/dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/trigger/TriggerProbeTest.java index bb0c413c612..5e1e2f04ec7 100644 --- a/dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/trigger/TriggerProbeTest.java +++ b/dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/trigger/TriggerProbeTest.java @@ -79,12 +79,11 @@ public void conditions() throws IOException, URISyntaxException { long count = allTraces.stream() .map(span -> span.get(0)) - .filter( - span -> { - DDSpan ddSpan = (DDSpan) span; - PropagationTags tags = ddSpan.spanContext().getPropagationTags(); - return (TRIGGER_PROBE_SESSION_ID + ":1").equals(tags.getDebugPropagation()); - }) + .filter(span -> { + DDSpan ddSpan = (DDSpan) span; + PropagationTags tags = ddSpan.spanContext().getPropagationTags(); + return (TRIGGER_PROBE_SESSION_ID + ":1").equals(tags.getDebugPropagation()); + }) .count(); assertEquals(100, allTraces.size(), "actual traces: " + allTraces.size()); assertTrue(count <= 25, "Should have at most 25 debug sessions. found: " + count); @@ -137,21 +136,19 @@ public void cooldown() throws IOException, URISyntaxException { long debugSessions = allTraces.stream() .map(span -> span.get(0)) - .filter( - span -> { - DDSpan ddSpan = (DDSpan) span; - PropagationTags tags = ddSpan.spanContext().getPropagationTags(); - return (TRIGGER_PROBE_SESSION_ID + ":1").equals(tags.getDebugPropagation()); - }) + .filter(span -> { + DDSpan ddSpan = (DDSpan) span; + PropagationTags tags = ddSpan.spanContext().getPropagationTags(); + return (TRIGGER_PROBE_SESSION_ID + ":1").equals(tags.getDebugPropagation()); + }) .count(); assertEquals(1, debugSessions, "Should only have 1 debug session. found: " + debugSessions); long tagged = allTraces.stream() .flatMap(Collection::stream) - .filter( - span -> - span.getTag(format("_dd.ld.probe_id.%s", TRIGGER_PROBE_ID1.getId())) != null) + .filter(span -> + span.getTag(format("_dd.ld.probe_id.%s", TRIGGER_PROBE_ID1.getId())) != null) .count(); assertEquals(1, tagged, "Should only have 1 tagged span. found: " + tagged); } finally { diff --git a/dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/uploader/BatchUploaderTest.java b/dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/uploader/BatchUploaderTest.java index 1eb7cf59ddf..cd0e5cbf2ed 100644 --- a/dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/uploader/BatchUploaderTest.java +++ b/dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/uploader/BatchUploaderTest.java @@ -297,19 +297,18 @@ public void testRetryOnFailure() throws IOException, InterruptedException { server.shutdown(); ServerSocket serverSocket = new ServerSocket(port); Thread t = - new Thread( - () -> { - try { - System.out.println("Accepting connection on port " + port); - Socket socket = serverSocket.accept(); - System.out.println("Accepted connection, closing"); - socket.setSoLinger(true, 0); - socket.close(); - serverSocket.close(); - } catch (Exception e) { - e.printStackTrace(); - } - }); + new Thread(() -> { + try { + System.out.println("Accepting connection on port " + port); + Socket socket = serverSocket.accept(); + System.out.println("Accepted connection, closing"); + socket.setSoLinger(true, 0); + socket.close(); + serverSocket.close(); + } catch (Exception e) { + e.printStackTrace(); + } + }); t.start(); // only upload once. will fail on first attempt, will succeed on retry uploader.upload(SNAPSHOT_BUFFER); diff --git a/dd-java-agent/agent-iast/src/main/java/com/datadog/iast/overhead/OverheadContext.java b/dd-java-agent/agent-iast/src/main/java/com/datadog/iast/overhead/OverheadContext.java index 89dc03c1a59..a186edce546 100644 --- a/dd-java-agent/agent-iast/src/main/java/com/datadog/iast/overhead/OverheadContext.java +++ b/dd-java-agent/agent-iast/src/main/java/com/datadog/iast/overhead/OverheadContext.java @@ -84,27 +84,26 @@ public void resetMaps() { return; } // If the budget is consumed, we need to merge the requestMap into the globalMap - endpoints.forEach( - endpoint -> { - AtomicIntegerArray countMap = requestMap.get(endpoint); - // should not happen, but just in case - if (countMap == null) { - globalMap.remove(endpoint); - return; - } - // Iterate over the vulnerabilities and update the globalMap - int numberOfVulnerabilities = VulnerabilityTypes.STRINGS.length; - for (int i = 0; i < numberOfVulnerabilities; i++) { - int counter = countMap.get(i); - if (counter > 0) { - AtomicIntegerArray globalCountMap = - globalMap.computeIfAbsent( - endpoint, value -> new AtomicIntegerArray(numberOfVulnerabilities)); - - globalCountMap.accumulateAndGet(i, counter, Math::max); - } - } - }); + endpoints.forEach(endpoint -> { + AtomicIntegerArray countMap = requestMap.get(endpoint); + // should not happen, but just in case + if (countMap == null) { + globalMap.remove(endpoint); + return; + } + // Iterate over the vulnerabilities and update the globalMap + int numberOfVulnerabilities = VulnerabilityTypes.STRINGS.length; + for (int i = 0; i < numberOfVulnerabilities; i++) { + int counter = countMap.get(i); + if (counter > 0) { + AtomicIntegerArray globalCountMap = + globalMap.computeIfAbsent( + endpoint, value -> new AtomicIntegerArray(numberOfVulnerabilities)); + + globalCountMap.accumulateAndGet(i, counter, Math::max); + } + } + }); } public boolean isGlobal() { diff --git a/dd-java-agent/agent-iast/src/main/java/com/datadog/iast/sink/SinkModuleBase.java b/dd-java-agent/agent-iast/src/main/java/com/datadog/iast/sink/SinkModuleBase.java index 38c66cb4c53..c520f3fa91d 100644 --- a/dd-java-agent/agent-iast/src/main/java/com/datadog/iast/sink/SinkModuleBase.java +++ b/dd-java-agent/agent-iast/src/main/java/com/datadog/iast/sink/SinkModuleBase.java @@ -387,13 +387,12 @@ static StackTraceElement findValidPackageForVulnerability( @Nonnull final Stream stream) { final StackTraceElement[] first = new StackTraceElement[1]; return stream - .filter( - stack -> { - if (first[0] == null) { - first[0] = stack; - } - return IastExclusionTrie.apply(stack.getClassName()) < 1; - }) + .filter(stack -> { + if (first[0] == null) { + first[0] = stack; + } + return IastExclusionTrie.apply(stack.getClassName()) < 1; + }) .findFirst() .orElse(first[0]); } diff --git a/dd-java-agent/agent-installer/src/main/java/datadog/trace/agent/tooling/AgentCLI.java b/dd-java-agent/agent-installer/src/main/java/datadog/trace/agent/tooling/AgentCLI.java index 861fd92542f..81076e4819a 100644 --- a/dd-java-agent/agent-installer/src/main/java/datadog/trace/agent/tooling/AgentCLI.java +++ b/dd-java-agent/agent-installer/src/main/java/datadog/trace/agent/tooling/AgentCLI.java @@ -140,7 +140,7 @@ public static void scanDependencies(final String[] args) throws Exception { Method resolveOne = depService.getClass().getMethod("resolveOneDependency"); Consumer invoker = - (file) -> { + file -> { try { addUrlMethod.invoke(depService, file.toURI().toURL()); resolveOne.invoke(depService); @@ -180,31 +180,30 @@ private static void unzipJar(Consumer invoker, File file) throws IOExcepti log.debug("Finding entries in file: {}", file.getName()); jar.stream() - .forEach( - e -> { - if (e.getName().endsWith(".jar") || e.getName().endsWith(".war")) { - try { - log.debug("Jar entry found in file: {} entry: {}", file.getName(), e.getName()); - File temp = File.createTempFile("internal", ".jar"); - try (InputStream is = jar.getInputStream(e); - OutputStream out = new FileOutputStream(temp)) { - int read; - while ((read = is.read()) != -1) { - out.write(read); - } - } - log.debug("Adding new jar: {}", temp.getAbsolutePath()); - recursiveDependencySearch(invoker, temp); - if (!temp.delete()) { - log.error("Error deleting temp file: {}", temp.getAbsolutePath()); - } - } catch (Exception ex) { - log.error("Error unzipping file", ex); + .forEach(e -> { + if (e.getName().endsWith(".jar") || e.getName().endsWith(".war")) { + try { + log.debug("Jar entry found in file: {} entry: {}", file.getName(), e.getName()); + File temp = File.createTempFile("internal", ".jar"); + try (InputStream is = jar.getInputStream(e); + OutputStream out = new FileOutputStream(temp)) { + int read; + while ((read = is.read()) != -1) { + out.write(read); } - } else { - log.debug("Entry: {} ignored in file: {}", e.getName(), file.getAbsolutePath()); } - }); + log.debug("Adding new jar: {}", temp.getAbsolutePath()); + recursiveDependencySearch(invoker, temp); + if (!temp.delete()) { + log.error("Error deleting temp file: {}", temp.getAbsolutePath()); + } + } catch (Exception ex) { + log.error("Error unzipping file", ex); + } + } else { + log.debug("Entry: {} ignored in file: {}", e.getName(), file.getAbsolutePath()); + } + }); } } } diff --git a/dd-java-agent/agent-installer/src/test/java/datadog/trace/agent/tooling/StructuralChangeRetransformationForkedTest.java b/dd-java-agent/agent-installer/src/test/java/datadog/trace/agent/tooling/StructuralChangeRetransformationForkedTest.java index 9b2857a94c9..980f6a6a83a 100644 --- a/dd-java-agent/agent-installer/src/test/java/datadog/trace/agent/tooling/StructuralChangeRetransformationForkedTest.java +++ b/dd-java-agent/agent-installer/src/test/java/datadog/trace/agent/tooling/StructuralChangeRetransformationForkedTest.java @@ -131,11 +131,10 @@ public String instrumentedType() { @Override public void typeAdvice(TypeTransformer transformer) { - transformer.applyAdvice( - (builder, typeDescription, classLoader, module, protectionDomain) -> { - transformations.incrementAndGet(); - return builder.visit(new AddStructuralMarkerVisitor()); - }); + transformer.applyAdvice((builder, typeDescription, classLoader, module, protectionDomain) -> { + transformations.incrementAndGet(); + return builder.visit(new AddStructuralMarkerVisitor()); + }); } @Override diff --git a/dd-java-agent/agent-installer/src/test/java/datadog/trace/agent/tooling/servicediscovery/MemFDUnixWriterTest.java b/dd-java-agent/agent-installer/src/test/java/datadog/trace/agent/tooling/servicediscovery/MemFDUnixWriterTest.java index e41187d92ac..ede321be97e 100644 --- a/dd-java-agent/agent-installer/src/test/java/datadog/trace/agent/tooling/servicediscovery/MemFDUnixWriterTest.java +++ b/dd-java-agent/agent-installer/src/test/java/datadog/trace/agent/tooling/servicediscovery/MemFDUnixWriterTest.java @@ -46,15 +46,14 @@ void testWriteCreatesMemFd(MemFDUnixWriter writer) throws IOException { try (Stream fdStream = Files.list(procSelfFd)) { memfdFound = - fdStream.anyMatch( - fd -> { - try { - Path linkTarget = Files.readSymbolicLink(fd); - return linkTarget.toString().contains(fileName); - } catch (IOException e) { - return false; - } - }); + fdStream.anyMatch(fd -> { + try { + Path linkTarget = Files.readSymbolicLink(fd); + return linkTarget.toString().contains(fileName); + } catch (IOException e) { + return false; + } + }); } assertTrue(memfdFound, "memfd should be created and visible in /proc/self/fd"); } diff --git a/dd-java-agent/agent-otel/otel-bootstrap/src/main/java/datadog/trace/bootstrap/otel/metrics/data/OtelMetricRegistry.java b/dd-java-agent/agent-otel/otel-bootstrap/src/main/java/datadog/trace/bootstrap/otel/metrics/data/OtelMetricRegistry.java index 0932723f761..5ea3e5b6652 100644 --- a/dd-java-agent/agent-otel/otel-bootstrap/src/main/java/datadog/trace/bootstrap/otel/metrics/data/OtelMetricRegistry.java +++ b/dd-java-agent/agent-otel/otel-bootstrap/src/main/java/datadog/trace/bootstrap/otel/metrics/data/OtelMetricRegistry.java @@ -65,9 +65,8 @@ public void shutdown() { } public void collectMetrics(OtlpMetricsVisitor visitor) { - scopedStorage.forEach( - (scope, storage) -> - collectScopedMetrics(scope, storage, visitor.visitScopedMetrics(scope))); + scopedStorage.forEach((scope, storage) -> + collectScopedMetrics(scope, storage, visitor.visitScopedMetrics(scope))); } private void collectScopedMetrics( diff --git a/dd-java-agent/agent-otel/otel-shim/src/main/java/datadog/opentelemetry/shim/context/propagation/TraceStateHelper.java b/dd-java-agent/agent-otel/otel-shim/src/main/java/datadog/opentelemetry/shim/context/propagation/TraceStateHelper.java index b0e2c135936..94a40bfd415 100644 --- a/dd-java-agent/agent-otel/otel-shim/src/main/java/datadog/opentelemetry/shim/context/propagation/TraceStateHelper.java +++ b/dd-java-agent/agent-otel/otel-shim/src/main/java/datadog/opentelemetry/shim/context/propagation/TraceStateHelper.java @@ -50,13 +50,12 @@ public static String encodeHeader(TraceState traceState) { return ""; } StringBuilder builder = new StringBuilder(TRACESTATE_MAX_SIZE); - traceState.forEach( - (key, value) -> { - if (builder.length() != 0) { - builder.append(TRACESTATE_ENTRY_DELIMITER); - } - builder.append(key).append(TRACESTATE_KEY_VALUE_DELIMITER).append(value); - }); + traceState.forEach((key, value) -> { + if (builder.length() != 0) { + builder.append(TRACESTATE_ENTRY_DELIMITER); + } + builder.append(key).append(TRACESTATE_KEY_VALUE_DELIMITER).append(value); + }); return builder.toString(); } } diff --git a/dd-java-agent/agent-otel/otel-shim/src/main/java/datadog/opentelemetry/shim/trace/OtelConventions.java b/dd-java-agent/agent-otel/otel-shim/src/main/java/datadog/opentelemetry/shim/trace/OtelConventions.java index f849dd47cb1..ff8797871c5 100644 --- a/dd-java-agent/agent-otel/otel-shim/src/main/java/datadog/opentelemetry/shim/trace/OtelConventions.java +++ b/dd-java-agent/agent-otel/otel-shim/src/main/java/datadog/opentelemetry/shim/trace/OtelConventions.java @@ -315,40 +315,39 @@ public static SpanAttributes convertSpanAttributes(Attributes attributes) { return SpanAttributes.EMPTY; } SpanAttributes.Builder builder = SpanAttributes.builder(); - attributes.forEach( - (attributeKey, value) -> { - String key = attributeKey.getKey(); - switch (attributeKey.getType()) { - case STRING: - builder.put(key, (String) value); - break; - case BOOLEAN: - builder.put(key, (boolean) value); - break; - case LONG: - builder.put(key, (long) value); - break; - case DOUBLE: - builder.put(key, (double) value); - break; - case STRING_ARRAY: - //noinspection unchecked - builder.putStringArray(key, (List) value); - break; - case BOOLEAN_ARRAY: - //noinspection unchecked - builder.putBooleanArray(key, (List) value); - break; - case LONG_ARRAY: - //noinspection unchecked - builder.putLongArray(key, (List) value); - break; - case DOUBLE_ARRAY: - //noinspection unchecked - builder.putDoubleArray(key, (List) value); - break; - } - }); + attributes.forEach((attributeKey, value) -> { + String key = attributeKey.getKey(); + switch (attributeKey.getType()) { + case STRING: + builder.put(key, (String) value); + break; + case BOOLEAN: + builder.put(key, (boolean) value); + break; + case LONG: + builder.put(key, (long) value); + break; + case DOUBLE: + builder.put(key, (double) value); + break; + case STRING_ARRAY: + //noinspection unchecked + builder.putStringArray(key, (List) value); + break; + case BOOLEAN_ARRAY: + //noinspection unchecked + builder.putBooleanArray(key, (List) value); + break; + case LONG_ARRAY: + //noinspection unchecked + builder.putLongArray(key, (List) value); + break; + case DOUBLE_ARRAY: + //noinspection unchecked + builder.putDoubleArray(key, (List) value); + break; + } + }); return builder.build(); } } diff --git a/dd-java-agent/agent-profiling/profiling-controller-jfr/src/test/java/com/datadog/profiling/controller/jfr/JfpUtilsTest.java b/dd-java-agent/agent-profiling/profiling-controller-jfr/src/test/java/com/datadog/profiling/controller/jfr/JfpUtilsTest.java index 9e4e7c4e5b9..c29e250facc 100644 --- a/dd-java-agent/agent-profiling/profiling-controller-jfr/src/test/java/com/datadog/profiling/controller/jfr/JfpUtilsTest.java +++ b/dd-java-agent/agent-profiling/profiling-controller-jfr/src/test/java/com/datadog/profiling/controller/jfr/JfpUtilsTest.java @@ -61,11 +61,9 @@ public void testLoadingConfigSafepoints(String safepoints) throws IOException { assertEquals("true", config.get("jdk.ExecuteVMOperation#enabled")); config .keySet() - .forEach( - key -> - assertTrue( - key.startsWith("jdk.Safepoint") - || key.equals("jdk.ExecuteVMOperation#enabled"))); + .forEach(key -> + assertTrue( + key.startsWith("jdk.Safepoint") || key.equals("jdk.ExecuteVMOperation#enabled"))); } @ParameterizedTest diff --git a/dd-java-agent/agent-profiling/profiling-controller-jfr/src/test/java/com/datadog/profiling/controller/jfr/TestJfrRecorder.java b/dd-java-agent/agent-profiling/profiling-controller-jfr/src/test/java/com/datadog/profiling/controller/jfr/TestJfrRecorder.java index cbf90124a2e..145dfe3f2d6 100644 --- a/dd-java-agent/agent-profiling/profiling-controller-jfr/src/test/java/com/datadog/profiling/controller/jfr/TestJfrRecorder.java +++ b/dd-java-agent/agent-profiling/profiling-controller-jfr/src/test/java/com/datadog/profiling/controller/jfr/TestJfrRecorder.java @@ -201,142 +201,141 @@ private TypedValue createEventValue(Event event) { Field[] fields = event.getClass().getDeclaredFields(); TypedValue typedValue = - eventType.asValue( - access -> { - boolean startTimeWritten = false; - boolean eventThreadWritten = false; - boolean stackTraceWritten = false; - for (Field f : fields) { - f.setAccessible(true); - - /* - * From jdk.jfr.Event.java: Supported field types are the Java primitives: {@code - * boolean}, {@code char}, {@code byte}, {@code short}, {@code int}, {@code long}, - * {@code float}, and {@code double}. Supported reference types are: {@code String}, - * {@code Thread} and {@code Class}. Arrays, enums, and other reference types are - * silently ignored and not included. Fields that are of the supported types can be - * excluded by using the transient modifier. Static fields, even of the supported - * types, are not included. - */ - // Transient and static fields are excluded - if (Modifier.isTransient(f.getModifiers()) || Modifier.isStatic(f.getModifiers())) { - continue; - } + eventType.asValue(access -> { + boolean startTimeWritten = false; + boolean eventThreadWritten = false; + boolean stackTraceWritten = false; + for (Field f : fields) { + f.setAccessible(true); + + /* + * From jdk.jfr.Event.java: Supported field types are the Java primitives: {@code + * boolean}, {@code char}, {@code byte}, {@code short}, {@code int}, {@code long}, + * {@code float}, and {@code double}. Supported reference types are: {@code String}, + * {@code Thread} and {@code Class}. Arrays, enums, and other reference types are + * silently ignored and not included. Fields that are of the supported types can be + * excluded by using the transient modifier. Static fields, even of the supported + * types, are not included. + */ + // Transient and static fields are excluded + if (Modifier.isTransient(f.getModifiers()) || Modifier.isStatic(f.getModifiers())) { + continue; + } - String fldName = getFieldName(f); - if (fldName.equals("startTime")) { - startTimeWritten = true; - } else if (fldName.equals("eventThread")) { - eventThreadWritten = true; - } else if (fldName.equals("stackTrace")) { - stackTraceWritten = true; - } - try { - switch (f.getType().getName()) { - case "byte": - { - byte byteValue = f.getByte(event); - access.putField(fldName, byteValue); - break; - } - case "char": - { - char charValue = f.getChar(event); - access.putField(fldName, charValue); - break; - } - case "short": - { - short shortValue = f.getShort(event); - access.putField(fldName, shortValue); - break; - } - case "int": - { - int intValue = f.getInt(event); - access.putField(fldName, intValue); - break; - } - case "long": - { - long longValue = f.getLong(event); - access.putField(fldName, longValue); - break; - } - case "float": - { - float floatValue = f.getFloat(event); - access.putField(fldName, floatValue); - break; - } - case "double": - { - double doubleValue = f.getDouble(event); - access.putField(fldName, doubleValue); - break; - } - case "boolean": - { - boolean booleanValue = f.getBoolean(event); - access.putField(fldName, booleanValue); - break; - } - case "java.lang.String": - { - String stringValue = (String) f.get(event); - access.putField(fldName, stringValue); - break; - } - case "java.lang.Class": - { - Class clz = (Class) f.get(event); - access.putField( - fldName, - fldAccess -> { - fldAccess - .putField( - "name", - nameAccess -> { - nameAccess.putField("string", clz.getSimpleName()); - }) - .putField("package", clz.getPackage().getName()) - .putField("modifiers", clz.getModifiers()); - }); - break; - } - case "java.lang.Thread": - { - Thread thrd = (Thread) f.get(event); - putThreadField(access, fldName, thrd); - break; - } - case "java.lang.StackTraceElement[]": - { - StackTraceElement[] stackTrace = (StackTraceElement[]) f.get(event); - putStackTraceField(access, fldName, stackTrace); - break; - } - default: - { - // System.err.println("Cannot write type:" + f.getType().getName()); - } + String fldName = getFieldName(f); + if (fldName.equals("startTime")) { + startTimeWritten = true; + } else if (fldName.equals("eventThread")) { + eventThreadWritten = true; + } else if (fldName.equals("stackTrace")) { + stackTraceWritten = true; + } + try { + switch (f.getType().getName()) { + case "byte": + { + byte byteValue = f.getByte(event); + access.putField(fldName, byteValue); + break; + } + case "char": + { + char charValue = f.getChar(event); + access.putField(fldName, charValue); + break; + } + case "short": + { + short shortValue = f.getShort(event); + access.putField(fldName, shortValue); + break; + } + case "int": + { + int intValue = f.getInt(event); + access.putField(fldName, intValue); + break; + } + case "long": + { + long longValue = f.getLong(event); + access.putField(fldName, longValue); + break; + } + case "float": + { + float floatValue = f.getFloat(event); + access.putField(fldName, floatValue); + break; + } + case "double": + { + double doubleValue = f.getDouble(event); + access.putField(fldName, doubleValue); + break; + } + case "boolean": + { + boolean booleanValue = f.getBoolean(event); + access.putField(fldName, booleanValue); + break; + } + case "java.lang.String": + { + String stringValue = (String) f.get(event); + access.putField(fldName, stringValue); + break; + } + case "java.lang.Class": + { + Class clz = (Class) f.get(event); + access.putField( + fldName, + fldAccess -> { + fldAccess + .putField( + "name", + nameAccess -> { + nameAccess.putField("string", clz.getSimpleName()); + }) + .putField("package", clz.getPackage().getName()) + .putField("modifiers", clz.getModifiers()); + }); + break; + } + case "java.lang.Thread": + { + Thread thrd = (Thread) f.get(event); + putThreadField(access, fldName, thrd); + break; + } + case "java.lang.StackTraceElement[]": + { + StackTraceElement[] stackTrace = (StackTraceElement[]) f.get(event); + putStackTraceField(access, fldName, stackTrace); + break; + } + default: + { + // System.err.println("Cannot write type:" + f.getType().getName()); } - } catch (IllegalAccessException e) { - throw new RuntimeException(); - } - } - if (!startTimeWritten) { - // default to 0 - access.putField("startTime", 0L); - } - if (!eventThreadWritten) { - // default to current thread - putThreadField(access, "eventThread", Thread.currentThread()); - } - if (!stackTraceWritten && hasStackTrace(event.getClass())) { - putStackTraceField(access, "stackTrace", Thread.currentThread().getStackTrace()); } - }); + } catch (IllegalAccessException e) { + throw new RuntimeException(); + } + } + if (!startTimeWritten) { + // default to 0 + access.putField("startTime", 0L); + } + if (!eventThreadWritten) { + // default to current thread + putThreadField(access, "eventThread", Thread.currentThread()); + } + if (!stackTraceWritten && hasStackTrace(event.getClass())) { + putStackTraceField(access, "stackTrace", Thread.currentThread().getStackTrace()); + } + }); return typedValue; } @@ -406,32 +405,28 @@ private TypedValue asStackFrame(Types types, StackTraceElement element) { k -> types .getType(Types.JDK.STACK_FRAME) - .asValue( - p -> { - p.putField("method", methodValue(types, k)) - .putField("lineNumber", k.getLineNumber()) - .putField("bytecodeIndex", -1) - .putField("type", k.isNativeMethod() ? "native" : "java"); - })); + .asValue(p -> { + p.putField("method", methodValue(types, k)) + .putField("lineNumber", k.getLineNumber()) + .putField("bytecodeIndex", -1) + .putField("type", k.isNativeMethod() ? "native" : "java"); + })); } private TypedValue methodValue(Types types, StackTraceElement element) { return types .getType(Types.JDK.METHOD) - .asValue( - p -> { - p.putField("type", classValue(types, element)) - .putField("name", element.getMethodName()); - }); + .asValue(p -> { + p.putField("type", classValue(types, element)).putField("name", element.getMethodName()); + }); } private TypedValue classValue(Types types, StackTraceElement element) { return types .getType(Types.JDK.CLASS) - .asValue( - p -> { - p.putField("name", getSimpleName(element.getClassName())); - }); + .asValue(p -> { + p.putField("name", getSimpleName(element.getClassName())); + }); } private TypedValue classLoaderValue(Types types, String classLoaderName) { @@ -440,19 +435,17 @@ private TypedValue classLoaderValue(Types types, String classLoaderName) { k -> types .getType(Types.JDK.CLASS_LOADER) - .asValue( - p -> { - p.putField("name", k); - })); + .asValue(p -> { + p.putField("name", k); + })); } private TypedValue packageValue(Types types, String packageName, String module) { return types .getType(Types.JDK.PACKAGE) - .asValue( - p -> { - p.putField("name", packageName).putField("module", moduleValue(types, module)); - }); + .asValue(p -> { + p.putField("name", packageName).putField("module", moduleValue(types, module)); + }); } private TypedValue moduleValue(Types types, String module) { @@ -461,10 +454,9 @@ private TypedValue moduleValue(Types types, String module) { k -> types .getType(Types.JDK.MODULE) - .asValue( - p -> { - p.putField("name", k); - })); + .asValue(p -> { + p.putField("name", k); + })); } private String getSimpleName(String className) { diff --git a/dd-java-agent/agent-profiling/profiling-controller-openjdk/src/test/java/com/datadog/profiling/controller/openjdk/events/DeadlockEventFactoryTest.java b/dd-java-agent/agent-profiling/profiling-controller-openjdk/src/test/java/com/datadog/profiling/controller/openjdk/events/DeadlockEventFactoryTest.java index e49b6daf00c..0a37f8cad59 100644 --- a/dd-java-agent/agent-profiling/profiling-controller-openjdk/src/test/java/com/datadog/profiling/controller/openjdk/events/DeadlockEventFactoryTest.java +++ b/dd-java-agent/agent-profiling/profiling-controller-openjdk/src/test/java/com/datadog/profiling/controller/openjdk/events/DeadlockEventFactoryTest.java @@ -91,29 +91,27 @@ private void assertDeadlock(boolean isMonitor, int expected) throws InterruptedE List events = eventFactory.collectEvents().stream() - .filter( - e -> { - if (e instanceof DeadlockedThreadEvent) { - return ((DeadlockedThreadEvent) e).getThreadName().contains(classifier); - } - return true; - }) - .sorted( - (e1, e2) -> { - if (e1 instanceof DeadlockEvent) { - return e2 instanceof DeadlockEvent ? 0 : -1; - } else { - if (e2 instanceof DeadlockEvent) { - return 1; - } - } - if (e1 instanceof DeadlockedThreadEvent && e2 instanceof DeadlockedThreadEvent) { - return ((DeadlockedThreadEvent) e1) - .getThreadName() - .compareTo(((DeadlockedThreadEvent) e2).getThreadName()); - } - return 0; - }) + .filter(e -> { + if (e instanceof DeadlockedThreadEvent) { + return ((DeadlockedThreadEvent) e).getThreadName().contains(classifier); + } + return true; + }) + .sorted((e1, e2) -> { + if (e1 instanceof DeadlockEvent) { + return e2 instanceof DeadlockEvent ? 0 : -1; + } else { + if (e2 instanceof DeadlockEvent) { + return 1; + } + } + if (e1 instanceof DeadlockedThreadEvent && e2 instanceof DeadlockedThreadEvent) { + return ((DeadlockedThreadEvent) e1) + .getThreadName() + .compareTo(((DeadlockedThreadEvent) e2).getThreadName()); + } + return 0; + }) .collect(Collectors.toList()); assertNotNull(events); diff --git a/dd-java-agent/agent-profiling/profiling-controller/src/main/java/com/datadog/profiling/controller/EnvironmentChecker.java b/dd-java-agent/agent-profiling/profiling-controller/src/main/java/com/datadog/profiling/controller/EnvironmentChecker.java index 666aa0029f5..1184e3d2f9a 100644 --- a/dd-java-agent/agent-profiling/profiling-controller/src/main/java/com/datadog/profiling/controller/EnvironmentChecker.java +++ b/dd-java-agent/agent-profiling/profiling-controller/src/main/java/com/datadog/profiling/controller/EnvironmentChecker.java @@ -34,17 +34,15 @@ public static boolean checkEnvironment(String temp, StringBuilder sb) { appendLine("Profiler requires Java 8 or newer", sb); return false; } - appendLine( - () -> - sb.append("Using Java version: ") - .append(JavaVirtualMachine.getRuntimeVersion()) - .append(" (") - .append(SystemProperties.getOrDefault("java.home", "unknown")) - .append(")")); - appendLine( - () -> - sb.append("Running as user: ") - .append(SystemProperties.getOrDefault("user.name", "unknown"))); + appendLine(() -> + sb.append("Using Java version: ") + .append(JavaVirtualMachine.getRuntimeVersion()) + .append(" (") + .append(SystemProperties.getOrDefault("java.home", "unknown")) + .append(")")); + appendLine(() -> + sb.append("Running as user: ") + .append(SystemProperties.getOrDefault("user.name", "unknown"))); boolean result = false; result |= checkJFR(sb); result |= checkDdprof(sb); @@ -60,11 +58,10 @@ public static boolean checkEnvironment(String temp, StringBuilder sb) { return false; } else { if (!temp.equals(SystemProperties.get("java.io.tmpdir"))) { - appendLine( - () -> - sb.append("! Make sure to add '-Ddd.profiling.tempdir=") - .append(temp) - .append("' to your JVM command line !")); + appendLine(() -> + sb.append("! Make sure to add '-Ddd.profiling.tempdir=") + .append(temp) + .append("' to your JVM command line !")); } } appendLine("Profiler is ready to be used.", sb); @@ -93,10 +90,9 @@ private static boolean checkDdprof(StringBuilder sb) { appendLine("Datadog profiler is only supported on Linux.", sb); return false; } else { - appendLine( - () -> - sb.append("Datadog profiler is supported on ") - .append(JavaVirtualMachine.getRuntimeVersion())); + appendLine(() -> + sb.append("Datadog profiler is supported on ") + .append(JavaVirtualMachine.getRuntimeVersion())); return true; } } @@ -135,13 +131,12 @@ private static boolean checkTempLocation(String temp, StringBuilder sb) { } catch (Exception e) { appendLine(() -> sb.append("Unable to create temp directory in location ").append(temp)); if (isPosix) { - appendLine( - () -> - sb.append("Base dir: ") - .append(base) - .append(" [") - .append(getPermissionsStringSafe(base)) - .append("]")); + appendLine(() -> + sb.append("Base dir: ") + .append(base) + .append(" [") + .append(getPermissionsStringSafe(base)) + .append("]")); } appendLine(() -> sb.append("Error: ").append(e)); } finally { @@ -241,25 +236,23 @@ private static boolean extractSoFromJar(Path target, StringBuilder sb) throws Ex try (JarFile jarFile = new JarFile(new File(jarUrl.toURI()))) { return jarFile.stream() .filter(e -> e.getName().contains("libjavaProfiler.so")) - .filter( - e -> - e.getName().contains(linuxArchFolder) - && (!OperatingSystem.isMusl() || e.getName().contains("-musl"))) + .filter(e -> + e.getName().contains(linuxArchFolder) + && (!OperatingSystem.isMusl() || e.getName().contains("-musl"))) .findFirst() - .map( - e -> { - try { - Path soFile = target.resolve("libjavaProfiler.so"); - Files.createDirectories(soFile.getParent()); - Files.copy(jarFile.getInputStream(e), soFile); - appendLine(() -> sb.append("Native library extracted to: ").append(soFile)); - return true; - } catch (Throwable t) { - appendLine("Failed to extract or load native library", sb); - appendLine(() -> sb.append("Error: ").append(t)); - } - return false; - }) + .map(e -> { + try { + Path soFile = target.resolve("libjavaProfiler.so"); + Files.createDirectories(soFile.getParent()); + Files.copy(jarFile.getInputStream(e), soFile); + appendLine(() -> sb.append("Native library extracted to: ").append(soFile)); + return true; + } catch (Throwable t) { + appendLine("Failed to extract or load native library", sb); + appendLine(() -> sb.append("Error: ").append(t)); + } + return false; + }) .orElse(Boolean.FALSE); } } diff --git a/dd-java-agent/agent-profiling/profiling-ddprof/src/test/java/com/datadog/profiling/ddprof/DatadogProfilerTest.java b/dd-java-agent/agent-profiling/profiling-ddprof/src/test/java/com/datadog/profiling/ddprof/DatadogProfilerTest.java index 021f36b331d..a089037c6e7 100644 --- a/dd-java-agent/agent-profiling/profiling-ddprof/src/test/java/com/datadog/profiling/ddprof/DatadogProfilerTest.java +++ b/dd-java-agent/agent-profiling/profiling-ddprof/src/test/java/com/datadog/profiling/ddprof/DatadogProfilerTest.java @@ -103,9 +103,8 @@ void testStartCmd(boolean cpu, boolean wall, boolean alloc, boolean memleak) thr private static Stream profilingModes() { return IntStream.range(0, 1 << 4) - .mapToObj( - x -> - Arguments.of((x & 0x1000) != 0, (x & 0x100) != 0, (x & 0x10) != 0, (x & 0x1) != 0)); + .mapToObj(x -> + Arguments.of((x & 0x1000) != 0, (x & 0x100) != 0, (x & 0x10) != 0, (x & 0x1) != 0)); } @Test diff --git a/dd-java-agent/agent-profiling/profiling-scrubber/src/main/java/com/datadog/profiling/scrubber/DefaultScrubDefinition.java b/dd-java-agent/agent-profiling/profiling-scrubber/src/main/java/com/datadog/profiling/scrubber/DefaultScrubDefinition.java index a625041150f..72fd04c41a2 100644 --- a/dd-java-agent/agent-profiling/profiling-scrubber/src/main/java/com/datadog/profiling/scrubber/DefaultScrubDefinition.java +++ b/dd-java-agent/agent-profiling/profiling-scrubber/src/main/java/com/datadog/profiling/scrubber/DefaultScrubDefinition.java @@ -40,13 +40,12 @@ public static JfrScrubber create(List excludeEventTypes) { ? new HashSet<>(excludeEventTypes) : Collections.emptySet(); - return new JfrScrubber( - eventTypeName -> { - if (excludeSet.contains(eventTypeName)) { - return null; - } - return DEFAULT_SCRUB_FIELDS.get(eventTypeName); - }); + return new JfrScrubber(eventTypeName -> { + if (excludeSet.contains(eventTypeName)) { + return null; + } + return DEFAULT_SCRUB_FIELDS.get(eventTypeName); + }); } private DefaultScrubDefinition() {} diff --git a/dd-java-agent/agent-profiling/profiling-uploader/src/main/java/com/datadog/profiling/uploader/util/JfrCliHelper.java b/dd-java-agent/agent-profiling/profiling-uploader/src/main/java/com/datadog/profiling/uploader/util/JfrCliHelper.java index 1348c5b2dea..3ecfe1da496 100644 --- a/dd-java-agent/agent-profiling/profiling-uploader/src/main/java/com/datadog/profiling/uploader/util/JfrCliHelper.java +++ b/dd-java-agent/agent-profiling/profiling-uploader/src/main/java/com/datadog/profiling/uploader/util/JfrCliHelper.java @@ -74,11 +74,10 @@ public static void invokeOn(final RecordingData data, final IOLogger ioLogger) { try (ByteArrayOutputStream out = new ByteArrayOutputStream()) { Future asyncRedirect = - executorService.submit( - () -> { - redirect(process.getInputStream(), out); - return true; - }); + executorService.submit(() -> { + redirect(process.getInputStream(), out); + return true; + }); if (!process.waitFor(30, TimeUnit.SECONDS)) { ioLogger.error("Failed to gather information on recording, `jfr` never finished"); @@ -129,13 +128,12 @@ public static void invokeOn(final RecordingData data, final IOLogger ioLogger) { events.stream() .sorted(Comparator.comparing(Event::getSize).reversed()) .limit(10) - .forEach( - event -> { - ioLogger.error( - String.format( - "Event: %s, size = %d, count = %d", - event.getType(), event.getSize(), event.getCount())); - }); + .forEach(event -> { + ioLogger.error( + String.format( + "Event: %s, size = %d, count = %d", + event.getType(), event.getSize(), event.getCount())); + }); } catch (Exception e) { ioLogger.error("Failed to gather information on recording", e); return; diff --git a/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/AdviceAppliesOnScanner.java b/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/AdviceAppliesOnScanner.java index 779d3c508e3..b4b53172eba 100644 --- a/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/AdviceAppliesOnScanner.java +++ b/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/AdviceAppliesOnScanner.java @@ -40,13 +40,12 @@ public static Map> extractTargetSys // collect the advices final Set adviceClassNames = new HashSet<>(); ((Instrumenter.HasMethodAdvice) instrumenter) - .methodAdvice( - (matcher, adviceClass, additionalClasses) -> { - adviceClassNames.add(adviceClass); - if (additionalClasses != null) { - adviceClassNames.addAll(asList(additionalClasses)); - } - }); + .methodAdvice((matcher, adviceClass, additionalClasses) -> { + adviceClassNames.add(adviceClass); + if (additionalClasses != null) { + adviceClassNames.addAll(asList(additionalClasses)); + } + }); for (String adviceClassName : adviceClassNames) { // process each advice new ClassReader(adviceClassName) diff --git a/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/InstrumenterState.java b/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/InstrumenterState.java index d5f56ae383f..d5fc2bf6729 100644 --- a/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/InstrumenterState.java +++ b/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/InstrumenterState.java @@ -174,12 +174,11 @@ private static void updateState(AtomicLongArray state, int bitIndex, int status) public static String summary() { StringBuilder summary = new StringBuilder(); - classLoaderStates.visit( - (loader, state) -> { - summary.append(loader != null ? loader.getClass().getName() : ""); - summarizeState(summary, state); - summary.append("\n\n"); - }); + classLoaderStates.visit((loader, state) -> { + summary.append(loader != null ? loader.getClass().getName() : ""); + summarizeState(summary, state); + summary.append("\n\n"); + }); return summary.toString(); } diff --git a/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/advice/AdviceScanner.java b/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/advice/AdviceScanner.java index aad87cb62f9..bb9893373a6 100644 --- a/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/advice/AdviceScanner.java +++ b/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/advice/AdviceScanner.java @@ -110,13 +110,12 @@ private void collectAdviceRoots() { for (Instrumenter instrumenter : instrumenters) { if (instrumenter instanceof Instrumenter.HasMethodAdvice) { ((Instrumenter.HasMethodAdvice) instrumenter) - .methodAdvice( - (matcher, adviceClass, additionalClasses) -> { - adviceRoots.add(adviceClass); - if (additionalClasses != null) { - addAll(adviceRoots, additionalClasses); - } - }); + .methodAdvice((matcher, adviceClass, additionalClasses) -> { + adviceRoots.add(adviceClass); + if (additionalClasses != null) { + addAll(adviceRoots, additionalClasses); + } + }); } } } diff --git a/dd-java-agent/agent-tooling/src/test/java/datadog/trace/agent/tooling/advice/AdviceProcessorPipelineTest.java b/dd-java-agent/agent-tooling/src/test/java/datadog/trace/agent/tooling/advice/AdviceProcessorPipelineTest.java index 322343ad53d..dc50555cea9 100644 --- a/dd-java-agent/agent-tooling/src/test/java/datadog/trace/agent/tooling/advice/AdviceProcessorPipelineTest.java +++ b/dd-java-agent/agent-tooling/src/test/java/datadog/trace/agent/tooling/advice/AdviceProcessorPipelineTest.java @@ -136,10 +136,9 @@ void retainsAdviceHierarchyMuzzleChecksWithoutInjectingHierarchy(@TempDir Path t Stream.of(matcher.getReferences()) .filter(reference -> reference.className.equals("net.bytebuddy.jar.asm.ClassWriter")) .flatMap(reference -> Stream.of(reference.methods)) - .anyMatch( - method -> - method.name.equals("newUTF8") - && method.methodType.equals("(Ljava/lang/String;)I"))); + .anyMatch(method -> + method.name.equals("newUTF8") + && method.methodType.equals("(Ljava/lang/String;)I"))); } } diff --git a/dd-java-agent/agent-tooling/src/test/java/datadog/trace/agent/tooling/advice/AdviceScannerTest.java b/dd-java-agent/agent-tooling/src/test/java/datadog/trace/agent/tooling/advice/AdviceScannerTest.java index af22854e3bf..b7cb04cd94e 100644 --- a/dd-java-agent/agent-tooling/src/test/java/datadog/trace/agent/tooling/advice/AdviceScannerTest.java +++ b/dd-java-agent/agent-tooling/src/test/java/datadog/trace/agent/tooling/advice/AdviceScannerTest.java @@ -55,10 +55,9 @@ void scansNeutralUsesAndAdditionalClasses() { assertFalse(invokeDynamic.getHandles().isEmpty()); List typeUsages = root.getUsages().stream() - .filter( - use -> - use.getKind() == UsageKind.TYPE - && use.getOwner().equals(Dependency.class.getName())) + .filter(use -> + use.getKind() == UsageKind.TYPE + && use.getOwner().equals(Dependency.class.getName())) .collect(toList()); assertEquals( Arrays.asList(Opcodes.NEW, Opcodes.ANEWARRAY, Opcodes.MULTIANEWARRAY, Opcodes.LDC), @@ -68,11 +67,10 @@ void scansNeutralUsesAndAdditionalClasses() { typeUsages.stream().map(Usage::getDescriptor).collect(toList())); assertTrue( typeUsages.stream() - .allMatch( - use -> - use.getSource().getClassName().equals(AdviceRoot.class.getName()) - && use.getSource().getSourceFile().equals("AdviceScanningFixtures.java") - && use.getSource().getLine() > 0)); + .allMatch(use -> + use.getSource().getClassName().equals(AdviceRoot.class.getName()) + && use.getSource().getSourceFile().equals("AdviceScanningFixtures.java") + && use.getSource().getLine() > 0)); assertFalse(result.getClassInfo(ClassReader.class.getName()).isScanned()); assertFalse(result.getClassInfo(String.class.getName()).isScanned()); @@ -183,13 +181,12 @@ void retainsNonObjectSuperclassConstructorRequirements() { assertFalse(result.getClassInfo(AdviceSuperclass.class.getName()).isReachableFromAdvice()); assertTrue( root.getUsages().stream() - .anyMatch( - usage -> - usage.getKind() == UsageKind.METHOD - && usage.getOpcode() == Opcodes.INVOKESPECIAL - && usage.getOwner().equals(AdviceSuperclass.class.getName()) - && usage.getName().equals("") - && usage.getDescriptor().equals("(Ljava/lang/String;)V"))); + .anyMatch(usage -> + usage.getKind() == UsageKind.METHOD + && usage.getOpcode() == Opcodes.INVOKESPECIAL + && usage.getOwner().equals(AdviceSuperclass.class.getName()) + && usage.getName().equals("") + && usage.getDescriptor().equals("(Ljava/lang/String;)V"))); } @Test diff --git a/dd-java-agent/agent-tooling/src/test/java/datadog/trace/agent/tooling/muzzle/ReferenceCreatorConversionTest.java b/dd-java-agent/agent-tooling/src/test/java/datadog/trace/agent/tooling/muzzle/ReferenceCreatorConversionTest.java index 52371aca05d..7b4c9426387 100644 --- a/dd-java-agent/agent-tooling/src/test/java/datadog/trace/agent/tooling/muzzle/ReferenceCreatorConversionTest.java +++ b/dd-java-agent/agent-tooling/src/test/java/datadog/trace/agent/tooling/muzzle/ReferenceCreatorConversionTest.java @@ -29,11 +29,10 @@ void preservesTransitiveReferencesThroughArrayOwners() { assertNotNull(type, advice.getName()); assertTrue( Stream.of(type.methods) - .anyMatch( - method -> - method.name.equals("getType") - && method.methodType.equals( - "(Ljava/lang/Class;)Lnet/bytebuddy/jar/asm/Type;")), + .anyMatch(method -> + method.name.equals("getType") + && method.methodType.equals( + "(Ljava/lang/Class;)Lnet/bytebuddy/jar/asm/Type;")), advice.getName()); assertFalse(references.keySet().stream().anyMatch(name -> name.startsWith("["))); } diff --git a/dd-java-agent/appsec/src/main/java/com/datadog/appsec/gateway/AppSecRequestContext.java b/dd-java-agent/appsec/src/main/java/com/datadog/appsec/gateway/AppSecRequestContext.java index 3cfea27eb66..0b328d14e4b 100644 --- a/dd-java-agent/appsec/src/main/java/com/datadog/appsec/gateway/AppSecRequestContext.java +++ b/dd-java-agent/appsec/src/main/java/com/datadog/appsec/gateway/AppSecRequestContext.java @@ -881,57 +881,56 @@ public void reportDerivatives(Map data) { if (data == null || data.isEmpty()) return; // Initialize or update derivatives atomically - derivatives.updateAndGet( - current -> { - Map updated = current != null ? new HashMap<>(current) : new HashMap<>(); - - // Process each attribute according to the specification - for (Map.Entry entry : data.entrySet()) { - String attributeKey = entry.getKey(); - Object attributeConfig = entry.getValue(); - - if (attributeConfig instanceof Map) { - @SuppressWarnings("unchecked") - Map config = (Map) attributeConfig; - - // Check if it's a literal value schema - if (config.containsKey("value")) { - Object literalValue = config.get("value"); - if (literalValue != null) { - // Preserve the original type - don't convert to string - updated.put(attributeKey, literalValue); - log.debug( - "Added literal attribute: {} = {} (type: {})", - attributeKey, - literalValue, - literalValue.getClass().getSimpleName()); - } - } - // Check if it's a request data schema - else if (config.containsKey("address")) { - String address = (String) config.get("address"); - @SuppressWarnings("unchecked") - List keyPath = (List) config.get("key_path"); - @SuppressWarnings("unchecked") - List transformers = (List) config.get("transformers"); - - Object extractedValue = extractValueFromRequestData(address, keyPath, transformers); - if (extractedValue != null) { - // For extracted values, convert to string as they come from request data - updated.put(attributeKey, extractedValue.toString()); - log.debug("Added extracted attribute: {} = {}", attributeKey, extractedValue); - } - } - } else { - // Handle plain string/numeric values - updated.put(attributeKey, attributeConfig); - log.debug("Added direct attribute: {} = {}", attributeKey, attributeConfig); + derivatives.updateAndGet(current -> { + Map updated = current != null ? new HashMap<>(current) : new HashMap<>(); + + // Process each attribute according to the specification + for (Map.Entry entry : data.entrySet()) { + String attributeKey = entry.getKey(); + Object attributeConfig = entry.getValue(); + + if (attributeConfig instanceof Map) { + @SuppressWarnings("unchecked") + Map config = (Map) attributeConfig; + + // Check if it's a literal value schema + if (config.containsKey("value")) { + Object literalValue = config.get("value"); + if (literalValue != null) { + // Preserve the original type - don't convert to string + updated.put(attributeKey, literalValue); + log.debug( + "Added literal attribute: {} = {} (type: {})", + attributeKey, + literalValue, + literalValue.getClass().getSimpleName()); + } + } + // Check if it's a request data schema + else if (config.containsKey("address")) { + String address = (String) config.get("address"); + @SuppressWarnings("unchecked") + List keyPath = (List) config.get("key_path"); + @SuppressWarnings("unchecked") + List transformers = (List) config.get("transformers"); + + Object extractedValue = extractValueFromRequestData(address, keyPath, transformers); + if (extractedValue != null) { + // For extracted values, convert to string as they come from request data + updated.put(attributeKey, extractedValue.toString()); + log.debug("Added extracted attribute: {} = {}", attributeKey, extractedValue); } } + } else { + // Handle plain string/numeric values + updated.put(attributeKey, attributeConfig); + log.debug("Added direct attribute: {} = {}", attributeKey, attributeConfig); + } + } - // Unmodifiable: readers may hold this instance indefinitely. - return unmodifiableMap(updated); - }); + // Unmodifiable: readers may hold this instance indefinitely. + return unmodifiableMap(updated); + }); } /** diff --git a/dd-java-agent/appsec/src/main/java/com/datadog/appsec/sca/ScaReachabilitySystem.java b/dd-java-agent/appsec/src/main/java/com/datadog/appsec/sca/ScaReachabilitySystem.java index 28a7fe176e6..eef39de411f 100644 --- a/dd-java-agent/appsec/src/main/java/com/datadog/appsec/sca/ScaReachabilitySystem.java +++ b/dd-java-agent/appsec/src/main/java/com/datadog/appsec/sca/ScaReachabilitySystem.java @@ -127,22 +127,21 @@ private static StackTraceElement findCallsiteInStream( String vulnerableClass, Stream stream) { boolean[] pastVulnerableClass = {false}; return stream - .filter( - frame -> { - String cls = frame.getClassName(); - if (!pastVulnerableClass[0]) { - if (cls.equals(vulnerableClass)) { - pastVulnerableClass[0] = true; - } - return false; - } - // Skip remaining frames from the vulnerable class itself - if (cls.equals(vulnerableClass)) { - return false; - } - // Skip intermediate library frames so we report client code, not a wrapper library - return ScaStackExclusionTrie.apply(cls) < 1; - }) + .filter(frame -> { + String cls = frame.getClassName(); + if (!pastVulnerableClass[0]) { + if (cls.equals(vulnerableClass)) { + pastVulnerableClass[0] = true; + } + return false; + } + // Skip remaining frames from the vulnerable class itself + if (cls.equals(vulnerableClass)) { + return false; + } + // Skip intermediate library frames so we report client code, not a wrapper library + return ScaStackExclusionTrie.apply(cls) < 1; + }) .findFirst() .orElse(null); } diff --git a/dd-java-agent/appsec/src/test/java/com/datadog/appsec/AppSecSystemReloadRegistrationTest.java b/dd-java-agent/appsec/src/test/java/com/datadog/appsec/AppSecSystemReloadRegistrationTest.java index d48d6475a73..18c6a0307bd 100644 --- a/dd-java-agent/appsec/src/test/java/com/datadog/appsec/AppSecSystemReloadRegistrationTest.java +++ b/dd-java-agent/appsec/src/test/java/com/datadog/appsec/AppSecSystemReloadRegistrationTest.java @@ -92,16 +92,15 @@ void reloadThroughRemoteConfigDoesNotReRegisterCallback() throws Exception { verify(subService, times(1)).registerCallback(eq(EVENTS.requestPathParams()), any()); // Remote Config delivers a ruleset that also requires server.request.path_params - assertDoesNotThrow( - () -> { - asmListenerCaptor - .getValue() - .accept( - mock(ConfigKey.class), - RULE_REQUIRING_PATH_PARAMS.getBytes(StandardCharsets.UTF_8), - null); - confEndListenerCaptor.getValue().onConfigurationEnd(); - }); + assertDoesNotThrow(() -> { + asmListenerCaptor + .getValue() + .accept( + mock(ConfigKey.class), + RULE_REQUIRING_PATH_PARAMS.getBytes(StandardCharsets.UTF_8), + null); + confEndListenerCaptor.getValue().onConfigurationEnd(); + }); // the already-registered callback is left untouched, not re-registered verify(subService, times(1)).registerCallback(eq(EVENTS.requestPathParams()), any()); diff --git a/dd-java-agent/appsec/src/test/java/com/datadog/appsec/ddwaf/WAFModuleHandleReloadRaceTest.java b/dd-java-agent/appsec/src/test/java/com/datadog/appsec/ddwaf/WAFModuleHandleReloadRaceTest.java index c3c6f6bf2fc..3a846232486 100644 --- a/dd-java-agent/appsec/src/test/java/com/datadog/appsec/ddwaf/WAFModuleHandleReloadRaceTest.java +++ b/dd-java-agent/appsec/src/test/java/com/datadog/appsec/ddwaf/WAFModuleHandleReloadRaceTest.java @@ -127,11 +127,10 @@ private void evaluate(AppSecRequestContext requestContext, GatewayContext gatewa @Test void usesReplacementWhenReloadRetiresTheCapturedHandle() throws Exception { when(request.isWafContextClosed()) - .thenAnswer( - invocation -> { - reload(); - return false; - }); + .thenAnswer(invocation -> { + reload(); + return false; + }); when(request.getOrCreateWafContext(any(), anyBoolean(), anyBoolean())).thenReturn(context); evaluate(); @@ -150,24 +149,21 @@ void waitsForContextCreationBeforeClosingTheHandle() throws Exception { CountDownLatch creating = new CountDownLatch(1); CountDownLatch finishCreation = new CountDownLatch(1); when(request.getOrCreateWafContext(any(), anyBoolean(), anyBoolean())) - .thenAnswer( - invocation -> { - creating.countDown(); - assertTrue(finishCreation.await(10, TimeUnit.SECONDS)); - return context; - }); + .thenAnswer(invocation -> { + creating.countDown(); + assertTrue(finishCreation.await(10, TimeUnit.SECONDS)); + return context; + }); FutureTask evaluation = - new FutureTask<>( - () -> { - evaluate(); - return null; - }); + new FutureTask<>(() -> { + evaluate(); + return null; + }); FutureTask update = - new FutureTask<>( - () -> { - reload(); - return null; - }); + new FutureTask<>(() -> { + reload(); + return null; + }); Thread evaluationThread = new Thread(evaluation, "waf-context-creation-test"); Thread updateThread = new Thread(update, "waf-handle-reload-test"); evaluationThread.start(); @@ -212,26 +208,23 @@ void retriesWithoutWaitingForRetiredHandleDestruction() throws Exception { CountDownLatch captured = new CountDownLatch(1); CountDownLatch replaced = new CountDownLatch(1); when(request.isWafContextClosed()) - .thenAnswer( - invocation -> { - captured.countDown(); - assertTrue(replaced.await(10, TimeUnit.SECONDS)); - return false; - }); + .thenAnswer(invocation -> { + captured.countDown(); + assertTrue(replaced.await(10, TimeUnit.SECONDS)); + return false; + }); when(request.getOrCreateWafContext(any(), anyBoolean(), anyBoolean())).thenReturn(context); StampedLock oldLock = (StampedLock) currentSnapshotField("handleLock"); FutureTask evaluation = - new FutureTask<>( - () -> { - evaluate(); - return null; - }); + new FutureTask<>(() -> { + evaluate(); + return null; + }); FutureTask update = - new FutureTask<>( - () -> { - reload(); - return null; - }); + new FutureTask<>(() -> { + reload(); + return null; + }); Thread evaluationThread = new Thread(evaluation, "waf-stale-snapshot-test"); Thread updateThread = new Thread(update, "waf-retired-handle-test"); long stamp = oldLock.writeLock(); @@ -267,11 +260,10 @@ void usesAReadyContextWithoutTakingTheHandleLock() throws Exception { when(request.getWafContextIfReady(anyBoolean(), anyBoolean())).thenReturn(context); StampedLock handleLock = (StampedLock) currentSnapshotField("handleLock"); FutureTask evaluation = - new FutureTask<>( - () -> { - evaluate(); - return null; - }); + new FutureTask<>(() -> { + evaluate(); + return null; + }); long stamp = handleLock.writeLock(); try { Thread thread = new Thread(evaluation, "waf-ready-context-test"); @@ -348,20 +340,18 @@ void firstRaspCallCreatesRaspMetricsThenUsesTheReadyContext() { void allowsReloadWhileAnExistingContextEvaluates() throws Exception { when(request.getOrCreateWafContext(any(), anyBoolean(), anyBoolean())).thenReturn(context); when(context.run(anyMap(), any(), any())) - .thenAnswer( - invocation -> { - FutureTask update = - new FutureTask<>( - () -> { - reload(); - return null; - }); - Thread thread = new Thread(update, "waf-reload-during-evaluation-test"); - thread.start(); - update.get(10, TimeUnit.SECONDS); - assertFalse(initialHandle.isOnline()); - return Waf.ResultWithData.OK_NULL; - }); + .thenAnswer(invocation -> { + FutureTask update = + new FutureTask<>(() -> { + reload(); + return null; + }); + Thread thread = new Thread(update, "waf-reload-during-evaluation-test"); + thread.start(); + update.get(10, TimeUnit.SECONDS); + assertFalse(initialHandle.isOnline()); + return Waf.ResultWithData.OK_NULL; + }); evaluate(); diff --git a/dd-java-agent/appsec/src/test/java/com/datadog/appsec/gateway/ApiSecuritySamplerConcurrencyTest.java b/dd-java-agent/appsec/src/test/java/com/datadog/appsec/gateway/ApiSecuritySamplerConcurrencyTest.java index 318721aa35b..813c66457ab 100644 --- a/dd-java-agent/appsec/src/test/java/com/datadog/appsec/gateway/ApiSecuritySamplerConcurrencyTest.java +++ b/dd-java-agent/appsec/src/test/java/com/datadog/appsec/gateway/ApiSecuritySamplerConcurrencyTest.java @@ -85,14 +85,13 @@ public void setKeepOpenForApiSecurityPostProcessing(boolean flag) { ctx.setResponseStatus(200); contexts.add(ctx); decisions.add( - executor.submit( - () -> { - boolean selected = sampler.preSampleRequest(ctx, FRAMEWORK); - if (selected) { - sampler.releaseOne(); - } - return selected; - })); + executor.submit(() -> { + boolean selected = sampler.preSampleRequest(ctx, FRAMEWORK); + if (selected) { + sampler.releaseOne(); + } + return selected; + })); } assertTrue(acquired.await(5, SECONDS)); } @@ -133,23 +132,22 @@ void concurrentStandaloneRequestsSelectOnlyOneSamplePerEndpoint() throws Excepti List> decisions = new ArrayList<>(); for (int worker = 0; worker < WORKERS; worker++) { decisions.add( - executor.submit( - () -> { - ready.countDown(); - assertTrue(start.await(5, SECONDS)); - AppSecRequestContext ctx = context("same-endpoint"); - boolean selected = sampler.preSampleRequest(ctx, FRAMEWORK); - try { - if (!selected) { - assertFalse(ctx.isKeepOpenForApiSecurityPostProcessing()); - } - return selected; - } finally { - if (selected) { - sampler.releaseOne(); - } - } - })); + executor.submit(() -> { + ready.countDown(); + assertTrue(start.await(5, SECONDS)); + AppSecRequestContext ctx = context("same-endpoint"); + boolean selected = sampler.preSampleRequest(ctx, FRAMEWORK); + try { + if (!selected) { + assertFalse(ctx.isKeepOpenForApiSecurityPostProcessing()); + } + return selected; + } finally { + if (selected) { + sampler.releaseOne(); + } + } + })); } assertTrue(ready.await(5, SECONDS)); start.countDown(); @@ -182,24 +180,23 @@ void concurrentExpirationAndCapacityEvictionKeepStateConsistent() throws Excepti for (int worker = 0; worker < WORKERS; worker++) { final int offset = worker; tasks.add( - executor.submit( - () -> { - assertTrue(start.await(5, SECONDS)); - for (int request = 0; request < 100; request++) { - AppSecRequestContext ctx = context("endpoint-" + ((request + offset) % 16)); - boolean selected = sampler.preSampleRequest(ctx, FRAMEWORK); - try { - if (!selected) { - assertFalse(ctx.isKeepOpenForApiSecurityPostProcessing()); - } - } finally { - if (selected) { - sampler.releaseOne(); - } - } + executor.submit(() -> { + assertTrue(start.await(5, SECONDS)); + for (int request = 0; request < 100; request++) { + AppSecRequestContext ctx = context("endpoint-" + ((request + offset) % 16)); + boolean selected = sampler.preSampleRequest(ctx, FRAMEWORK); + try { + if (!selected) { + assertFalse(ctx.isKeepOpenForApiSecurityPostProcessing()); + } + } finally { + if (selected) { + sampler.releaseOne(); } - return null; - })); + } + } + return null; + })); } start.countDown(); for (Future task : tasks) { diff --git a/dd-java-agent/appsec/src/test/java/com/datadog/appsec/gateway/AppSecRequestContextTest.java b/dd-java-agent/appsec/src/test/java/com/datadog/appsec/gateway/AppSecRequestContextTest.java index a8a290ff4d9..ddc2de462e1 100644 --- a/dd-java-agent/appsec/src/test/java/com/datadog/appsec/gateway/AppSecRequestContextTest.java +++ b/dd-java-agent/appsec/src/test/java/com/datadog/appsec/gateway/AppSecRequestContextTest.java @@ -584,18 +584,15 @@ void testReportDerivativesMaintainsDataIntegrityUnderConcurrentAccess() throws E for (int thread = 0; thread < numThreads; thread++) { int firstAttribute = thread * 2 + 1; futures.add( - executorService.submit( - () -> { - startLatch.await(); // Wait for all threads to be ready - context.reportDerivatives( - singletonMap( - "attr" + firstAttribute, literalValue("value" + firstAttribute))); - context.reportDerivatives( - singletonMap( - "attr" + (firstAttribute + 1), - literalValue("value" + (firstAttribute + 1)))); - return null; - })); + executorService.submit(() -> { + startLatch.await(); // Wait for all threads to be ready + context.reportDerivatives( + singletonMap("attr" + firstAttribute, literalValue("value" + firstAttribute))); + context.reportDerivatives( + singletonMap( + "attr" + (firstAttribute + 1), literalValue("value" + (firstAttribute + 1)))); + return null; + })); } // Release all threads at once to maximize concurrent execution diff --git a/dd-java-agent/appsec/src/test/java/com/datadog/appsec/gateway/AppSecRequestContextWafContextRaceTest.java b/dd-java-agent/appsec/src/test/java/com/datadog/appsec/gateway/AppSecRequestContextWafContextRaceTest.java index d26e574ae98..c104d3e9013 100644 --- a/dd-java-agent/appsec/src/test/java/com/datadog/appsec/gateway/AppSecRequestContextWafContextRaceTest.java +++ b/dd-java-agent/appsec/src/test/java/com/datadog/appsec/gateway/AppSecRequestContextWafContextRaceTest.java @@ -211,18 +211,16 @@ void concurrentCloseNeverCreatesOrphan() throws Exception { final CyclicBarrier barrier = new CyclicBarrier(2); Future closer = - pool.submit( - () -> { - barrier.await(); - ctx.closeWafContext(); - return null; - }); + pool.submit(() -> { + barrier.await(); + ctx.closeWafContext(); + return null; + }); Future creator = - pool.submit( - () -> { - barrier.await(); - return ctx.getOrCreateWafContext(wafHandle, false, false); - }); + pool.submit(() -> { + barrier.await(); + return ctx.getOrCreateWafContext(wafHandle, false, false); + }); closer.get(); WafContext late = creator.get(); diff --git a/dd-java-agent/appsec/src/test/java/com/datadog/appsec/sca/ScaReachabilityMethodLevelTest.java b/dd-java-agent/appsec/src/test/java/com/datadog/appsec/sca/ScaReachabilityMethodLevelTest.java index a708bd49384..611323ec435 100644 --- a/dd-java-agent/appsec/src/test/java/com/datadog/appsec/sca/ScaReachabilityMethodLevelTest.java +++ b/dd-java-agent/appsec/src/test/java/com/datadog/appsec/sca/ScaReachabilityMethodLevelTest.java @@ -76,10 +76,9 @@ public static String callToString(Object value) { void setUp() throws Exception { ScaReachabilityDependencyRegistry.INSTANCE.resetForTesting(); // Register the same handler as ScaReachabilitySystem.start() does in production - ScaReachabilityCallback.register( - (vulnId, artifact, version, dotClassName, methodName, line) -> - ScaReachabilityDependencyRegistry.INSTANCE.recordHit( - artifact, version, vulnId, dotClassName, methodName, line)); + ScaReachabilityCallback.register((vulnId, artifact, version, dotClassName, methodName, line) -> + ScaReachabilityDependencyRegistry.INSTANCE.recordHit( + artifact, version, vulnId, dotClassName, methodName, line)); db = ScaCveDatabase.parse(new StringReader("{\"version\":1,\"entries\":[]}")); transformer = new ScaReachabilityTransformer(db, null); } diff --git a/dd-java-agent/appsec/src/test/java/com/datadog/appsec/sca/ScaRealLibraryBytecodeTest.java b/dd-java-agent/appsec/src/test/java/com/datadog/appsec/sca/ScaRealLibraryBytecodeTest.java index 40303c46bf2..cef931e7a27 100644 --- a/dd-java-agent/appsec/src/test/java/com/datadog/appsec/sca/ScaRealLibraryBytecodeTest.java +++ b/dd-java-agent/appsec/src/test/java/com/datadog/appsec/sca/ScaRealLibraryBytecodeTest.java @@ -43,10 +43,9 @@ class ScaRealLibraryBytecodeTest { @BeforeEach void setUp() { ScaReachabilityDependencyRegistry.INSTANCE.resetForTesting(); - ScaReachabilityCallback.register( - (vulnId, artifact, version, dotClassName, methodName, line) -> - ScaReachabilityDependencyRegistry.INSTANCE.recordHit( - artifact, version, vulnId, dotClassName, methodName, line)); + ScaReachabilityCallback.register((vulnId, artifact, version, dotClassName, methodName, line) -> + ScaReachabilityDependencyRegistry.INSTANCE.recordHit( + artifact, version, vulnId, dotClassName, methodName, line)); } @AfterEach diff --git a/dd-java-agent/instrumentation-testing/src/main/java/datadog/trace/agent/test/assertions/SpanMatcher.java b/dd-java-agent/instrumentation-testing/src/main/java/datadog/trace/agent/test/assertions/SpanMatcher.java index 38827c3524d..522cdeb67f3 100644 --- a/dd-java-agent/instrumentation-testing/src/main/java/datadog/trace/agent/test/assertions/SpanMatcher.java +++ b/dd-java-agent/instrumentation-testing/src/main/java/datadog/trace/agent/test/assertions/SpanMatcher.java @@ -431,15 +431,14 @@ private void assertSpanTags(TagMap tags) { } // Assert all tags List uncheckedTagNames = new ArrayList<>(); - tags.forEach( - (key, value) -> { - Matcher matcher = (Matcher) matchers.remove(key); - if (matcher == null) { - uncheckedTagNames.add(key); - } else { - assertValue(matcher, value, "Unexpected " + key + " tag value"); - } - }); + tags.forEach((key, value) -> { + Matcher matcher = (Matcher) matchers.remove(key); + if (matcher == null) { + uncheckedTagNames.add(key); + } else { + assertValue(matcher, value, "Unexpected " + key + " tag value"); + } + }); // Remove matchers that accept missing tags Collection> values = matchers.values(); values.removeIf(matcher -> matcher instanceof Any); diff --git a/dd-java-agent/instrumentation-testing/src/main/java/datadog/trace/agent/test/scopediag/ScopeContinuationTransformer.java b/dd-java-agent/instrumentation-testing/src/main/java/datadog/trace/agent/test/scopediag/ScopeContinuationTransformer.java index 5453f73f318..a0b435ada62 100644 --- a/dd-java-agent/instrumentation-testing/src/main/java/datadog/trace/agent/test/scopediag/ScopeContinuationTransformer.java +++ b/dd-java-agent/instrumentation-testing/src/main/java/datadog/trace/agent/test/scopediag/ScopeContinuationTransformer.java @@ -125,97 +125,88 @@ public void onError( .with(AgentBuilder.RedefinitionStrategy.RETRANSFORMATION) .with(AgentBuilder.TypeStrategy.Default.REDEFINE) .type(named(corePackage + ".scopemanager.ScopeContinuation"), is(loader)) - .transform( - (builder, type, classLoader, module, pd) -> - builder - .visit( - Advice.to(ContinuationAdvice.Register.class, locator) - .on( - isMethod() - .and(named("register")) - .and(takesArguments(0)) - .and( - returns( - named( - corePackage - + ".scopemanager.ScopeContinuation"))))) - .visit( - Advice.to(ContinuationAdvice.Activate.class, locator) - .on( - isMethod() - .and(named("resume")) - .and(takesArguments(0)) - .and(returns(named("datadog.context.ContextScope"))))) - .visit( - Advice.to(ContinuationAdvice.Cancel.class, locator) - .on( - isMethod() - .and( - named("release") - .or(named("cancelFromContinuedScopeClose"))) - .and(takesArguments(0)) - .and(returns(void.class))))) - .type(named(corePackage + ".PendingTrace"), is(loader)) - .transform( - (builder, type, classLoader, module, pd) -> - builder.visit( - Advice.to(PendingTraceAdvice.Write.class, locator) + .transform((builder, type, classLoader, module, pd) -> + builder + .visit( + Advice.to(ContinuationAdvice.Register.class, locator) .on( isMethod() - .and(named("write")) - .and(takesArguments(boolean.class)) - .and(returns(int.class))))) - .type(named(corePackage + ".scopemanager.ContinuableScope"), is(loader)) - .transform( - (builder, type, classLoader, module, pd) -> - builder - .visit( - Advice.to(ContinuableScopeAdvice.OnProperClose.class, locator) - .on( - isMethod() - .and(named("onProperClose")) - .and(takesArguments(0)) - .and(returns(void.class)))) - .visit( - Advice.to(ContinuableScopeAdvice.Close.class, locator) - .on( - isMethod() - .and(named("close")) - .and(takesArguments(0)) - .and(returns(void.class))))) - .type(named(corePackage + ".scopemanager.ScopeStack"), is(loader)) - .transform( - (builder, type, classLoader, module, pd) -> - builder.visit( - Advice.to(ScopeStackAdvice.Push.class, locator) + .and(named("register")) + .and(takesArguments(0)) + .and( + returns( + named( + corePackage + ".scopemanager.ScopeContinuation"))))) + .visit( + Advice.to(ContinuationAdvice.Activate.class, locator) + .on( + isMethod() + .and(named("resume")) + .and(takesArguments(0)) + .and(returns(named("datadog.context.ContextScope"))))) + .visit( + Advice.to(ContinuationAdvice.Cancel.class, locator) .on( isMethod() - .and(named("push")) - .and(takesArguments(1)) .and( - takesArgument( - 0, - named(corePackage + ".scopemanager.ContinuableScope"))) + named("release").or(named("cancelFromContinuedScopeClose"))) + .and(takesArguments(0)) .and(returns(void.class))))) - .type(named(corePackage + ".scopemanager.ContinuableScopeManager"), is(loader)) - .transform( - (builder, type, classLoader, module, pd) -> - builder.visit( - Advice.to( - ContinuableScopeManagerAdvice.ScheduleRootIterationCleanup.class, - locator) + .type(named(corePackage + ".PendingTrace"), is(loader)) + .transform((builder, type, classLoader, module, pd) -> + builder.visit( + Advice.to(PendingTraceAdvice.Write.class, locator) + .on( + isMethod() + .and(named("write")) + .and(takesArguments(boolean.class)) + .and(returns(int.class))))) + .type(named(corePackage + ".scopemanager.ContinuableScope"), is(loader)) + .transform((builder, type, classLoader, module, pd) -> + builder + .visit( + Advice.to(ContinuableScopeAdvice.OnProperClose.class, locator) .on( isMethod() - .and(named("scheduleRootIterationScopeCleanup")) - .and(takesArguments(2)) - .and( - takesArgument( - 0, named(corePackage + ".scopemanager.ScopeStack"))) - .and( - takesArgument( - 1, - named(corePackage + ".scopemanager.ContinuableScope"))) + .and(named("onProperClose")) + .and(takesArguments(0)) + .and(returns(void.class)))) + .visit( + Advice.to(ContinuableScopeAdvice.Close.class, locator) + .on( + isMethod() + .and(named("close")) + .and(takesArguments(0)) .and(returns(void.class))))) + .type(named(corePackage + ".scopemanager.ScopeStack"), is(loader)) + .transform((builder, type, classLoader, module, pd) -> + builder.visit( + Advice.to(ScopeStackAdvice.Push.class, locator) + .on( + isMethod() + .and(named("push")) + .and(takesArguments(1)) + .and( + takesArgument( + 0, named(corePackage + ".scopemanager.ContinuableScope"))) + .and(returns(void.class))))) + .type(named(corePackage + ".scopemanager.ContinuableScopeManager"), is(loader)) + .transform((builder, type, classLoader, module, pd) -> + builder.visit( + Advice.to( + ContinuableScopeManagerAdvice.ScheduleRootIterationCleanup.class, + locator) + .on( + isMethod() + .and(named("scheduleRootIterationScopeCleanup")) + .and(takesArguments(2)) + .and( + takesArgument( + 0, named(corePackage + ".scopemanager.ScopeStack"))) + .and( + takesArgument( + 1, named(corePackage + ".scopemanager.ContinuableScope"))) + .and(returns(void.class))))) .installOn(instrumentation); Set expected = new HashSet<>(); for (String target : TARGET_SUFFIXES) { diff --git a/dd-java-agent/instrumentation-testing/src/main/java/datadog/trace/agent/test/scopediag/ScopeDiagnostics.java b/dd-java-agent/instrumentation-testing/src/main/java/datadog/trace/agent/test/scopediag/ScopeDiagnostics.java index 710d705a1e5..4fcf2186f37 100644 --- a/dd-java-agent/instrumentation-testing/src/main/java/datadog/trace/agent/test/scopediag/ScopeDiagnostics.java +++ b/dd-java-agent/instrumentation-testing/src/main/java/datadog/trace/agent/test/scopediag/ScopeDiagnostics.java @@ -320,16 +320,14 @@ private static void record( window.drain(false, 0, false); if (window.isNext(pending)) { // The common path filters ignored callbacks before even constructing a Throwable. - pending.publish( - () -> - handler.accept( - () -> - INSTANCE.event( - type, - nanos, - threadName, - filter, - filter.maxFrames() <= 0 ? null : new Throwable()))); + pending.publish(() -> + handler.accept(() -> + INSTANCE.event( + type, + nanos, + threadName, + filter, + filter.maxFrames() <= 0 ? null : new Throwable()))); window.drain(false, 0, false); return; } diff --git a/dd-java-agent/instrumentation-testing/src/test/java/datadog/trace/agent/test/scopediag/DiagnosticEventBufferTest.java b/dd-java-agent/instrumentation-testing/src/test/java/datadog/trace/agent/test/scopediag/DiagnosticEventBufferTest.java index e218ca3d879..556be296b2c 100644 --- a/dd-java-agent/instrumentation-testing/src/test/java/datadog/trace/agent/test/scopediag/DiagnosticEventBufferTest.java +++ b/dd-java-agent/instrumentation-testing/src/test/java/datadog/trace/agent/test/scopediag/DiagnosticEventBufferTest.java @@ -77,11 +77,10 @@ void drainDoesNotChaseNewEvents() { AtomicInteger consumed = new AtomicInteger(); buffer .reserve() - .publish( - () -> { - consumed.incrementAndGet(); - buffer.reserve().publish(consumed::incrementAndGet); - }); + .publish(() -> { + consumed.incrementAndGet(); + buffer.reserve().publish(consumed::incrementAndGet); + }); buffer.drain(false, 0, false); assertEquals(1, consumed.get()); assertTrue(buffer.hasPending()); @@ -122,21 +121,20 @@ void concurrentProducersRacingCloseLoseNoReservations() throws Exception { List> producers = new ArrayList<>(); for (int i = 0; i < 4; i++) { FutureTask producer = - new FutureTask<>( - () -> { - for (int n = 0; n < 1000; n++) { - DiagnosticEventBuffer.Event event = buffer.reserve(); - if (event == null) { - break; - } - admitted.incrementAndGet(); - if (n == 0) { - started.countDown(); - } - event.publish(consumed::incrementAndGet); - } - return null; - }); + new FutureTask<>(() -> { + for (int n = 0; n < 1000; n++) { + DiagnosticEventBuffer.Event event = buffer.reserve(); + if (event == null) { + break; + } + admitted.incrementAndGet(); + if (n == 0) { + started.countDown(); + } + event.publish(consumed::incrementAndGet); + } + return null; + }); producers.add(producer); Thread thread = new Thread(producer, "diagnostic-producer-" + i); thread.setDaemon(true); diff --git a/dd-java-agent/instrumentation-testing/src/test/java/datadog/trace/agent/test/scopediag/ScopeDiagnosticsAdmissionTest.java b/dd-java-agent/instrumentation-testing/src/test/java/datadog/trace/agent/test/scopediag/ScopeDiagnosticsAdmissionTest.java index 376ce3cff1e..9486686cf37 100644 --- a/dd-java-agent/instrumentation-testing/src/test/java/datadog/trace/agent/test/scopediag/ScopeDiagnosticsAdmissionTest.java +++ b/dd-java-agent/instrumentation-testing/src/test/java/datadog/trace/agent/test/scopediag/ScopeDiagnosticsAdmissionTest.java @@ -31,21 +31,19 @@ void callbacksDoNotWaitForTheReportLock() throws Exception { Object scope = new Object(); DDTraceId trace = DDTraceId.from(1); FutureTask callbacks = - new FutureTask<>( - () -> { - ScopeDiagnostics.recordCapture(window, continuation, trace, 2, "op", (byte) 0); - ScopeDiagnostics.recordActivate( - window, continuation, trace, 2, "op", (byte) 0, System.nanoTime()); - ScopeDiagnostics.recordScopeOpen( - window, scope, trace, 2, "op", (byte) 0, continuation); - ScopeDiagnostics.recordDeferredScopeCleanup(window, scope); - ScopeDiagnostics.recordScopeCloseWrongThread(window, scope); - ScopeDiagnostics.recordScopeClose(window, scope); - ScopeDiagnostics.recordResolve(window, continuation, true, System.nanoTime(), false); - ScopeDiagnostics.recordRootWritten(window, trace); - ScopeDiagnostics.recordActivateFailed(window, continuation); - return null; - }); + new FutureTask<>(() -> { + ScopeDiagnostics.recordCapture(window, continuation, trace, 2, "op", (byte) 0); + ScopeDiagnostics.recordActivate( + window, continuation, trace, 2, "op", (byte) 0, System.nanoTime()); + ScopeDiagnostics.recordScopeOpen(window, scope, trace, 2, "op", (byte) 0, continuation); + ScopeDiagnostics.recordDeferredScopeCleanup(window, scope); + ScopeDiagnostics.recordScopeCloseWrongThread(window, scope); + ScopeDiagnostics.recordScopeClose(window, scope); + ScopeDiagnostics.recordResolve(window, continuation, true, System.nanoTime(), false); + ScopeDiagnostics.recordRootWritten(window, trace); + ScopeDiagnostics.recordActivateFailed(window, continuation); + return null; + }); Thread carrier = new Thread(callbacks, "diagnostic-carrier"); carrier.setDaemon(true); ScopeDiagnostics.INSTANCE.lifecycleLock.lock(); @@ -83,11 +81,10 @@ void queuedResolutionWakesQuiescenceWaiter() throws Exception { ContextContinuation continuation = Context.root().capture(); ScopeDiagnostics.recordCapture(window, continuation, DDTraceId.from(1), 2, "op", (byte) 0); FutureTask waiting = - new FutureTask<>( - () -> { - ScopeDiagnostics.awaitQuiescence(30_000); - return null; - }); + new FutureTask<>(() -> { + ScopeDiagnostics.awaitQuiescence(30_000); + return null; + }); Thread waiter = new Thread(waiting, "diagnostic-quiescence"); waiter.setDaemon(true); waiter.start(); @@ -111,11 +108,10 @@ void quiescentStopWaitsForAdmittedScopeCleanup() throws Exception { Object scope = new Object(); ScopeDiagnostics.recordScopeOpen(window, scope, DDTraceId.from(1), 2, "op", (byte) 0, null); FutureTask stopping = - new FutureTask<>( - () -> { - ScopeDiagnostics.stopAfterQuiescence(30_000); - return null; - }); + new FutureTask<>(() -> { + ScopeDiagnostics.stopAfterQuiescence(30_000); + return null; + }); Thread stopper = new Thread(stopping, "diagnostic-quiescent-stop"); stopper.setDaemon(true); stopper.start(); @@ -189,11 +185,10 @@ void stopRetainsReservationsWhoseStackCaptureIsStillInFlight() throws Exception DiagnosticEventBuffer.Event reservation = ((DiagnosticEventBuffer) window).reserve(); ScopeDiagnostics.recordResolve(window, continuation, true, System.nanoTime(), false); FutureTask stopping = - new FutureTask<>( - () -> { - ScopeDiagnostics.stop(); - return null; - }); + new FutureTask<>(() -> { + ScopeDiagnostics.stop(); + return null; + }); Thread stopper = new Thread(stopping, "diagnostic-stop"); stopper.setDaemon(true); stopper.start(); diff --git a/dd-java-agent/instrumentation-testing/src/test/java/datadog/trace/agent/test/scopediag/ScopeDiagnosticsIntegrationTest.java b/dd-java-agent/instrumentation-testing/src/test/java/datadog/trace/agent/test/scopediag/ScopeDiagnosticsIntegrationTest.java index 2a727a0750d..23358c3d542 100644 --- a/dd-java-agent/instrumentation-testing/src/test/java/datadog/trace/agent/test/scopediag/ScopeDiagnosticsIntegrationTest.java +++ b/dd-java-agent/instrumentation-testing/src/test/java/datadog/trace/agent/test/scopediag/ScopeDiagnosticsIntegrationTest.java @@ -356,15 +356,14 @@ void waitsForAsynchronousScopeCleanup() throws Exception { CountDownLatch scopeOpened = new CountDownLatch(1); CountDownLatch closeScope = new CountDownLatch(1); Thread worker = - new Thread( - () -> { - try (ContextScope ignored = continuation.resume()) { - scopeOpened.countDown(); - closeScope.await(); - } catch (InterruptedException interrupted) { - Thread.currentThread().interrupt(); - } - }); + new Thread(() -> { + try (ContextScope ignored = continuation.resume()) { + scopeOpened.countDown(); + closeScope.await(); + } catch (InterruptedException interrupted) { + Thread.currentThread().interrupt(); + } + }); worker.start(); assertTrue(scopeOpened.await(5, TimeUnit.SECONDS)); diff --git a/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/appsec/BlockingResponseHelper.java b/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/appsec/BlockingResponseHelper.java index 9ec7596486e..23aff0c7995 100644 --- a/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/appsec/BlockingResponseHelper.java +++ b/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/appsec/BlockingResponseHelper.java @@ -86,10 +86,8 @@ public static HttpResponse maybeCreateBlockingResponse( List headersList = rba.getExtraHeaders().entrySet().stream() - .map( - e -> - (akka.http.scaladsl.model.HttpHeader) - RawHeader.create(e.getKey(), e.getValue())) + .map(e -> + (akka.http.scaladsl.model.HttpHeader) RawHeader.create(e.getKey(), e.getValue())) .collect(ScalaListCollector.toScalaList()); StatusCode code; diff --git a/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/appsec/UnmarshallerHelpers.java b/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/appsec/UnmarshallerHelpers.java index 1bd3779e1e2..0d85788d942 100644 --- a/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/appsec/UnmarshallerHelpers.java +++ b/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/appsec/UnmarshallerHelpers.java @@ -332,15 +332,14 @@ public static Unmarshaller transformStringUnmarshaller( public static akka.http.javadsl.unmarshalling.Unmarshaller transformJacksonUnmarshaller( akka.http.javadsl.unmarshalling.Unmarshaller original) { - return original.thenApply( - ret -> { - try { - handleArbitraryPostData(ret, "jackson unmarshaller"); - } catch (Exception e) { - handleException(e, "Error in transformJacksonUnmarshaller"); - } - return ret; - }); + return original.thenApply(ret -> { + try { + handleArbitraryPostData(ret, "jackson unmarshaller"); + } catch (Exception e) { + handleException(e, "Error in transformJacksonUnmarshaller"); + } + return ret; + }); } public static Unmarshaller transformArbitrarySprayUnmarshaller(Unmarshaller original) { diff --git a/dd-java-agent/instrumentation/apache-httpclient/apache-httpclient-5.0/src/main/java/datadog/trace/instrumentation/apachehttpclient5/IastHttpUriRequestBaseInstrumentation.java b/dd-java-agent/instrumentation/apache-httpclient/apache-httpclient-5.0/src/main/java/datadog/trace/instrumentation/apachehttpclient5/IastHttpUriRequestBaseInstrumentation.java index 41483b459d3..97d353ab917 100644 --- a/dd-java-agent/instrumentation/apache-httpclient/apache-httpclient-5.0/src/main/java/datadog/trace/instrumentation/apachehttpclient5/IastHttpUriRequestBaseInstrumentation.java +++ b/dd-java-agent/instrumentation/apache-httpclient/apache-httpclient-5.0/src/main/java/datadog/trace/instrumentation/apachehttpclient5/IastHttpUriRequestBaseInstrumentation.java @@ -42,7 +42,7 @@ public void methodAdvice(MethodTransformer transformer) { } public static class CtorAdvice { - @Advice.OnMethodExit() + @Advice.OnMethodExit @Propagation public static void afterCtor( @Advice.This final HttpUriRequestBase self, @Advice.Argument(1) final URI uri) { diff --git a/dd-java-agent/instrumentation/apache-httpcore/apache-httpcore-4.0/src/main/java/datadog/trace/instrumentation/apachehttpcore/IastHttpHostInstrumentation.java b/dd-java-agent/instrumentation/apache-httpcore/apache-httpcore-4.0/src/main/java/datadog/trace/instrumentation/apachehttpcore/IastHttpHostInstrumentation.java index 07be588f80c..a27f7382040 100644 --- a/dd-java-agent/instrumentation/apache-httpcore/apache-httpcore-4.0/src/main/java/datadog/trace/instrumentation/apachehttpcore/IastHttpHostInstrumentation.java +++ b/dd-java-agent/instrumentation/apache-httpcore/apache-httpcore-4.0/src/main/java/datadog/trace/instrumentation/apachehttpcore/IastHttpHostInstrumentation.java @@ -50,7 +50,7 @@ public static void afterCtor( } public static class ToUriAdvice { - @Advice.OnMethodExit() + @Advice.OnMethodExit @Propagation public static void methodExit(@Advice.This HttpHost self, @Advice.Return String result) { final PropagationModule propagationModule = InstrumentationBridge.PROPAGATION; diff --git a/dd-java-agent/instrumentation/aws-java/aws-java-sdk-2.2/src/main/java/datadog/trace/instrumentation/aws/v2/AwsSdkClientDecorator.java b/dd-java-agent/instrumentation/aws-java/aws-java-sdk-2.2/src/main/java/datadog/trace/instrumentation/aws/v2/AwsSdkClientDecorator.java index 78034de3f20..97c94470183 100644 --- a/dd-java-agent/instrumentation/aws-java/aws-java-sdk-2.2/src/main/java/datadog/trace/instrumentation/aws/v2/AwsSdkClientDecorator.java +++ b/dd-java-agent/instrumentation/aws-java/aws-java-sdk-2.2/src/main/java/datadog/trace/instrumentation/aws/v2/AwsSdkClientDecorator.java @@ -151,15 +151,14 @@ public void onSdkRequest( // SQS request .getValueForField("QueueUrl", String.class) - .ifPresent( - url -> { - span.setTag(InstrumentationTags.AWS_QUEUE_URL, url); - setPeerService(span, InstrumentationTags.AWS_QUEUE_URL, url); - String queueName = urlFileName(url); - if (!queueName.isEmpty()) { - setQueueName(span, queueName); - } - }); + .ifPresent(url -> { + span.setTag(InstrumentationTags.AWS_QUEUE_URL, url); + setPeerService(span, InstrumentationTags.AWS_QUEUE_URL, url); + String queueName = urlFileName(url); + if (!queueName.isEmpty()) { + setQueueName(span, queueName); + } + }); request.getValueForField("QueueName", String.class).ifPresent(name -> setQueueName(span, name)); // SNS. TargetArn may identify a mobile platform endpoint, so only TopicArn is a topic ARN. @@ -176,17 +175,16 @@ public void onSdkRequest( .getValueForField("StreamName", String.class) .ifPresent(name -> setStreamName(span, name)); Optional kinesisStreamArn = request.getValueForField("StreamARN", String.class); - kinesisStreamArn.ifPresent( - streamArn -> { - span.setTag(InstrumentationTags.AWS_STREAM_ARN, streamArn); - if (traceConfig().isDataStreamsEnabled()) { - attributes.putAttribute(KINESIS_STREAM_ARN_ATTRIBUTE, streamArn); - } - int streamNameStart = streamArn.indexOf(":stream/"); - if (streamNameStart >= 0) { - setStreamName(span, streamArn.substring(streamNameStart + 8)); - } - }); + kinesisStreamArn.ifPresent(streamArn -> { + span.setTag(InstrumentationTags.AWS_STREAM_ARN, streamArn); + if (traceConfig().isDataStreamsEnabled()) { + attributes.putAttribute(KINESIS_STREAM_ARN_ATTRIBUTE, streamArn); + } + int streamNameStart = streamArn.indexOf(":stream/"); + if (streamNameStart >= 0) { + setStreamName(span, streamArn.substring(streamNameStart + 8)); + } + }); // DynamoDB request.getValueForField("TableName", String.class).ifPresent(name -> setTableName(span, name)); @@ -416,41 +414,39 @@ public void onSdkResponse( if (null != streamArn) { response .getValueForField("Records", List.class) - .ifPresent( - recordsRaw -> { - //noinspection unchecked - List records = (List) recordsRaw; - if (!records.isEmpty()) { - DataStreamsTags tags = create("kinesis", INBOUND, streamArn); - if (null == kinesisApproximateArrivalTimestampField) { - Optional> maybeField = - records.get(0).sdkFields().stream() - .filter(f -> f.locationName().equals("ApproximateArrivalTimestamp")) - .findFirst(); - if (maybeField.isPresent()) { - //noinspection unchecked - kinesisApproximateArrivalTimestampField = - (SdkField) maybeField.get(); - } else { - // shouldn't be possible - return; - } - } - for (SdkPojo record : records) { - Instant arrivalTime = - kinesisApproximateArrivalTimestampField.getValueOrDefault(record); - AgentDataStreamsMonitoring dataStreamsMonitoring = - AgentTracer.get().getDataStreamsMonitoring(); - PathwayContext pathwayContext = dataStreamsMonitoring.newPathwayContext(); - pathwayContext.setCheckpoint( - create(tags, arrivalTime.toEpochMilli(), 0), - dataStreamsMonitoring::add); - if (!span.spanContext().getPathwayContext().isStarted()) { - span.spanContext().mergePathwayContext(pathwayContext); - } - } + .ifPresent(recordsRaw -> { + //noinspection unchecked + List records = (List) recordsRaw; + if (!records.isEmpty()) { + DataStreamsTags tags = create("kinesis", INBOUND, streamArn); + if (null == kinesisApproximateArrivalTimestampField) { + Optional> maybeField = + records.get(0).sdkFields().stream() + .filter(f -> f.locationName().equals("ApproximateArrivalTimestamp")) + .findFirst(); + if (maybeField.isPresent()) { + //noinspection unchecked + kinesisApproximateArrivalTimestampField = + (SdkField) maybeField.get(); + } else { + // shouldn't be possible + return; + } + } + for (SdkPojo record : records) { + Instant arrivalTime = + kinesisApproximateArrivalTimestampField.getValueOrDefault(record); + AgentDataStreamsMonitoring dataStreamsMonitoring = + AgentTracer.get().getDataStreamsMonitoring(); + PathwayContext pathwayContext = dataStreamsMonitoring.newPathwayContext(); + pathwayContext.setCheckpoint( + create(tags, arrivalTime.toEpochMilli(), 0), dataStreamsMonitoring::add); + if (!span.spanContext().getPathwayContext().isStarted()) { + span.spanContext().mergePathwayContext(pathwayContext); } - }); + } + } + }); } } diff --git a/dd-java-agent/instrumentation/datadog/tracing/trace-annotation/src/test/java/dd/test/trace/annotation/SayTracedHello.java b/dd-java-agent/instrumentation/datadog/tracing/trace-annotation/src/test/java/dd/test/trace/annotation/SayTracedHello.java index 24c4468ec9e..37100be9421 100644 --- a/dd-java-agent/instrumentation/datadog/tracing/trace-annotation/src/test/java/dd/test/trace/annotation/SayTracedHello.java +++ b/dd-java-agent/instrumentation/datadog/tracing/trace-annotation/src/test/java/dd/test/trace/annotation/SayTracedHello.java @@ -79,15 +79,14 @@ public static String sayERRORWithResource() { @Trace public static CompletableFuture sayHelloFuture(CountDownLatch latch) { activeSpan().setTag(DDTags.SERVICE_NAME, "test"); - return CompletableFuture.supplyAsync( - () -> { - try { - latch.await(); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } - return "hello!"; - }); + return CompletableFuture.supplyAsync(() -> { + try { + latch.await(); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + return "hello!"; + }); } public static String fromCallable() throws Exception { diff --git a/dd-java-agent/instrumentation/datastax-cassandra/datastax-cassandra-3.0/src/main/java/datadog/trace/instrumentation/datastax/cassandra/ContactPointsUtil.java b/dd-java-agent/instrumentation/datastax-cassandra/datastax-cassandra-3.0/src/main/java/datadog/trace/instrumentation/datastax/cassandra/ContactPointsUtil.java index ff2c27465e2..bae1952ee9f 100644 --- a/dd-java-agent/instrumentation/datastax-cassandra/datastax-cassandra-3.0/src/main/java/datadog/trace/instrumentation/datastax/cassandra/ContactPointsUtil.java +++ b/dd-java-agent/instrumentation/datastax-cassandra/datastax-cassandra-3.0/src/main/java/datadog/trace/instrumentation/datastax/cassandra/ContactPointsUtil.java @@ -15,11 +15,10 @@ public class ContactPointsUtil { private static final Function, String> ADDER = inetSocketAddresses -> inetSocketAddresses.stream() - .map( - inetSocketAddress -> - inetSocketAddress.getPort() > 0 - ? inetSocketAddress.getHostString() + ":" + inetSocketAddress.getPort() - : inetSocketAddress.getHostString()) + .map(inetSocketAddress -> + inetSocketAddress.getPort() > 0 + ? inetSocketAddress.getHostString() + ":" + inetSocketAddress.getPort() + : inetSocketAddress.getHostString()) .distinct() .collect(Collectors.joining(",")); diff --git a/dd-java-agent/instrumentation/datastax-cassandra/datastax-cassandra-3.8/src/main/java/datadog/trace/instrumentation/datastax/cassandra38/ContactPointsUtil.java b/dd-java-agent/instrumentation/datastax-cassandra/datastax-cassandra-3.8/src/main/java/datadog/trace/instrumentation/datastax/cassandra38/ContactPointsUtil.java index d045a517e86..17c2fd84561 100644 --- a/dd-java-agent/instrumentation/datastax-cassandra/datastax-cassandra-3.8/src/main/java/datadog/trace/instrumentation/datastax/cassandra38/ContactPointsUtil.java +++ b/dd-java-agent/instrumentation/datastax-cassandra/datastax-cassandra-3.8/src/main/java/datadog/trace/instrumentation/datastax/cassandra38/ContactPointsUtil.java @@ -16,11 +16,10 @@ public class ContactPointsUtil { endPoints -> endPoints.stream() .map(EndPoint::resolve) - .map( - inetSocketAddress -> - inetSocketAddress.getPort() > 0 - ? inetSocketAddress.getHostString() + ":" + inetSocketAddress.getPort() - : inetSocketAddress.getHostString()) + .map(inetSocketAddress -> + inetSocketAddress.getPort() > 0 + ? inetSocketAddress.getHostString() + ":" + inetSocketAddress.getPort() + : inetSocketAddress.getHostString()) .distinct() // avoid duplicates .collect(Collectors.joining(",")); diff --git a/dd-java-agent/instrumentation/datastax-cassandra/datastax-cassandra-4.0/src/main/java/datadog/trace/instrumentation/datastax/cassandra4/ContactPointsUtil.java b/dd-java-agent/instrumentation/datastax-cassandra/datastax-cassandra-4.0/src/main/java/datadog/trace/instrumentation/datastax/cassandra4/ContactPointsUtil.java index bb72201069b..871ae83eefb 100644 --- a/dd-java-agent/instrumentation/datastax-cassandra/datastax-cassandra-4.0/src/main/java/datadog/trace/instrumentation/datastax/cassandra4/ContactPointsUtil.java +++ b/dd-java-agent/instrumentation/datastax-cassandra/datastax-cassandra-4.0/src/main/java/datadog/trace/instrumentation/datastax/cassandra4/ContactPointsUtil.java @@ -19,13 +19,12 @@ public class ContactPointsUtil { .map(EndPoint::resolve) .filter(InetSocketAddress.class::isInstance) .map(InetSocketAddress.class::cast) - .map( - inetSocketAddress -> { - if (inetSocketAddress.getPort() > 0) { - return inetSocketAddress.getHostString() + ":" + inetSocketAddress.getPort(); - } - return inetSocketAddress.getHostString(); - }) + .map(inetSocketAddress -> { + if (inetSocketAddress.getPort() > 0) { + return inetSocketAddress.getHostString() + ":" + inetSocketAddress.getPort(); + } + return inetSocketAddress.getHostString(); + }) .distinct() // avoid duplicates .collect(Collectors.joining(",")); diff --git a/dd-java-agent/instrumentation/datastax-cassandra/datastax-cassandra-4.0/src/main/java/datadog/trace/instrumentation/datastax/cassandra4/TracingSession.java b/dd-java-agent/instrumentation/datastax-cassandra/datastax-cassandra-4.0/src/main/java/datadog/trace/instrumentation/datastax/cassandra4/TracingSession.java index 23cdb14b3d2..cad0045cec9 100644 --- a/dd-java-agent/instrumentation/datastax-cassandra/datastax-cassandra-4.0/src/main/java/datadog/trace/instrumentation/datastax/cassandra4/TracingSession.java +++ b/dd-java-agent/instrumentation/datastax-cassandra/datastax-cassandra-4.0/src/main/java/datadog/trace/instrumentation/datastax/cassandra4/TracingSession.java @@ -90,18 +90,17 @@ private CompletionStage wrapAsyncRequest(Statement request) { CompletionStage completionStage = getDelegate().execute(request, Statement.ASYNC); - return completionStage.whenComplete( - (result, throwable) -> { - if (result != null) { - DECORATE.onResponse(span, result); - } - - if (throwable instanceof CompletionException) { - throwable = throwable.getCause(); - } - DECORATE.onError(span, throwable); - span.finish(); - }); + return completionStage.whenComplete((result, throwable) -> { + if (result != null) { + DECORATE.onResponse(span, result); + } + + if (throwable instanceof CompletionException) { + throwable = throwable.getCause(); + } + DECORATE.onError(span, throwable); + span.finish(); + }); } } diff --git a/dd-java-agent/instrumentation/gax-1.4/src/test/java/datadog/trace/instrumentation/gax/GaxRetryContinuationTest.java b/dd-java-agent/instrumentation/gax-1.4/src/test/java/datadog/trace/instrumentation/gax/GaxRetryContinuationTest.java index f70f1b6280e..47155308c3d 100644 --- a/dd-java-agent/instrumentation/gax-1.4/src/test/java/datadog/trace/instrumentation/gax/GaxRetryContinuationTest.java +++ b/dd-java-agent/instrumentation/gax-1.4/src/test/java/datadog/trace/instrumentation/gax/GaxRetryContinuationTest.java @@ -67,16 +67,15 @@ void singleAttemptSucceedsAndContextNotLeaked() throws Exception { AgentSpan parent = startSpan("gax", "publish"); CountDownLatch allAttemptsDone = new CountDownLatch(1); RetryingFuture future = - executor.createFuture( - () -> { - AgentSpan attempt = startSpan("gax", "attempt"); - try { - return "ok"; - } finally { - attempt.finish(); - allAttemptsDone.countDown(); - } - }); + executor.createFuture(() -> { + AgentSpan attempt = startSpan("gax", "attempt"); + try { + return "ok"; + } finally { + attempt.finish(); + allAttemptsDone.countDown(); + } + }); try (ContextScope scope = activateSpan(parent)) { future.setAttemptFuture(executor.submit(future)); @@ -104,19 +103,18 @@ void retriedAttemptsSucceedAndContextNotLeaked() throws Exception { AgentSpan parent = startSpan("gax", "publish"); CountDownLatch allAttemptsDone = new CountDownLatch(3); RetryingFuture future = - executor.createFuture( - () -> { - AgentSpan attempt = startSpan("gax", "attempt"); - try { - if (count.incrementAndGet() < 3) { - throw new RuntimeException("transient"); - } - return "ok"; - } finally { - attempt.finish(); - allAttemptsDone.countDown(); - } - }); + executor.createFuture(() -> { + AgentSpan attempt = startSpan("gax", "attempt"); + try { + if (count.incrementAndGet() < 3) { + throw new RuntimeException("transient"); + } + return "ok"; + } finally { + attempt.finish(); + allAttemptsDone.countDown(); + } + }); try (ContextScope scope = activateSpan(parent)) { future.setAttemptFuture(executor.submit(future)); @@ -145,16 +143,15 @@ void exhaustedRetriesContextNotLeaked() throws Exception { AgentSpan parent = startSpan("gax", "publish"); CountDownLatch allAttemptsDone = new CountDownLatch(3); RetryingFuture future = - executor.createFuture( - () -> { - AgentSpan attempt = startSpan("gax", "attempt"); - try { - throw new RuntimeException("always fails"); - } finally { - attempt.finish(); - allAttemptsDone.countDown(); - } - }); + executor.createFuture(() -> { + AgentSpan attempt = startSpan("gax", "attempt"); + try { + throw new RuntimeException("always fails"); + } finally { + attempt.finish(); + allAttemptsDone.countDown(); + } + }); try (ContextScope scope = activateSpan(parent)) { future.setAttemptFuture(executor.submit(future)); diff --git a/dd-java-agent/instrumentation/gradle/gradle-8.3/src/main/groovy/datadog/trace/instrumentation/gradle/CiVisibilityPlugin.java b/dd-java-agent/instrumentation/gradle/gradle-8.3/src/main/groovy/datadog/trace/instrumentation/gradle/CiVisibilityPlugin.java index 4d7ad9c2c26..f617834621e 100644 --- a/dd-java-agent/instrumentation/gradle/gradle-8.3/src/main/groovy/datadog/trace/instrumentation/gradle/CiVisibilityPlugin.java +++ b/dd-java-agent/instrumentation/gradle/gradle-8.3/src/main/groovy/datadog/trace/instrumentation/gradle/CiVisibilityPlugin.java @@ -191,10 +191,9 @@ private void applyJacocoPlugin(CiVisibilityPluginExtension extension) { List jacocoConfigurations = project.getConfigurations().stream() - .filter( - c -> - JACOCO_AGENT_CONFIGURATION_NAME.equals(c.getName()) - || JACOCO_ANT_CONFIGURATION_NAME.equals(c.getName())) + .filter(c -> + JACOCO_AGENT_CONFIGURATION_NAME.equals(c.getName()) + || JACOCO_ANT_CONFIGURATION_NAME.equals(c.getName())) .collect(Collectors.toList()); for (Configuration jacocoConfiguration : jacocoConfigurations) { disableDependencyVerificationIfConfigured(jacocoConfiguration); diff --git a/dd-java-agent/instrumentation/graphql-java/graphql-java-common/src/main/java/datadog/trace/instrumentation/graphqljava/InstrumentedDataFetcher.java b/dd-java-agent/instrumentation/graphql-java/graphql-java-common/src/main/java/datadog/trace/instrumentation/graphqljava/InstrumentedDataFetcher.java index 98bbc788e2c..3e66822b514 100644 --- a/dd-java-agent/instrumentation/graphql-java/graphql-java-common/src/main/java/datadog/trace/instrumentation/graphqljava/InstrumentedDataFetcher.java +++ b/dd-java-agent/instrumentation/graphql-java/graphql-java-common/src/main/java/datadog/trace/instrumentation/graphqljava/InstrumentedDataFetcher.java @@ -56,12 +56,11 @@ public Object get(DataFetchingEnvironment environment) throws Exception { } if (dataValue instanceof CompletionStage) { return ((CompletionStage) dataValue) - .whenComplete( - (result, throwable) -> { - DECORATE.onError(fieldSpan, AsyncExceptionUnwrapper.unwrap(throwable)); - DECORATE.beforeFinish(fieldSpan); - fieldSpan.finish(); - }); + .whenComplete((result, throwable) -> { + DECORATE.onError(fieldSpan, AsyncExceptionUnwrapper.unwrap(throwable)); + DECORATE.beforeFinish(fieldSpan); + fieldSpan.finish(); + }); } DECORATE.beforeFinish(fieldSpan); fieldSpan.finish(); diff --git a/dd-java-agent/instrumentation/hibernate/hibernate-common/src/main/java/datadog/trace/instrumentation/hibernate/HibernateDecorator.java b/dd-java-agent/instrumentation/hibernate/hibernate-common/src/main/java/datadog/trace/instrumentation/hibernate/HibernateDecorator.java index 7defdcde0af..68100d5068d 100644 --- a/dd-java-agent/instrumentation/hibernate/hibernate-common/src/main/java/datadog/trace/instrumentation/hibernate/HibernateDecorator.java +++ b/dd-java-agent/instrumentation/hibernate/hibernate-common/src/main/java/datadog/trace/instrumentation/hibernate/HibernateDecorator.java @@ -15,15 +15,14 @@ public class HibernateDecorator extends OrmClientDecorator { public static final HibernateDecorator DECORATOR = new HibernateDecorator(); private static final ClassValue ENTITY_NAMES = - GenericClassValue.of( - type -> { - for (Annotation annotation : type.getDeclaredAnnotations()) { - if ("javax.persistence.Entity".equals(annotation.annotationType().getName())) { - return type.getName(); - } - } - return null; - }); + GenericClassValue.of(type -> { + for (Annotation annotation : type.getDeclaredAnnotations()) { + if ("javax.persistence.Entity".equals(annotation.annotationType().getName())) { + return type.getName(); + } + } + return null; + }); @Override protected String service() { diff --git a/dd-java-agent/instrumentation/java/java-concurrent/java-concurrent-1.8/src/test/java/Fanout.java b/dd-java-agent/instrumentation/java/java-concurrent/java-concurrent-1.8/src/test/java/Fanout.java index 9b7d77e22ca..721376ac3d1 100644 --- a/dd-java-agent/instrumentation/java/java-concurrent/java-concurrent-1.8/src/test/java/Fanout.java +++ b/dd-java-agent/instrumentation/java/java-concurrent/java-concurrent-1.8/src/test/java/Fanout.java @@ -23,10 +23,9 @@ public void execute() { try { Stream> futures = IntStream.range(0, tasks) - .mapToObj( - i -> - CompletableFuture.runAsync( - traceChild ? this::tracedWork : this::untracedWork, executor)); + .mapToObj(i -> + CompletableFuture.runAsync( + traceChild ? this::tracedWork : this::untracedWork, executor)); // Wait for those threads to finish work CompletableFuture.allOf(futures.toArray(CompletableFuture[]::new)).get(); } catch (InterruptedException | ExecutionException e) { @@ -38,12 +37,10 @@ public void executeTwoLevels() { try { Stream> futures = IntStream.range(0, tasks) - .mapToObj( - i -> - CompletableFuture.runAsync( - traceChild ? this::tracedWork : this::untracedWork, executor) - .thenRunAsync( - traceChild ? this::tracedWork : this::untracedWork, executor)); + .mapToObj(i -> + CompletableFuture.runAsync( + traceChild ? this::tracedWork : this::untracedWork, executor) + .thenRunAsync(traceChild ? this::tracedWork : this::untracedWork, executor)); // Wait for those threads to finish work CompletableFuture.allOf(futures.toArray(CompletableFuture[]::new)).get(); } catch (InterruptedException | ExecutionException e) { diff --git a/dd-java-agent/instrumentation/java/java-concurrent/java-concurrent-25.0/src/test/java/testdog/trace/instrumentation/java/concurrent/ForkJoinPoolSchedulingTest.java b/dd-java-agent/instrumentation/java/java-concurrent/java-concurrent-25.0/src/test/java/testdog/trace/instrumentation/java/concurrent/ForkJoinPoolSchedulingTest.java index d442ffe5e67..a17af291cc0 100644 --- a/dd-java-agent/instrumentation/java/java-concurrent/java-concurrent-25.0/src/test/java/testdog/trace/instrumentation/java/concurrent/ForkJoinPoolSchedulingTest.java +++ b/dd-java-agent/instrumentation/java/java-concurrent/java-concurrent-25.0/src/test/java/testdog/trace/instrumentation/java/concurrent/ForkJoinPoolSchedulingTest.java @@ -133,15 +133,14 @@ void unrelatedApplicationMethodDoesNotCancelContext() throws Exception { try (ForkJoinPool pool = new ForkJoinPool(1)) { try { CountDownLatch started = new CountDownLatch(1); - pool.execute( - () -> { - started.countDown(); - try { - assertTrue(release.await(10, SECONDS)); - } catch (InterruptedException e) { - throw new AssertionError(e); - } - }); + pool.execute(() -> { + started.countDown(); + try { + assertTrue(release.await(10, SECONDS)); + } catch (InterruptedException e) { + throw new AssertionError(e); + } + }); assertTrue(started.await(10, SECONDS)); AgentSpan parent = startSpan("test", "parent"); ApplicationTask task = new ApplicationTask(); @@ -396,13 +395,12 @@ void virtualThreadParkTimeoutDoesNotCaptureRequestContext() throws Exception { try (ContextScope ignored = current().with(parent).attach()) { virtualThread = Thread.ofVirtual() - .start( - () -> { - try (ContextScope ignoredScope = activateSpan((AgentSpan) expectedParent)) { - readyToPark.countDown(); - LockSupport.parkNanos(DAYS.toNanos(1)); - } - }); + .start(() -> { + try (ContextScope ignoredScope = activateSpan((AgentSpan) expectedParent)) { + readyToPark.countDown(); + LockSupport.parkNanos(DAYS.toNanos(1)); + } + }); } try { diff --git a/dd-java-agent/instrumentation/java/java-lang/java-lang-21.0/src/test/java/testdog/trace/instrumentation/java/lang/jdk21/PerCarrierPollerContextForkedTest.java b/dd-java-agent/instrumentation/java/java-lang/java-lang-21.0/src/test/java/testdog/trace/instrumentation/java/lang/jdk21/PerCarrierPollerContextForkedTest.java index fbad192e2b3..4e91e66a6c4 100644 --- a/dd-java-agent/instrumentation/java/java-lang/java-lang-21.0/src/test/java/testdog/trace/instrumentation/java/lang/jdk21/PerCarrierPollerContextForkedTest.java +++ b/dd-java-agent/instrumentation/java/java-lang/java-lang-21.0/src/test/java/testdog/trace/instrumentation/java/lang/jdk21/PerCarrierPollerContextForkedTest.java @@ -56,33 +56,29 @@ void firstReadOnCarrierDoesNotRetainRequest() throws Exception { socket.setSoTimeout(10_000); reader = Thread.ofVirtual() - .start( - () -> { - try { - assertSame(parentSpan, activeSpan()); - assertEquals(1, socket.getInputStream().read()); - assertSame( - parentSpan, - activeSpan(), - "poller creation must restore request context"); - } catch (Throwable error) { - failure.set(error); - } - }); - - new PollingConditions(10) - .eventually( - () -> { - assertFalse(readPollers.isEmpty()); - for (Object readPoller : readPollers) { - Thread owner = (Thread) field(poller, "owner").get(readPoller); - assertTrue(owner != null && owner.isAlive()); - assertTrue(owner.isVirtual()); - assertNull( - virtualThreadState(owner), - "live carrier poller must retain neither context nor continuation"); + .start(() -> { + try { + assertSame(parentSpan, activeSpan()); + assertEquals(1, socket.getInputStream().read()); + assertSame( + parentSpan, activeSpan(), "poller creation must restore request context"); + } catch (Throwable error) { + failure.set(error); } }); + + new PollingConditions(10) + .eventually(() -> { + assertFalse(readPollers.isEmpty()); + for (Object readPoller : readPollers) { + Thread owner = (Thread) field(poller, "owner").get(readPoller); + assertTrue(owner != null && owner.isAlive()); + assertTrue(owner.isVirtual()); + assertNull( + virtualThreadState(owner), + "live carrier poller must retain neither context nor continuation"); + } + }); peer.getOutputStream().write(1); assertTrue(reader.join(Duration.ofSeconds(10))); assertNull(failure.get()); diff --git a/dd-java-agent/instrumentation/java/java-lang/java-lang-21.0/src/test/java/testdog/trace/instrumentation/java/lang/jdk21/VirtualThreadLifeCycleTest.java b/dd-java-agent/instrumentation/java/java-lang/java-lang-21.0/src/test/java/testdog/trace/instrumentation/java/lang/jdk21/VirtualThreadLifeCycleTest.java index 0ff9c66cd72..7203063a67d 100644 --- a/dd-java-agent/instrumentation/java/java-lang/java-lang-21.0/src/test/java/testdog/trace/instrumentation/java/lang/jdk21/VirtualThreadLifeCycleTest.java +++ b/dd-java-agent/instrumentation/java/java-lang/java-lang-21.0/src/test/java/testdog/trace/instrumentation/java/lang/jdk21/VirtualThreadLifeCycleTest.java @@ -71,14 +71,13 @@ public void run() { spanId[0] = GlobalTracer.get().getSpanId(); Thread thread = - Thread.startVirtualThread( - () -> { - spanIdBeforeUnmount[0] = GlobalTracer.get().getSpanId(); - for (int remount = 0; remount < remountCount; remount++) { - tryUnmount(); - spanIdsAfterRemount[remount] = GlobalTracer.get().getSpanId(); - } - }); + Thread.startVirtualThread(() -> { + spanIdBeforeUnmount[0] = GlobalTracer.get().getSpanId(); + for (int remount = 0; remount < remountCount; remount++) { + tryUnmount(); + spanIdsAfterRemount[remount] = GlobalTracer.get().getSpanId(); + } + }); try { thread.join(TIMEOUT); } catch (InterruptedException e) { @@ -109,16 +108,15 @@ void testContextRestoredAsImplicitParentSpanAfterRemount() { @Trace(operationName = "parent") public void run() { Thread thread = - Thread.startVirtualThread( - () -> { - tryUnmount(); - // Runnable to create child span, not async related - new Runnable() { - @Override - @Trace(operationName = "child") - public void run() {} - }.run(); - }); + Thread.startVirtualThread(() -> { + tryUnmount(); + // Runnable to create child span, not async related + new Runnable() { + @Override + @Trace(operationName = "child") + public void run() {} + }.run(); + }); try { thread.join(TIMEOUT); } catch (InterruptedException e) { @@ -151,11 +149,10 @@ public void run() { for (int i = 0; i < threadCount; i++) { int index = i; threads.add( - Thread.startVirtualThread( - () -> { - tryUnmount(); - spanIdsAfterRemount[index] = CorrelationIdentifier.getSpanId(); - })); + Thread.startVirtualThread(() -> { + tryUnmount(); + spanIdsAfterRemount[index] = CorrelationIdentifier.getSpanId(); + })); } for (Thread thread : threads) { @@ -213,12 +210,11 @@ public void run() { parentSpanId[0] = GlobalTracer.get().getSpanId(); Thread thread = - Thread.startVirtualThread( - () -> { - beforeChild[0] = GlobalTracer.get().getSpanId(); - childWork(insideChildBeforeUnmount, insideChildAfterRemount); - afterChild[0] = GlobalTracer.get().getSpanId(); - }); + Thread.startVirtualThread(() -> { + beforeChild[0] = GlobalTracer.get().getSpanId(); + childWork(insideChildBeforeUnmount, insideChildAfterRemount); + afterChild[0] = GlobalTracer.get().getSpanId(); + }); try { thread.join(); } catch (InterruptedException e) { diff --git a/dd-java-agent/instrumentation/java/java-lang/java-lang-21.0/src/test/java/testdog/trace/instrumentation/java/lang/jdk21/VirtualThreadProfilingContextTest.java b/dd-java-agent/instrumentation/java/java-lang/java-lang-21.0/src/test/java/testdog/trace/instrumentation/java/lang/jdk21/VirtualThreadProfilingContextTest.java index 8b5f304ade6..6143ceb6766 100644 --- a/dd-java-agent/instrumentation/java/java-lang/java-lang-21.0/src/test/java/testdog/trace/instrumentation/java/lang/jdk21/VirtualThreadProfilingContextTest.java +++ b/dd-java-agent/instrumentation/java/java-lang/java-lang-21.0/src/test/java/testdog/trace/instrumentation/java/lang/jdk21/VirtualThreadProfilingContextTest.java @@ -85,11 +85,10 @@ private static void runWithSpan( PROFILING_CONTEXT.reset(); Thread thread = - Thread.startVirtualThread( - () -> { - spanIdAtRunnableEntry.set(PROFILING_CONTEXT.activeSpanId()); - bindingsAtRunnableEntry.set(PROFILING_CONTEXT.bindings()); - }); + Thread.startVirtualThread(() -> { + spanIdAtRunnableEntry.set(PROFILING_CONTEXT.activeSpanId()); + bindingsAtRunnableEntry.set(PROFILING_CONTEXT.bindings()); + }); try { assertTrue(thread.join(TIMEOUT), "virtual thread did not finish in time"); } catch (InterruptedException e) { diff --git a/dd-java-agent/instrumentation/java/java-net/java-net-11.0/src/main/java11/datadog/trace/instrumentation/httpclient/CompletableFutureWrapper.java b/dd-java-agent/instrumentation/java/java-net/java-net-11.0/src/main/java11/datadog/trace/instrumentation/httpclient/CompletableFutureWrapper.java index 86fd52493d0..1e3e7e74aa7 100644 --- a/dd-java-agent/instrumentation/java/java-net/java-net-11.0/src/main/java11/datadog/trace/instrumentation/httpclient/CompletableFutureWrapper.java +++ b/dd-java-agent/instrumentation/java/java-net/java-net-11.0/src/main/java11/datadog/trace/instrumentation/httpclient/CompletableFutureWrapper.java @@ -11,16 +11,15 @@ private CompletableFutureWrapper() {} public static CompletableFuture wrap( CompletableFuture future, ContextContinuation continuation) { CompletableFuture result = new CompletableFuture<>(); - future.whenComplete( - (T value, Throwable throwable) -> { - try (ContextScope scope = continuation.resume()) { - if (throwable != null) { - result.completeExceptionally(throwable); - } else { - result.complete(value); - } - } - }); + future.whenComplete((T value, Throwable throwable) -> { + try (ContextScope scope = continuation.resume()) { + if (throwable != null) { + result.completeExceptionally(throwable); + } else { + result.complete(value); + } + } + }); return result; } diff --git a/dd-java-agent/instrumentation/jdbc/src/main/java/datadog/trace/instrumentation/jdbc/StatementInstrumentation.java b/dd-java-agent/instrumentation/jdbc/src/main/java/datadog/trace/instrumentation/jdbc/StatementInstrumentation.java index ad790319db7..9f19df46458 100644 --- a/dd-java-agent/instrumentation/jdbc/src/main/java/datadog/trace/instrumentation/jdbc/StatementInstrumentation.java +++ b/dd-java-agent/instrumentation/jdbc/src/main/java/datadog/trace/instrumentation/jdbc/StatementInstrumentation.java @@ -72,7 +72,7 @@ public static class StatementAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) public static ContextScope onEnter( @Advice.Argument(value = 0, readOnly = false) String sql, - @Advice.AllArguments() Object[] args, + @Advice.AllArguments Object[] args, @Advice.This final Statement statement) { // TODO consider matching known non-wrapper implementations to avoid this check final int callDepth = CallDepthThreadLocalMap.incrementCallDepth(Statement.class); diff --git a/dd-java-agent/instrumentation/jetty/jetty-client/jetty-client-12.0/src/test/java/JettyWebSocketUpgradeTest.java b/dd-java-agent/instrumentation/jetty/jetty-client/jetty-client-12.0/src/test/java/JettyWebSocketUpgradeTest.java index 05be8732fee..bf23675686e 100644 --- a/dd-java-agent/instrumentation/jetty/jetty-client/jetty-client-12.0/src/test/java/JettyWebSocketUpgradeTest.java +++ b/dd-java-agent/instrumentation/jetty/jetty-client/jetty-client-12.0/src/test/java/JettyWebSocketUpgradeTest.java @@ -132,10 +132,8 @@ private static URI startServer(Server server) throws Exception { server.setHandler(context); context.setHandler( WebSocketUpgradeHandler.from(server, context) - .configure( - container -> - container.addMapping( - "/upgrade", (request, response, callback) -> new Endpoint()))); + .configure(container -> + container.addMapping("/upgrade", (request, response, callback) -> new Endpoint()))); server.start(); return URI.create( "ws://localhost:" diff --git a/dd-java-agent/instrumentation/kotlin-coroutines-1.3/src/main/java/datadog/trace/instrumentation/kotlin/coroutines/DatadogThreadContextElement.java b/dd-java-agent/instrumentation/kotlin-coroutines-1.3/src/main/java/datadog/trace/instrumentation/kotlin/coroutines/DatadogThreadContextElement.java index 99899787e84..30517323846 100644 --- a/dd-java-agent/instrumentation/kotlin-coroutines-1.3/src/main/java/datadog/trace/instrumentation/kotlin/coroutines/DatadogThreadContextElement.java +++ b/dd-java-agent/instrumentation/kotlin-coroutines-1.3/src/main/java/datadog/trace/instrumentation/kotlin/coroutines/DatadogThreadContextElement.java @@ -31,12 +31,11 @@ public final class DatadogThreadContextElement /** Coroutines built by coroutineScope, withContext, etc. that their caller waits for. */ private static final ClassValue SCOPED_COROUTINE = - GenericClassValue.of( - type -> - ScopeCoroutine.class.isAssignableFrom(type) - // older timeout coroutines are scoped but don't extend ScopeCoroutine - || (AbstractCoroutine.class.isAssignableFrom(type) - && "kotlinx.coroutines.TimeoutCoroutine".equals(type.getName()))); + GenericClassValue.of(type -> + ScopeCoroutine.class.isAssignableFrom(type) + // older timeout coroutines are scoped but don't extend ScopeCoroutine + || (AbstractCoroutine.class.isAssignableFrom(type) + && "kotlinx.coroutines.TimeoutCoroutine".equals(type.getName()))); /** null before the Datadog element, false after it, true once a later hook is found. */ private static final Function2 HAS_LATER_HOOK = diff --git a/dd-java-agent/instrumentation/lettuce/lettuce-4.0/src/main/java/datadog/trace/instrumentation/lettuce4/InstrumentationPoints.java b/dd-java-agent/instrumentation/lettuce/lettuce-4.0/src/main/java/datadog/trace/instrumentation/lettuce4/InstrumentationPoints.java index d5ffcc60dc7..154b6e517f1 100644 --- a/dd-java-agent/instrumentation/lettuce/lettuce-4.0/src/main/java/datadog/trace/instrumentation/lettuce4/InstrumentationPoints.java +++ b/dd-java-agent/instrumentation/lettuce/lettuce-4.0/src/main/java/datadog/trace/instrumentation/lettuce4/InstrumentationPoints.java @@ -58,17 +58,16 @@ public static void afterCommand( } else if (expectsResponse(command)) { // Register the callback before closing the scope so the active span is correct when // the CompletableFuture instrumentation captures context for the finishing lambda. - asyncCommand.handleAsync( - (value, ex) -> { - if (ex instanceof CancellationException) { - span.setTag("db.command.cancelled", true); - } else { - DECORATE.onError(span, ex); - } - DECORATE.beforeFinish(span); - span.finish(); - return null; - }); + asyncCommand.handleAsync((value, ex) -> { + if (ex instanceof CancellationException) { + span.setTag("db.command.cancelled", true); + } else { + DECORATE.onError(span, ex); + } + DECORATE.beforeFinish(span); + span.finish(); + return null; + }); scope.close(); } else { // No response is expected, so we must finish the span now. diff --git a/dd-java-agent/instrumentation/lettuce/lettuce-5.0/src/main/java/datadog/trace/instrumentation/lettuce5/MasterReplicaConnectionHelper.java b/dd-java-agent/instrumentation/lettuce/lettuce-5.0/src/main/java/datadog/trace/instrumentation/lettuce5/MasterReplicaConnectionHelper.java index 3a33fedddc7..c2bba22a8f6 100644 --- a/dd-java-agent/instrumentation/lettuce/lettuce-5.0/src/main/java/datadog/trace/instrumentation/lettuce5/MasterReplicaConnectionHelper.java +++ b/dd-java-agent/instrumentation/lettuce/lettuce-5.0/src/main/java/datadog/trace/instrumentation/lettuce5/MasterReplicaConnectionHelper.java @@ -42,11 +42,10 @@ public static CompletableFuture onConnectionFu return connectionFuture; } - return connectionFuture.whenComplete( - (connection, throwable) -> { - if (throwable == null) { - onConnection(span, connection, contextStore); - } - }); + return connectionFuture.whenComplete((connection, throwable) -> { + if (throwable == null) { + onConnection(span, connection, contextStore); + } + }); } } diff --git a/dd-java-agent/instrumentation/lettuce/lettuce-5.0/src/test/java/Lettuce5ClusterTest.java b/dd-java-agent/instrumentation/lettuce/lettuce-5.0/src/test/java/Lettuce5ClusterTest.java index 70f56efaf5f..4b913ba12fc 100644 --- a/dd-java-agent/instrumentation/lettuce/lettuce-5.0/src/test/java/Lettuce5ClusterTest.java +++ b/dd-java-agent/instrumentation/lettuce/lettuce-5.0/src/test/java/Lettuce5ClusterTest.java @@ -74,12 +74,11 @@ void setUpRedis() throws Exception { connection = redisClient.connect(); new PollingConditions(30) .delay(0.5) - .eventually( - () -> - assertEquals( - "OK", - connection.sync().set("DD_CLUSTER_READY", "1"), - "Redis cluster did not become ready")); + .eventually(() -> + assertEquals( + "OK", + connection.sync().set("DD_CLUSTER_READY", "1"), + "Redis cluster did not become ready")); tracer.flush(); writer.clear(); @@ -131,11 +130,10 @@ void clusterReadCommandSpanUsesReplicaPeerWithReadFromReplica() throws Exception connection.setReadFrom(ReadFrom.SLAVE); new PollingConditions(30) .delay(0.5) - .eventually( - () -> { - redisClient.reloadPartitions(); - assertEquals(TEST_SET_VALUE, connection.sync().get(TEST_SET_KEY)); - }); + .eventually(() -> { + redisClient.reloadPartitions(); + assertEquals(TEST_SET_VALUE, connection.sync().get(TEST_SET_KEY)); + }); blockUntilTracesMatch(traces -> !findCommandSpans(traces, "GET").isEmpty()); tracer.flush(); diff --git a/dd-java-agent/instrumentation/log4j/log4j-1.2.4/src/main/java/datadog/trace/instrumentation/log4j1/LoggingEventInstrumentation.java b/dd-java-agent/instrumentation/log4j/log4j-1.2.4/src/main/java/datadog/trace/instrumentation/log4j1/LoggingEventInstrumentation.java index bb9607d2bb2..365a6e4ed9c 100644 --- a/dd-java-agent/instrumentation/log4j/log4j-1.2.4/src/main/java/datadog/trace/instrumentation/log4j1/LoggingEventInstrumentation.java +++ b/dd-java-agent/instrumentation/log4j/log4j-1.2.4/src/main/java/datadog/trace/instrumentation/log4j1/LoggingEventInstrumentation.java @@ -129,7 +129,7 @@ public static boolean onEnter( @Advice.OnMethodExit(suppress = Throwable.class) public static void onExit( @Advice.This LoggingEvent event, - @Advice.Enter() boolean injectionRequired, + @Advice.Enter boolean injectionRequired, @Advice.FieldValue(value = "mdcCopy") Hashtable mdc) { if (!injectionRequired) { return; diff --git a/dd-java-agent/instrumentation/micronaut/micronaut-http-server-netty/micronaut-http-server-netty-2.0/src/test/java/test/TestFilter.java b/dd-java-agent/instrumentation/micronaut/micronaut-http-server-netty/micronaut-http-server-netty-2.0/src/test/java/test/TestFilter.java index d6fd3e7563c..75b49a58293 100644 --- a/dd-java-agent/instrumentation/micronaut/micronaut-http-server-netty/micronaut-http-server-netty-2.0/src/test/java/test/TestFilter.java +++ b/dd-java-agent/instrumentation/micronaut/micronaut-http-server-netty/micronaut-http-server-netty-2.0/src/test/java/test/TestFilter.java @@ -15,11 +15,10 @@ public class TestFilter implements HttpServerFilter { public Publisher> doFilter( HttpRequest request, ServerFilterChain chain) { return Flowable.fromPublisher(chain.proceed(request)) - .doOnNext( - res -> - res.getHeaders() - .add( - HttpServerTest.getIG_RESPONSE_HEADER(), - HttpServerTest.getIG_RESPONSE_HEADER_VALUE())); + .doOnNext(res -> + res.getHeaders() + .add( + HttpServerTest.getIG_RESPONSE_HEADER(), + HttpServerTest.getIG_RESPONSE_HEADER_VALUE())); } } diff --git a/dd-java-agent/instrumentation/micronaut/micronaut-http-server-netty/micronaut-http-server-netty-3.0/src/test/java/test/TestFilter.java b/dd-java-agent/instrumentation/micronaut/micronaut-http-server-netty/micronaut-http-server-netty-3.0/src/test/java/test/TestFilter.java index 1fbe20a53cb..5ba018add6b 100644 --- a/dd-java-agent/instrumentation/micronaut/micronaut-http-server-netty/micronaut-http-server-netty-3.0/src/test/java/test/TestFilter.java +++ b/dd-java-agent/instrumentation/micronaut/micronaut-http-server-netty/micronaut-http-server-netty-3.0/src/test/java/test/TestFilter.java @@ -16,11 +16,10 @@ public Publisher> doFilter( HttpRequest request, ServerFilterChain chain) { return Flux.from(chain.proceed(request)) - .doOnNext( - res -> - res.getHeaders() - .add( - HttpServerTest.getIG_RESPONSE_HEADER(), - HttpServerTest.getIG_RESPONSE_HEADER_VALUE())); + .doOnNext(res -> + res.getHeaders() + .add( + HttpServerTest.getIG_RESPONSE_HEADER(), + HttpServerTest.getIG_RESPONSE_HEADER_VALUE())); } } diff --git a/dd-java-agent/instrumentation/micronaut/micronaut-http-server-netty/micronaut-http-server-netty-4.0/src/test/java/test/TestFilter.java b/dd-java-agent/instrumentation/micronaut/micronaut-http-server-netty/micronaut-http-server-netty-4.0/src/test/java/test/TestFilter.java index 1fbe20a53cb..5ba018add6b 100644 --- a/dd-java-agent/instrumentation/micronaut/micronaut-http-server-netty/micronaut-http-server-netty-4.0/src/test/java/test/TestFilter.java +++ b/dd-java-agent/instrumentation/micronaut/micronaut-http-server-netty/micronaut-http-server-netty-4.0/src/test/java/test/TestFilter.java @@ -16,11 +16,10 @@ public Publisher> doFilter( HttpRequest request, ServerFilterChain chain) { return Flux.from(chain.proceed(request)) - .doOnNext( - res -> - res.getHeaders() - .add( - HttpServerTest.getIG_RESPONSE_HEADER(), - HttpServerTest.getIG_RESPONSE_HEADER_VALUE())); + .doOnNext(res -> + res.getHeaders() + .add( + HttpServerTest.getIG_RESPONSE_HEADER(), + HttpServerTest.getIG_RESPONSE_HEADER_VALUE())); } } diff --git a/dd-java-agent/instrumentation/mule-4.5/src/test/groovy/mule4/HttpServerTestHandlerAdvice.java b/dd-java-agent/instrumentation/mule-4.5/src/test/groovy/mule4/HttpServerTestHandlerAdvice.java index 03f82f2dfdf..1a7499d804d 100644 --- a/dd-java-agent/instrumentation/mule-4.5/src/test/groovy/mule4/HttpServerTestHandlerAdvice.java +++ b/dd-java-agent/instrumentation/mule-4.5/src/test/groovy/mule4/HttpServerTestHandlerAdvice.java @@ -5,7 +5,7 @@ // Advice to call the bridge code that interacts with the test code public class HttpServerTestHandlerAdvice { - @Advice.OnMethodExit() + @Advice.OnMethodExit static void onExit( @Advice.Argument(value = 0) String requestPath, @Advice.Return(readOnly = false) Object[] ret) { diff --git a/dd-java-agent/instrumentation/netty/netty-3.8/src/main/java/datadog/trace/instrumentation/netty38/server/BlockingResponseHandler.java b/dd-java-agent/instrumentation/netty/netty-3.8/src/main/java/datadog/trace/instrumentation/netty38/server/BlockingResponseHandler.java index 3a8e75e2777..0179ac56f9c 100644 --- a/dd-java-agent/instrumentation/netty/netty-3.8/src/main/java/datadog/trace/instrumentation/netty38/server/BlockingResponseHandler.java +++ b/dd-java-agent/instrumentation/netty/netty-3.8/src/main/java/datadog/trace/instrumentation/netty38/server/BlockingResponseHandler.java @@ -135,16 +135,15 @@ public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Ex segment.effectivelyBlocked(); ChannelFuture future = Channels.future(ctx.getChannel()); - future.addListener( - fut -> { - if (!fut.isSuccess()) { - log.warn("Write of blocking response failed", fut.getCause()); - } - // close the connection because it can be in an invalid state at this point - // For instance, in a POST request we will still be receiving data from the - // client - fut.getChannel().close(); - }); + future.addListener(fut -> { + if (!fut.isSuccess()) { + log.warn("Write of blocking response failed", fut.getCause()); + } + // close the connection because it can be in an invalid state at this point + // For instance, in a POST request we will still be receiving data from the + // client + fut.getChannel().close(); + }); Channels.write(ctxForDownstream, future, response); } } diff --git a/dd-java-agent/instrumentation/netty/netty-3.8/src/main/java/datadog/trace/instrumentation/netty38/server/MaybeBlockResponseHandler.java b/dd-java-agent/instrumentation/netty/netty-3.8/src/main/java/datadog/trace/instrumentation/netty38/server/MaybeBlockResponseHandler.java index 8cd6d9d3748..8f64fefc9e4 100644 --- a/dd-java-agent/instrumentation/netty/netty-3.8/src/main/java/datadog/trace/instrumentation/netty38/server/MaybeBlockResponseHandler.java +++ b/dd-java-agent/instrumentation/netty/netty-3.8/src/main/java/datadog/trace/instrumentation/netty38/server/MaybeBlockResponseHandler.java @@ -105,16 +105,15 @@ public void writeRequested(ChannelHandlerContext ctx, MessageEvent msg) throws E } ChannelFuture future = Channels.future(ctx.getChannel()); - future.addListener( - fut -> { - if (!fut.isSuccess()) { - log.warn("Write of blocking response failed", fut.getCause()); - } - // close the connection because it can be in an invalid state at this point - // For instance, in a POST request we will still be receiving data from the - // client - fut.getChannel().close(); - }); + future.addListener(fut -> { + if (!fut.isSuccess()) { + log.warn("Write of blocking response failed", fut.getCause()); + } + // close the connection because it can be in an invalid state at this point + // For instance, in a POST request we will still be receiving data from the + // client + fut.getChannel().close(); + }); requestContext.getTraceSegment().effectivelyBlocked(); diff --git a/dd-java-agent/instrumentation/netty/netty-4.0/src/main/java/datadog/trace/instrumentation/netty40/server/BlockingResponseHandler.java b/dd-java-agent/instrumentation/netty/netty-4.0/src/main/java/datadog/trace/instrumentation/netty40/server/BlockingResponseHandler.java index b31435dd801..fe44c659b61 100644 --- a/dd-java-agent/instrumentation/netty/netty-4.0/src/main/java/datadog/trace/instrumentation/netty40/server/BlockingResponseHandler.java +++ b/dd-java-agent/instrumentation/netty/netty-4.0/src/main/java/datadog/trace/instrumentation/netty40/server/BlockingResponseHandler.java @@ -133,13 +133,12 @@ public void channelRead(final ChannelHandlerContext ctx, final Object msg) { ctxForDownstream .writeAndFlush(response) - .addListener( - fut -> { - if (!fut.isSuccess()) { - log.warn("Write of blocking response failed", fut.cause()); - } - ctx.channel().close(); - }); + .addListener(fut -> { + if (!fut.isSuccess()) { + log.warn("Write of blocking response failed", fut.cause()); + } + ctx.channel().close(); + }); } @ChannelHandler.Sharable diff --git a/dd-java-agent/instrumentation/netty/netty-4.0/src/main/java/datadog/trace/instrumentation/netty40/server/MaybeBlockResponseHandler.java b/dd-java-agent/instrumentation/netty/netty-4.0/src/main/java/datadog/trace/instrumentation/netty40/server/MaybeBlockResponseHandler.java index 6f6c1891e88..cec18e1b5e1 100644 --- a/dd-java-agent/instrumentation/netty/netty-4.0/src/main/java/datadog/trace/instrumentation/netty40/server/MaybeBlockResponseHandler.java +++ b/dd-java-agent/instrumentation/netty/netty-4.0/src/main/java/datadog/trace/instrumentation/netty40/server/MaybeBlockResponseHandler.java @@ -128,14 +128,13 @@ public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise prm) thr requestContext.getTraceSegment().effectivelyBlocked(); log.debug("About to write and flush blocking response {}", response); ctx.writeAndFlush(response, prm) - .addListener( - fut -> { - if (!fut.isSuccess()) { - log.warn("Write of blocking response failed", fut.cause()); - } else { - log.debug("Write of blocking response succeeded"); - } - channel.close(); - }); + .addListener(fut -> { + if (!fut.isSuccess()) { + log.warn("Write of blocking response failed", fut.cause()); + } else { + log.debug("Write of blocking response succeeded"); + } + channel.close(); + }); } } diff --git a/dd-java-agent/instrumentation/netty/netty-4.1/src/main/java/datadog/trace/instrumentation/netty41/server/BlockingResponseHandler.java b/dd-java-agent/instrumentation/netty/netty-4.1/src/main/java/datadog/trace/instrumentation/netty41/server/BlockingResponseHandler.java index 8772b7d1403..739563aa0ea 100644 --- a/dd-java-agent/instrumentation/netty/netty-4.1/src/main/java/datadog/trace/instrumentation/netty41/server/BlockingResponseHandler.java +++ b/dd-java-agent/instrumentation/netty/netty-4.1/src/main/java/datadog/trace/instrumentation/netty41/server/BlockingResponseHandler.java @@ -175,13 +175,12 @@ private static void writeBlockResponse( writeContext .writeAndFlush(pendingBlockResponse.toResponse()) - .addListener( - fut -> { - if (!fut.isSuccess()) { - log.warn("Write of blocking response failed", fut.cause()); - } - writeContext.channel().close(); - }); + .addListener(fut -> { + if (!fut.isSuccess()) { + log.warn("Write of blocking response failed", fut.cause()); + } + writeContext.channel().close(); + }); } private static class PendingBlockResponse { diff --git a/dd-java-agent/instrumentation/netty/netty-4.1/src/main/java/datadog/trace/instrumentation/netty41/server/MaybeBlockResponseHandler.java b/dd-java-agent/instrumentation/netty/netty-4.1/src/main/java/datadog/trace/instrumentation/netty41/server/MaybeBlockResponseHandler.java index 82bede8dcd1..c905ac63f36 100644 --- a/dd-java-agent/instrumentation/netty/netty-4.1/src/main/java/datadog/trace/instrumentation/netty41/server/MaybeBlockResponseHandler.java +++ b/dd-java-agent/instrumentation/netty/netty-4.1/src/main/java/datadog/trace/instrumentation/netty41/server/MaybeBlockResponseHandler.java @@ -122,15 +122,14 @@ public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise prm) thr requestContext.getTraceSegment().effectivelyBlocked(); log.debug("About to write and flush blocking response {}", response); ctx.writeAndFlush(response, prm) - .addListener( - fut -> { - if (!fut.isSuccess()) { - // known gap: this failure is not reported to AppSec block-failure telemetry - log.warn("Write of blocking response failed", fut.cause()); - } else { - log.debug("Write of blocking response succeeded"); - } - channel.close(); - }); + .addListener(fut -> { + if (!fut.isSuccess()) { + // known gap: this failure is not reported to AppSec block-failure telemetry + log.warn("Write of blocking response failed", fut.cause()); + } else { + log.debug("Write of blocking response succeeded"); + } + channel.close(); + }); } } diff --git a/dd-java-agent/instrumentation/netty/netty-4.1/src/main/java/datadog/trace/instrumentation/netty41/server/NettyHttpServerDecorator.java b/dd-java-agent/instrumentation/netty/netty-4.1/src/main/java/datadog/trace/instrumentation/netty41/server/NettyHttpServerDecorator.java index b513ef8dc0e..0e2410deb8e 100644 --- a/dd-java-agent/instrumentation/netty/netty-4.1/src/main/java/datadog/trace/instrumentation/netty41/server/NettyHttpServerDecorator.java +++ b/dd-java-agent/instrumentation/netty/netty-4.1/src/main/java/datadog/trace/instrumentation/netty41/server/NettyHttpServerDecorator.java @@ -204,13 +204,12 @@ public boolean tryCommitBlockingResponse( pipeline .channel() .eventLoop() - .execute( - () -> { - if (commitBlockingResponse( - segment, statusCode, templateType, extraHeaders, securityResponseId)) { - blockingResponseInitiated = true; - } - }); + .execute(() -> { + if (commitBlockingResponse( + segment, statusCode, templateType, extraHeaders, securityResponseId)) { + blockingResponseInitiated = true; + } + }); return true; } catch (RuntimeException rte) { log.warn("Failed scheduling blocking handler", rte); diff --git a/dd-java-agent/instrumentation/netty/netty-4.1/src/test/java/datadog/trace/instrumentation/netty41/server/BlockingResponseHandlerTest.java b/dd-java-agent/instrumentation/netty/netty-4.1/src/test/java/datadog/trace/instrumentation/netty41/server/BlockingResponseHandlerTest.java index a95264bccc0..105c2b3fe34 100644 --- a/dd-java-agent/instrumentation/netty/netty-4.1/src/test/java/datadog/trace/instrumentation/netty41/server/BlockingResponseHandlerTest.java +++ b/dd-java-agent/instrumentation/netty/netty-4.1/src/test/java/datadog/trace/instrumentation/netty41/server/BlockingResponseHandlerTest.java @@ -164,28 +164,26 @@ void commitsOffEventLoopAfterOriginalRequestIsReleased() throws Exception { AtomicReference serverContext = new AtomicReference<>(); channel .eventLoop() - .submit( - () -> { - channel - .pipeline() - .addLast(HttpServerRequestTracingHandler.INSTANCE) - .addLast(HttpServerResponseTracingHandler.INSTANCE); - ServerRequestContext.add(channel, Context.root(), null); - serverContext.set(ServerRequestContext.add(channel, Context.root(), null)); - }) + .submit(() -> { + channel + .pipeline() + .addLast(HttpServerRequestTracingHandler.INSTANCE) + .addLast(HttpServerResponseTracingHandler.INSTANCE); + ServerRequestContext.add(channel, Context.root(), null); + serverContext.set(ServerRequestContext.add(channel, Context.root(), null)); + }) .sync(); Future blockingTask = channel .eventLoop() - .submit( - () -> { - eventLoopTaskStarted.countDown(); - if (!releaseEventLoop.await(5, SECONDS)) { - throw new AssertionError("event loop was not released"); - } - return null; - }); + .submit(() -> { + eventLoopTaskStarted.countDown(); + if (!releaseEventLoop.await(5, SECONDS)) { + throw new AssertionError("event loop was not released"); + } + return null; + }); assertTrue(eventLoopTaskStarted.await(5, SECONDS), "event loop task did not start"); NettyBlockResponseFunction responseFunction = @@ -228,27 +226,25 @@ void doesNotBlockChannelWhenScheduledRequestContextCompletesFirst() throws Excep AtomicReference serverContext = new AtomicReference<>(); channel .eventLoop() - .submit( - () -> { - channel - .pipeline() - .addLast(HttpServerRequestTracingHandler.INSTANCE) - .addLast(HttpServerResponseTracingHandler.INSTANCE); - serverContext.set(ServerRequestContext.add(channel, Context.root(), null)); - }) + .submit(() -> { + channel + .pipeline() + .addLast(HttpServerRequestTracingHandler.INSTANCE) + .addLast(HttpServerResponseTracingHandler.INSTANCE); + serverContext.set(ServerRequestContext.add(channel, Context.root(), null)); + }) .sync(); Future blockingTask = channel .eventLoop() - .submit( - () -> { - eventLoopTaskStarted.countDown(); - if (!releaseEventLoop.await(5, SECONDS)) { - throw new AssertionError("event loop was not released"); - } - return null; - }); + .submit(() -> { + eventLoopTaskStarted.countDown(); + if (!releaseEventLoop.await(5, SECONDS)) { + throw new AssertionError("event loop was not released"); + } + return null; + }); assertTrue(eventLoopTaskStarted.await(5, SECONDS), "event loop task did not start"); Future completionTask = diff --git a/dd-java-agent/instrumentation/netty/netty-4.1/src/test/java/datadog/trace/instrumentation/netty41/server/NettyChunkedResponseSpanTest.java b/dd-java-agent/instrumentation/netty/netty-4.1/src/test/java/datadog/trace/instrumentation/netty41/server/NettyChunkedResponseSpanTest.java index 1fae3626f0e..493a117a0f6 100644 --- a/dd-java-agent/instrumentation/netty/netty-4.1/src/test/java/datadog/trace/instrumentation/netty41/server/NettyChunkedResponseSpanTest.java +++ b/dd-java-agent/instrumentation/netty/netty-4.1/src/test/java/datadog/trace/instrumentation/netty41/server/NettyChunkedResponseSpanTest.java @@ -770,12 +770,11 @@ private void writeKnownLengthFileRegionResponse(ChannelHandlerContext ctx) throw response.headers().set(CONTENT_LENGTH, body.length); ctx.write(response); ctx.writeAndFlush(new DefaultFileRegion(fileChannel, 0, body.length)) - .addListener( - future -> { - close(fileChannel); - delete(path); - knownLengthFileRegionWrites.offer(ctx); - }); + .addListener(future -> { + close(fileChannel); + delete(path); + knownLengthFileRegionWrites.offer(ctx); + }); } private void writeIncompleteKnownLengthResponse(ChannelHandlerContext ctx) { diff --git a/dd-java-agent/instrumentation/netty/netty-4.1/src/test/java/datadog/trace/instrumentation/netty41/server/NettyHttp11PipeliningTest.java b/dd-java-agent/instrumentation/netty/netty-4.1/src/test/java/datadog/trace/instrumentation/netty41/server/NettyHttp11PipeliningTest.java index eb250b9fcca..c412ccf2a05 100644 --- a/dd-java-agent/instrumentation/netty/netty-4.1/src/test/java/datadog/trace/instrumentation/netty41/server/NettyHttp11PipeliningTest.java +++ b/dd-java-agent/instrumentation/netty/netty-4.1/src/test/java/datadog/trace/instrumentation/netty41/server/NettyHttp11PipeliningTest.java @@ -132,13 +132,12 @@ void reactorNettyCompletesPipelinedFixedLengthResponses() throws Exception { HttpServer.create() .host("localhost") .port(0) - .handle( - (request, response) -> { - String body = "response " + request.uri(); - response.header(CONTENT_LENGTH, Integer.toString(body.getBytes(UTF_8).length)); - return Mono.delay(Duration.ofMillis(100)) - .then(Mono.defer(() -> response.sendString(Mono.just(body)).then())); - }) + .handle((request, response) -> { + String body = "response " + request.uri(); + response.header(CONTENT_LENGTH, Integer.toString(body.getBytes(UTF_8).length)); + return Mono.delay(Duration.ofMillis(100)) + .then(Mono.defer(() -> response.sendString(Mono.just(body)).then())); + }) .bindNow(); try { @@ -595,17 +594,16 @@ private void writeResponses() { } responseContext .executor() - .execute( - () -> { - for (String path : responsePaths) { - byte[] body = ("response " + path).getBytes(UTF_8); - DefaultFullHttpResponse response = - new DefaultFullHttpResponse(HTTP_1_1, OK, Unpooled.wrappedBuffer(body)); - response.headers().set(CONTENT_LENGTH, body.length); - responseContext.write(response); - } - responseContext.flush(); - }); + .execute(() -> { + for (String path : responsePaths) { + byte[] body = ("response " + path).getBytes(UTF_8); + DefaultFullHttpResponse response = + new DefaultFullHttpResponse(HTTP_1_1, OK, Unpooled.wrappedBuffer(body)); + response.headers().set(CONTENT_LENGTH, body.length); + responseContext.write(response); + } + responseContext.flush(); + }); } private void writeChunkedResponse() { @@ -619,16 +617,15 @@ private void writeChunkedResponse() { } responseContext .executor() - .execute( - () -> { - byte[] body = ("response " + path).getBytes(UTF_8); - DefaultHttpResponse response = new DefaultHttpResponse(HTTP_1_1, OK); - response.headers().set(TRANSFER_ENCODING, CHUNKED); - responseContext.write(response); - responseContext.write(new DefaultHttpContent(Unpooled.wrappedBuffer(body))); - responseContext.write(new DefaultLastHttpContent(Unpooled.EMPTY_BUFFER)); - responseContext.flush(); - }); + .execute(() -> { + byte[] body = ("response " + path).getBytes(UTF_8); + DefaultHttpResponse response = new DefaultHttpResponse(HTTP_1_1, OK); + response.headers().set(TRANSFER_ENCODING, CHUNKED); + responseContext.write(response); + responseContext.write(new DefaultHttpContent(Unpooled.wrappedBuffer(body))); + responseContext.write(new DefaultLastHttpContent(Unpooled.EMPTY_BUFFER)); + responseContext.flush(); + }); } private void writeHeaderOnlyResponseHeaders() { @@ -638,12 +635,11 @@ private void writeHeaderOnlyResponseHeaders() { } responseContext .executor() - .execute( - () -> { - DefaultHttpResponse response = new DefaultHttpResponse(HTTP_1_1, NO_CONTENT); - response.headers().set(CONNECTION, KEEP_ALIVE); - responseContext.writeAndFlush(response); - }); + .execute(() -> { + DefaultHttpResponse response = new DefaultHttpResponse(HTTP_1_1, NO_CONTENT); + response.headers().set(CONNECTION, KEEP_ALIVE); + responseContext.writeAndFlush(response); + }); } private void writeLastContent() { @@ -653,9 +649,8 @@ private void writeLastContent() { } responseContext .executor() - .execute( - () -> - responseContext.writeAndFlush(new DefaultLastHttpContent(Unpooled.EMPTY_BUFFER))); + .execute(() -> + responseContext.writeAndFlush(new DefaultLastHttpContent(Unpooled.EMPTY_BUFFER))); } private void writeHeadResponse() { @@ -669,15 +664,14 @@ private void writeHeadResponse() { } responseContext .executor() - .execute( - () -> { - byte[] body = ("response " + path).getBytes(UTF_8); - DefaultHttpResponse response = new DefaultHttpResponse(HTTP_1_1, OK); - response.headers().set(CONTENT_LENGTH, body.length); - responseContext.write(response); - responseContext.write(new DefaultLastHttpContent(Unpooled.EMPTY_BUFFER)); - responseContext.flush(); - }); + .execute(() -> { + byte[] body = ("response " + path).getBytes(UTF_8); + DefaultHttpResponse response = new DefaultHttpResponse(HTTP_1_1, OK); + response.headers().set(CONTENT_LENGTH, body.length); + responseContext.write(response); + responseContext.write(new DefaultLastHttpContent(Unpooled.EMPTY_BUFFER)); + responseContext.flush(); + }); } private void writeInterimResponseWithTerminatorThenResponse() { @@ -691,18 +685,17 @@ private void writeInterimResponseWithTerminatorThenResponse() { } responseContext .executor() - .execute( - () -> { - responseContext.write(new DefaultHttpResponse(HTTP_1_1, CONTINUE)); - responseContext.write(new DefaultLastHttpContent(Unpooled.EMPTY_BUFFER)); - - byte[] body = ("response " + path).getBytes(UTF_8); - DefaultFullHttpResponse response = - new DefaultFullHttpResponse(HTTP_1_1, OK, Unpooled.wrappedBuffer(body)); - response.headers().set(CONTENT_LENGTH, body.length); - responseContext.write(response); - responseContext.flush(); - }); + .execute(() -> { + responseContext.write(new DefaultHttpResponse(HTTP_1_1, CONTINUE)); + responseContext.write(new DefaultLastHttpContent(Unpooled.EMPTY_BUFFER)); + + byte[] body = ("response " + path).getBytes(UTF_8); + DefaultFullHttpResponse response = + new DefaultFullHttpResponse(HTTP_1_1, OK, Unpooled.wrappedBuffer(body)); + response.headers().set(CONTENT_LENGTH, body.length); + responseContext.write(response); + responseContext.flush(); + }); } private void writeEarlyHintsWithTerminatorThenResponse() { @@ -720,18 +713,17 @@ private void writeInformationalResponseWithTerminatorThenResponse(HttpResponseSt } responseContext .executor() - .execute( - () -> { - responseContext.write(new DefaultHttpResponse(HTTP_1_1, status)); - responseContext.write(new DefaultLastHttpContent(Unpooled.EMPTY_BUFFER)); - - byte[] body = ("response " + path).getBytes(UTF_8); - DefaultFullHttpResponse response = - new DefaultFullHttpResponse(HTTP_1_1, OK, Unpooled.wrappedBuffer(body)); - response.headers().set(CONTENT_LENGTH, body.length); - responseContext.write(response); - responseContext.flush(); - }); + .execute(() -> { + responseContext.write(new DefaultHttpResponse(HTTP_1_1, status)); + responseContext.write(new DefaultLastHttpContent(Unpooled.EMPTY_BUFFER)); + + byte[] body = ("response " + path).getBytes(UTF_8); + DefaultFullHttpResponse response = + new DefaultFullHttpResponse(HTTP_1_1, OK, Unpooled.wrappedBuffer(body)); + response.headers().set(CONTENT_LENGTH, body.length); + responseContext.write(response); + responseContext.flush(); + }); } } } diff --git a/dd-java-agent/instrumentation/netty/netty-4.1/src/test/java/datadog/trace/instrumentation/netty41/server/NettyNativeClientAbortSpanTest.java b/dd-java-agent/instrumentation/netty/netty-4.1/src/test/java/datadog/trace/instrumentation/netty41/server/NettyNativeClientAbortSpanTest.java index 28ed7e1d926..a61963b57b5 100644 --- a/dd-java-agent/instrumentation/netty/netty-4.1/src/test/java/datadog/trace/instrumentation/netty41/server/NettyNativeClientAbortSpanTest.java +++ b/dd-java-agent/instrumentation/netty/netty-4.1/src/test/java/datadog/trace/instrumentation/netty41/server/NettyNativeClientAbortSpanTest.java @@ -155,15 +155,14 @@ private void writeCancelledResponseTail(ChannelHandlerContext ctx) { ctx.write(new DefaultHttpContent(content)); } ctx.writeAndFlush(LastHttpContent.EMPTY_LAST_CONTENT) - .addListener( - future -> { - if (future.isSuccess()) { - failures.offer( - new AssertionError("cancelled response tail write unexpectedly succeeded")); - } else if (failureRecorded.compareAndSet(false, true)) { - failures.offer(future.cause()); - } - }); + .addListener(future -> { + if (future.isSuccess()) { + failures.offer( + new AssertionError("cancelled response tail write unexpectedly succeeded")); + } else if (failureRecorded.compareAndSet(false, true)) { + failures.offer(future.cause()); + } + }); } private Throwable awaitFailure() throws InterruptedException, TimeoutException { diff --git a/dd-java-agent/instrumentation/netty/netty-concurrent-4.0/src/test/java/executor/GrpcShadedNettyScheduledFutureTaskContextPropagationTest.java b/dd-java-agent/instrumentation/netty/netty-concurrent-4.0/src/test/java/executor/GrpcShadedNettyScheduledFutureTaskContextPropagationTest.java index 54e9365689f..45b805e2039 100644 --- a/dd-java-agent/instrumentation/netty/netty-concurrent-4.0/src/test/java/executor/GrpcShadedNettyScheduledFutureTaskContextPropagationTest.java +++ b/dd-java-agent/instrumentation/netty/netty-concurrent-4.0/src/test/java/executor/GrpcShadedNettyScheduledFutureTaskContextPropagationTest.java @@ -177,11 +177,10 @@ private void assertCompletionListenerContext(boolean fail) throws Exception { parent.finish(); } // Register without a span so listener instrumentation cannot mask early scope closure. - future.addListener( - done -> { - listenerSpan.set(activeSpan()); - completed.countDown(); - }); + future.addListener(done -> { + listenerSpan.set(activeSpan()); + completed.countDown(); + }); proceed.countDown(); assertTrue(completed.await(5, SECONDS)); assertSame(parent, listenerSpan.get()); diff --git a/dd-java-agent/instrumentation/netty/netty-concurrent-4.0/src/test/java/executor/NettyScheduledFutureTaskCancellationForkedTest.java b/dd-java-agent/instrumentation/netty/netty-concurrent-4.0/src/test/java/executor/NettyScheduledFutureTaskCancellationForkedTest.java index eb212b7684b..df6955d1d08 100644 --- a/dd-java-agent/instrumentation/netty/netty-concurrent-4.0/src/test/java/executor/NettyScheduledFutureTaskCancellationForkedTest.java +++ b/dd-java-agent/instrumentation/netty/netty-concurrent-4.0/src/test/java/executor/NettyScheduledFutureTaskCancellationForkedTest.java @@ -43,11 +43,10 @@ void testSuccessfulCancellationBeforeExecutionDoesNotActivateContext(boolean sch .with(AgentBuilder.Listener.StreamWriting.toSystemError().withErrorsOnly()) .with(AgentBuilder.RedefinitionStrategy.RETRANSFORMATION) .type(named("io.netty.util.concurrent.PromiseTask")) - .transform( - (builder, type, loader, module, domain) -> - builder.visit( - Advice.to(NettyCancellationGate.PauseAdvice.class) - .on(named("setUncancellableInternal")))) + .transform((builder, type, loader, module, domain) -> + builder.visit( + Advice.to(NettyCancellationGate.PauseAdvice.class) + .on(named("setUncancellableInternal")))) .installOn(instrumentation); NettyCancellationGate.entered = new CountDownLatch(1); NettyCancellationGate.proceed = new CountDownLatch(1); @@ -56,16 +55,15 @@ void testSuccessfulCancellationBeforeExecutionDoesNotActivateContext(boolean sch EventExecutor executor = group.next(); CountDownLatch workerBlocked = new CountDownLatch(1); CountDownLatch workerProceed = new CountDownLatch(1); - executor.execute( - () -> { - workerBlocked.countDown(); - try { - assertTrue(workerProceed.await(5, SECONDS)); - } catch (InterruptedException e) { - Thread.currentThread().interrupt(); - throw new AssertionError(e); - } - }); + executor.execute(() -> { + workerBlocked.countDown(); + try { + assertTrue(workerProceed.await(5, SECONDS)); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new AssertionError(e); + } + }); assertTrue(workerBlocked.await(5, SECONDS)); AtomicBoolean called = new AtomicBoolean(); AgentSpan parent = startSpan("test", "parent"); diff --git a/dd-java-agent/instrumentation/netty/netty-concurrent-4.0/src/test/java/executor/NettyScheduledFutureTaskContextPropagationTest.java b/dd-java-agent/instrumentation/netty/netty-concurrent-4.0/src/test/java/executor/NettyScheduledFutureTaskContextPropagationTest.java index 60c108d9eeb..6005187bede 100644 --- a/dd-java-agent/instrumentation/netty/netty-concurrent-4.0/src/test/java/executor/NettyScheduledFutureTaskContextPropagationTest.java +++ b/dd-java-agent/instrumentation/netty/netty-concurrent-4.0/src/test/java/executor/NettyScheduledFutureTaskContextPropagationTest.java @@ -275,11 +275,10 @@ private void assertCompletionListenerContext(boolean fail) throws Exception { parent.finish(); } // Register without a span so listener instrumentation cannot mask early scope closure. - future.addListener( - done -> { - listenerSpan.set(activeSpan()); - completed.countDown(); - }); + future.addListener(done -> { + listenerSpan.set(activeSpan()); + completed.countDown(); + }); proceed.countDown(); assertTrue(completed.await(5, SECONDS)); assertSame(parent, listenerSpan.get()); diff --git a/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/main/java/datadog/trace/instrumentation/openai_java/ChatCompletionDecorator.java b/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/main/java/datadog/trace/instrumentation/openai_java/ChatCompletionDecorator.java index f1abd77c45c..e291b605adf 100644 --- a/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/main/java/datadog/trace/instrumentation/openai_java/ChatCompletionDecorator.java +++ b/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/main/java/datadog/trace/instrumentation/openai_java/ChatCompletionDecorator.java @@ -51,11 +51,10 @@ public void withChatCompletionCreateParams( } // Keep model_name and output shape stable on error paths where no response is available. - modelName.ifPresent( - str -> { - span.setTag(CommonTags.MODEL_NAME, str); - span.setTag(CommonTags.OUTPUT, Collections.singletonList(LLMObs.LLMMessage.from("", ""))); - }); + modelName.ifPresent(str -> { + span.setTag(CommonTags.MODEL_NAME, str); + span.setTag(CommonTags.OUTPUT, Collections.singletonList(LLMObs.LLMMessage.from("", ""))); + }); span.setTag(CommonTags.SPAN_KIND, Tags.LLMOBS_LLM_SPAN_KIND); @@ -73,12 +72,11 @@ public void withChatCompletionCreateParams( metadata.put("stream", stream); params .streamOptions() - .ifPresent( - v -> { - if (v.includeUsage().orElse(false)) { - metadata.put("stream_options", Collections.singletonMap("include_usage", true)); - } - }); + .ifPresent(v -> { + if (v.includeUsage().orElse(false)) { + metadata.put("stream_options", Collections.singletonMap("include_usage", true)); + } + }); params.topP().ifPresent(v -> metadata.put("top_p", v)); params.frequencyPenalty().ifPresent(v -> metadata.put("frequency_penalty", v)); params.presencePenalty().ifPresent(v -> metadata.put("presence_penalty", v)); @@ -87,22 +85,21 @@ public void withChatCompletionCreateParams( span.setTag(CommonTags.METADATA, metadata); params .toolChoice() - .ifPresent( - toolChoice -> { - String choice = null; - if (toolChoice.isAuto()) { - choice = "auto"; - } else if (toolChoice.isAllowedToolChoice()) { - choice = "allowed_tools"; - } else if (toolChoice.isNamedToolChoice()) { - choice = "function"; - } else if (toolChoice.isNamedToolChoiceCustom()) { - choice = "custom"; - } - if (choice != null) { - metadata.put("tool_choice", choice); - } - }); + .ifPresent(toolChoice -> { + String choice = null; + if (toolChoice.isAuto()) { + choice = "auto"; + } else if (toolChoice.isAllowedToolChoice()) { + choice = "allowed_tools"; + } else if (toolChoice.isNamedToolChoice()) { + choice = "function"; + } else if (toolChoice.isNamedToolChoiceCustom()) { + choice = "custom"; + } + if (choice != null) { + metadata.put("tool_choice", choice); + } + }); List tools = params._tools().asKnown().orElse(Collections.emptyList()); if (!tools.isEmpty()) { @@ -139,9 +136,8 @@ private static Map extractFunctionToolDef(ChatCompletionFunction funcDef.description().ifPresent(desc -> toolDef.put("description", desc)); funcDef .parameters() - .ifPresent( - params -> - toolDef.put("schema", jsonValueMapToObject(params._additionalProperties()))); + .ifPresent(params -> + toolDef.put("schema", jsonValueMapToObject(params._additionalProperties()))); return toolDef; } diff --git a/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/main/java/datadog/trace/instrumentation/openai_java/CompletionDecorator.java b/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/main/java/datadog/trace/instrumentation/openai_java/CompletionDecorator.java index fe78020e4ec..2e17b1aed4f 100644 --- a/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/main/java/datadog/trace/instrumentation/openai_java/CompletionDecorator.java +++ b/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/main/java/datadog/trace/instrumentation/openai_java/CompletionDecorator.java @@ -36,31 +36,27 @@ public void withCompletionCreateParams(AgentSpan span, CompletionCreateParams pa } // Keep model_name and output shape stable on error paths where no response is available. - modelName.ifPresent( - str -> { - span.setTag(CommonTags.MODEL_NAME, str); - span.setTag(CommonTags.OUTPUT, Collections.singletonList(LLMObs.LLMMessage.from("", ""))); - }); + modelName.ifPresent(str -> { + span.setTag(CommonTags.MODEL_NAME, str); + span.setTag(CommonTags.OUTPUT, Collections.singletonList(LLMObs.LLMMessage.from("", ""))); + }); span.setTag(CommonTags.SPAN_KIND, Tags.LLMOBS_LLM_SPAN_KIND); extractPromptText(params) - .ifPresent( - input -> - span.setTag( - CommonTags.INPUT, - Collections.singletonList(LLMObs.LLMMessage.from("", input)))); + .ifPresent(input -> + span.setTag( + CommonTags.INPUT, Collections.singletonList(LLMObs.LLMMessage.from("", input)))); Map metadata = new HashMap<>(); params.maxTokens().ifPresent(v -> metadata.put("max_tokens", v)); params.temperature().ifPresent(v -> metadata.put("temperature", v)); params .streamOptions() - .ifPresent( - v -> { - if (v.includeUsage().orElse(false)) { - metadata.put("stream_options", Collections.singletonMap("include_usage", true)); - } - }); + .ifPresent(v -> { + if (v.includeUsage().orElse(false)) { + metadata.put("stream_options", Collections.singletonMap("include_usage", true)); + } + }); span.setTag(CommonTags.METADATA, metadata); } @@ -117,13 +113,12 @@ public void withCompletions(AgentSpan span, List completions) { ._choices() .asKnown() .orElse(Collections.emptyList()) - .forEach( - choice -> { - long index = choice._index().asKnown().orElse(0L); - textByChoiceIndex - .computeIfAbsent(index, k -> new StringBuilder()) - .append(choice._text().asString().orElse("")); - }); + .forEach(choice -> { + long index = choice._index().asKnown().orElse(0L); + textByChoiceIndex + .computeIfAbsent(index, k -> new StringBuilder()) + .append(choice._text().asString().orElse("")); + }); } List output = diff --git a/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/main/java/datadog/trace/instrumentation/openai_java/HttpResponseWrapper.java b/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/main/java/datadog/trace/instrumentation/openai_java/HttpResponseWrapper.java index 1e8f7493930..3785c971855 100644 --- a/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/main/java/datadog/trace/instrumentation/openai_java/HttpResponseWrapper.java +++ b/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/main/java/datadog/trace/instrumentation/openai_java/HttpResponseWrapper.java @@ -28,14 +28,13 @@ public static CompletableFuture> wrapFuture( BiConsumer decorate) { return future .thenApply(response -> wrap(response, span, decorate)) - .whenComplete( - (_r, t) -> { - if (t != null) { - // Only finish if there was an error; otherwise, HttpResponseWrapper.close will - // finish it later. - DECORATE.finishSpan(span, t); - } - }); + .whenComplete((_r, t) -> { + if (t != null) { + // Only finish if there was an error; otherwise, HttpResponseWrapper.close will + // finish it later. + DECORATE.finishSpan(span, t); + } + }); } private final HttpResponseFor delegate; diff --git a/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/main/java/datadog/trace/instrumentation/openai_java/HttpStreamResponseWrapper.java b/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/main/java/datadog/trace/instrumentation/openai_java/HttpStreamResponseWrapper.java index cb715745303..a3ed64e15f0 100644 --- a/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/main/java/datadog/trace/instrumentation/openai_java/HttpStreamResponseWrapper.java +++ b/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/main/java/datadog/trace/instrumentation/openai_java/HttpStreamResponseWrapper.java @@ -29,12 +29,11 @@ public static CompletableFuture>> wrapFutu BiConsumer> decorate) { return future .thenApply(r -> wrap(r, span, decorate)) - .whenComplete( - (_r, err) -> { - if (err != null) { - DECORATE.finishSpan(span, err); - } - }); + .whenComplete((_r, err) -> { + if (err != null) { + DECORATE.finishSpan(span, err); + } + }); } private final HttpResponseFor> delegate; diff --git a/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/main/java/datadog/trace/instrumentation/openai_java/ResponseDecorator.java b/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/main/java/datadog/trace/instrumentation/openai_java/ResponseDecorator.java index 82f4a44f025..02dcd3ff1f7 100644 --- a/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/main/java/datadog/trace/instrumentation/openai_java/ResponseDecorator.java +++ b/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/main/java/datadog/trace/instrumentation/openai_java/ResponseDecorator.java @@ -75,10 +75,9 @@ public void withResponseCreateParams(AgentSpan span, ResponseCreateParams params params ._instructions() .asString() - .ifPresent( - instructions -> { - inputMessages.add(LLMObs.LLMMessage.from("system", instructions)); - }); + .ifPresent(instructions -> { + inputMessages.add(LLMObs.LLMMessage.from("system", instructions)); + }); Optional textOpt = params._input().asString(); if (textOpt.isPresent()) { @@ -182,9 +181,8 @@ private Map extractFunctionToolDefinition(FunctionTool functionT functionTool.description().ifPresent(desc -> toolDef.put("description", desc)); functionTool .parameters() - .ifPresent( - parameters -> - toolDef.put("schema", jsonValueMapToObject(parameters._additionalProperties()))); + .ifPresent(parameters -> + toolDef.put("schema", jsonValueMapToObject(parameters._additionalProperties()))); return toolDef; } @@ -540,22 +538,21 @@ private void withResponse(AgentSpan span, Response response, boolean stream) { response ._toolChoice() .asKnown() - .ifPresent( - toolChoice -> { - toolChoice - .options() - .flatMap(v -> v._value().asString()) - .ifPresent(v -> metadata.put("tool_choice", v)); - if (!metadata.containsKey("tool_choice")) { - toolChoice - .types() - .map(v -> v.type().toString().toLowerCase()) - .ifPresent(v -> metadata.put("tool_choice", v)); - } - if (!metadata.containsKey("tool_choice") && toolChoice.function().isPresent()) { - metadata.put("tool_choice", "function"); - } - }); + .ifPresent(toolChoice -> { + toolChoice + .options() + .flatMap(v -> v._value().asString()) + .ifPresent(v -> metadata.put("tool_choice", v)); + if (!metadata.containsKey("tool_choice")) { + toolChoice + .types() + .map(v -> v.type().toString().toLowerCase()) + .ifPresent(v -> metadata.put("tool_choice", v)); + } + if (!metadata.containsKey("tool_choice") && toolChoice.function().isPresent()) { + metadata.put("tool_choice", "function"); + } + }); response ._truncation() @@ -567,29 +564,27 @@ private void withResponse(AgentSpan span, Response response, boolean stream) { response ._text() .asKnown() - .ifPresent( - textConfig -> { - textConfig - ._format() - .asKnown() - .ifPresent( - format -> { - Map formatMap = new HashMap<>(); - if (format.text().isPresent()) { - formatMap.put("type", "text"); - } else if (format.jsonSchema().isPresent()) { - formatMap.put("type", "json_schema"); - } else if (format.jsonObject().isPresent()) { - formatMap.put("type", "json_object"); - } - textMap.put("format", formatMap); - }); - textConfig - ._verbosity() - .asKnown() - .flatMap(verbosity -> verbosity._value().asString()) - .ifPresent(verbosity -> textMap.put("verbosity", verbosity)); - }); + .ifPresent(textConfig -> { + textConfig + ._format() + .asKnown() + .ifPresent(format -> { + Map formatMap = new HashMap<>(); + if (format.text().isPresent()) { + formatMap.put("type", "text"); + } else if (format.jsonSchema().isPresent()) { + formatMap.put("type", "json_schema"); + } else if (format.jsonObject().isPresent()) { + formatMap.put("type", "json_object"); + } + textMap.put("format", formatMap); + }); + textConfig + ._verbosity() + .asKnown() + .flatMap(verbosity -> verbosity._value().asString()) + .ifPresent(verbosity -> textMap.put("verbosity", verbosity)); + }); if (!textMap.isEmpty()) { metadata.put("text", textMap); } @@ -690,16 +685,15 @@ private List extractInputMessagesForPromptTracking( response ._instructions() .asKnown() - .ifPresent( - instructions -> { - for (ResponseInputItem item : - instructions.inputItemList().orElse(Collections.emptyList())) { - LLMObs.LLMMessage message = extractInputItemMessage(item); - if (message != null) { - messages.add(message); - } - } - }); + .ifPresent(instructions -> { + for (ResponseInputItem item : + instructions.inputItemList().orElse(Collections.emptyList())) { + LLMObs.LLMMessage message = extractInputItemMessage(item); + if (message != null) { + messages.add(message); + } + } + }); return messages; } diff --git a/dd-java-agent/instrumentation/opentelemetry/opentelemetry-1.4/src/test/java/opentelemetry14/OpenTelemetry14ConventionsTest.java b/dd-java-agent/instrumentation/opentelemetry/opentelemetry-1.4/src/test/java/opentelemetry14/OpenTelemetry14ConventionsTest.java index 51d4d59452a..f92955a782e 100644 --- a/dd-java-agent/instrumentation/opentelemetry/opentelemetry-1.4/src/test/java/opentelemetry14/OpenTelemetry14ConventionsTest.java +++ b/dd-java-agent/instrumentation/opentelemetry/opentelemetry-1.4/src/test/java/opentelemetry14/OpenTelemetry14ConventionsTest.java @@ -128,13 +128,12 @@ void testSpanNameConventions( List tagMatchers = new ArrayList<>(); tagMatchers.add(defaultTags()); tagMatchers.add(tag(SPAN_KIND, is(expectedSpanKindTag))); - attributes.forEach( - (key, value) -> { - if (!OPERATION_NAME_SPECIFIC_ATTRIBUTE.equals(key)) { - String tagName = CANONICAL_TAG_NAMES.getOrDefault(key, key); - tagMatchers.add(tag(tagName, is(value))); - } - }); + attributes.forEach((key, value) -> { + if (!OPERATION_NAME_SPECIFIC_ATTRIBUTE.equals(key)) { + String tagName = CANONICAL_TAG_NAMES.getOrDefault(key, key); + tagMatchers.add(tag(tagName, is(value))); + } + }); assertTraces( trace( diff --git a/dd-java-agent/instrumentation/opentelemetry/opentelemetry-1.4/src/test/java/opentelemetry14/OpenTelemetry14Test.java b/dd-java-agent/instrumentation/opentelemetry/opentelemetry-1.4/src/test/java/opentelemetry14/OpenTelemetry14Test.java index c7b91fc2da7..8f3f2ca35ff 100644 --- a/dd-java-agent/instrumentation/opentelemetry/opentelemetry-1.4/src/test/java/opentelemetry14/OpenTelemetry14Test.java +++ b/dd-java-agent/instrumentation/opentelemetry/opentelemetry-1.4/src/test/java/opentelemetry14/OpenTelemetry14Test.java @@ -289,18 +289,17 @@ void testConcurrentAddEvents() throws Exception { List threads = new ArrayList<>(); for (int t = 0; t < threadCount; t++) { Thread thread = - new Thread( - () -> { - try { - start.await(); - } catch (InterruptedException e) { - Thread.currentThread().interrupt(); - return; - } - for (int i = 0; i < eventsPerThread; i++) { - span.addEvent("event"); - } - }); + new Thread(() -> { + try { + start.await(); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + return; + } + for (int i = 0; i < eventsPerThread; i++) { + span.addEvent("event"); + } + }); thread.start(); threads.add(thread); } diff --git a/dd-java-agent/instrumentation/opentelemetry/opentelemetry-1.47/src/test/java/opentelemetry147/metrics/JvmOtlpRuntimeMetricsForkedTest.java b/dd-java-agent/instrumentation/opentelemetry/opentelemetry-1.47/src/test/java/opentelemetry147/metrics/JvmOtlpRuntimeMetricsForkedTest.java index e4beefeab46..ebe0a4e4748 100644 --- a/dd-java-agent/instrumentation/opentelemetry/opentelemetry-1.47/src/test/java/opentelemetry147/metrics/JvmOtlpRuntimeMetricsForkedTest.java +++ b/dd-java-agent/instrumentation/opentelemetry/opentelemetry-1.47/src/test/java/opentelemetry147/metrics/JvmOtlpRuntimeMetricsForkedTest.java @@ -96,11 +96,10 @@ void jvmGcDurationDataPointsOmitGcCauseWhenExperimentalDisabled() throws Interru assertFalse(points.isEmpty(), "jvm.gc.duration should have at least one data point"); assertTrue( points.stream() - .allMatch( - p -> - p.attrs.containsKey("jvm.gc.name") - && p.attrs.containsKey("jvm.gc.action") - && !p.attrs.containsKey("jvm.gc.cause")), + .allMatch(p -> + p.attrs.containsKey("jvm.gc.name") + && p.attrs.containsKey("jvm.gc.action") + && !p.attrs.containsKey("jvm.gc.cause")), "jvm.gc.duration data points must carry jvm.gc.name and jvm.gc.action, but not jvm.gc.cause" + " when experimental disabled"); } diff --git a/dd-java-agent/instrumentation/opentelemetry/opentelemetry-1.47/src/test/java/opentelemetry147/metrics/JvmOtlpRuntimeMetricsTest.java b/dd-java-agent/instrumentation/opentelemetry/opentelemetry-1.47/src/test/java/opentelemetry147/metrics/JvmOtlpRuntimeMetricsTest.java index 9aa86d9c5cc..1fabff2a633 100644 --- a/dd-java-agent/instrumentation/opentelemetry/opentelemetry-1.47/src/test/java/opentelemetry147/metrics/JvmOtlpRuntimeMetricsTest.java +++ b/dd-java-agent/instrumentation/opentelemetry/opentelemetry-1.47/src/test/java/opentelemetry147/metrics/JvmOtlpRuntimeMetricsTest.java @@ -123,10 +123,9 @@ void jvmMemoryUsedHeapValueIsPositive() { assertNotNull(points, "jvm.memory.used should have data points"); DataPointEntry heapAggregate = points.stream() - .filter( - p -> - "heap".equals(p.attrs.get("jvm.memory.type")) - && p.attrs.get("jvm.memory.pool.name") == null) + .filter(p -> + "heap".equals(p.attrs.get("jvm.memory.type")) + && p.attrs.get("jvm.memory.pool.name") == null) .findFirst() .orElse(null); assertNotNull(heapAggregate, "jvm.memory.used should have a heap aggregate data point"); @@ -203,10 +202,9 @@ void jvmMemoryInitHeapAggregateIsPositive() { assertNotNull(points, "jvm.memory.init should have data points"); DataPointEntry heapAggregate = points.stream() - .filter( - p -> - "heap".equals(p.attrs.get("jvm.memory.type")) - && p.attrs.get("jvm.memory.pool.name") == null) + .filter(p -> + "heap".equals(p.attrs.get("jvm.memory.type")) + && p.attrs.get("jvm.memory.pool.name") == null) .findFirst() .orElse(null); assertNotNull(heapAggregate, "jvm.memory.init should have a heap aggregate data point"); diff --git a/dd-java-agent/instrumentation/opentelemetry/opentelemetry-1.47/src/test/java/opentelemetry147/metrics/OpenTelemetryMetricsTest.java b/dd-java-agent/instrumentation/opentelemetry/opentelemetry-1.47/src/test/java/opentelemetry147/metrics/OpenTelemetryMetricsTest.java index a6332ae9267..9b9490d352d 100644 --- a/dd-java-agent/instrumentation/opentelemetry/opentelemetry-1.47/src/test/java/opentelemetry147/metrics/OpenTelemetryMetricsTest.java +++ b/dd-java-agent/instrumentation/opentelemetry/opentelemetry-1.47/src/test/java/opentelemetry147/metrics/OpenTelemetryMetricsTest.java @@ -202,11 +202,10 @@ void testObservableLongCounter() { AutoCloseable observable = meter .counterBuilder("observable-long-counter") - .buildWithCallback( - m -> { - m.record(1); - m.record(2, SOME_ATTRIBUTES); - }); + .buildWithCallback(m -> { + m.record(1); + m.record(2, SOME_ATTRIBUTES); + }); OtelMetricRegistry.INSTANCE.collectMetrics(meterReader); assertEquals(1L, points.get("test:observable-long-counter")); @@ -228,11 +227,10 @@ void testObservableDoubleCounter() { meter .counterBuilder("observable-double-counter") .ofDoubles() - .buildWithCallback( - m -> { - m.record(1.2); - m.record(3.4, SOME_ATTRIBUTES); - }); + .buildWithCallback(m -> { + m.record(1.2); + m.record(3.4, SOME_ATTRIBUTES); + }); OtelMetricRegistry.INSTANCE.collectMetrics(meterReader); assertEquals(1.2, points.get("test:observable-double-counter")); @@ -253,11 +251,10 @@ void testObservableLongUpDownCounter() { AutoCloseable observable = meter .upDownCounterBuilder("observable-long-up-down-counter") - .buildWithCallback( - m -> { - m.record(1); - m.record(2, SOME_ATTRIBUTES); - }); + .buildWithCallback(m -> { + m.record(1); + m.record(2, SOME_ATTRIBUTES); + }); OtelMetricRegistry.INSTANCE.collectMetrics(meterReader); assertEquals(1L, points.get("test:observable-long-up-down-counter")); @@ -279,11 +276,10 @@ void testObservableDoubleUpDownCounter() { meter .upDownCounterBuilder("observable-double-up-down-counter") .ofDoubles() - .buildWithCallback( - m -> { - m.record(1.2); - m.record(3.4, SOME_ATTRIBUTES); - }); + .buildWithCallback(m -> { + m.record(1.2); + m.record(3.4, SOME_ATTRIBUTES); + }); OtelMetricRegistry.INSTANCE.collectMetrics(meterReader); assertEquals(1.2, points.get("test:observable-double-up-down-counter")); @@ -305,11 +301,10 @@ void testObservableLongGauge() { meter .gaugeBuilder("observable-long-gauge") .ofLongs() - .buildWithCallback( - m -> { - m.record(1); - m.record(2, SOME_ATTRIBUTES); - }); + .buildWithCallback(m -> { + m.record(1); + m.record(2, SOME_ATTRIBUTES); + }); OtelMetricRegistry.INSTANCE.collectMetrics(meterReader); assertEquals(1L, points.get("test:observable-long-gauge")); @@ -323,11 +318,10 @@ void testObservableDoubleGauge() { AutoCloseable observable = meter .gaugeBuilder("observable-double-gauge") - .buildWithCallback( - m -> { - m.record(1.2); - m.record(3.4, SOME_ATTRIBUTES); - }); + .buildWithCallback(m -> { + m.record(1.2); + m.record(3.4, SOME_ATTRIBUTES); + }); OtelMetricRegistry.INSTANCE.collectMetrics(meterReader); assertEquals(1.2, points.get("test:observable-double-gauge")); diff --git a/dd-java-agent/instrumentation/opentelemetry/opentelemetry-annotations-1.20/src/latestDepTest/java/annotatedsample/latest/TracedMethods.java b/dd-java-agent/instrumentation/opentelemetry/opentelemetry-annotations-1.20/src/latestDepTest/java/annotatedsample/latest/TracedMethods.java index 07f5cb02aab..999435b7500 100644 --- a/dd-java-agent/instrumentation/opentelemetry/opentelemetry-annotations-1.20/src/latestDepTest/java/annotatedsample/latest/TracedMethods.java +++ b/dd-java-agent/instrumentation/opentelemetry/opentelemetry-annotations-1.20/src/latestDepTest/java/annotatedsample/latest/TracedMethods.java @@ -97,40 +97,36 @@ public String call() { @WithSpan public static CompletableFuture traceAsyncCompletableFuture(CountDownLatch latch) { - return CompletableFuture.supplyAsync( - () -> { - await(latch); - return "hello!"; - }); + return CompletableFuture.supplyAsync(() -> { + await(latch); + return "hello!"; + }); } @WithSpan public static CompletableFuture traceAsyncFailingCompletableFuture( CountDownLatch latch, RuntimeException exception) { - return CompletableFuture.supplyAsync( - () -> { - await(latch); - throw exception; - }); + return CompletableFuture.supplyAsync(() -> { + await(latch); + throw exception; + }); } @WithSpan public static CompletionStage traceAsyncCompletionStage(CountDownLatch latch) { - return CompletableFuture.supplyAsync( - () -> { - await(latch); - return "hello!"; - }); + return CompletableFuture.supplyAsync(() -> { + await(latch); + return "hello!"; + }); } @WithSpan public static CompletionStage traceAsyncFailingCompletionStage( CountDownLatch latch, RuntimeException exception) { - return CompletableFuture.supplyAsync( - () -> { - await(latch); - throw exception; - }); + return CompletableFuture.supplyAsync(() -> { + await(latch); + throw exception; + }); } @WithSpan diff --git a/dd-java-agent/instrumentation/opentelemetry/opentelemetry-annotations-1.20/src/test/java/annotatedsample/TracedMethods.java b/dd-java-agent/instrumentation/opentelemetry/opentelemetry-annotations-1.20/src/test/java/annotatedsample/TracedMethods.java index ff57b7051bf..63eccd48785 100644 --- a/dd-java-agent/instrumentation/opentelemetry/opentelemetry-annotations-1.20/src/test/java/annotatedsample/TracedMethods.java +++ b/dd-java-agent/instrumentation/opentelemetry/opentelemetry-annotations-1.20/src/test/java/annotatedsample/TracedMethods.java @@ -98,40 +98,36 @@ public String call() { @WithSpan public static CompletableFuture traceAsyncCompletableFuture(CountDownLatch latch) { - return CompletableFuture.supplyAsync( - () -> { - await(latch); - return "hello!"; - }); + return CompletableFuture.supplyAsync(() -> { + await(latch); + return "hello!"; + }); } @WithSpan public static CompletableFuture traceAsyncFailingCompletableFuture( CountDownLatch latch, RuntimeException exception) { - return CompletableFuture.supplyAsync( - () -> { - await(latch); - throw exception; - }); + return CompletableFuture.supplyAsync(() -> { + await(latch); + throw exception; + }); } @WithSpan public static CompletionStage traceAsyncCompletionStage(CountDownLatch latch) { - return CompletableFuture.supplyAsync( - () -> { - await(latch); - return "hello!"; - }); + return CompletableFuture.supplyAsync(() -> { + await(latch); + return "hello!"; + }); } @WithSpan public static CompletionStage traceAsyncFailingCompletionStage( CountDownLatch latch, RuntimeException exception) { - return CompletableFuture.supplyAsync( - () -> { - await(latch); - throw exception; - }); + return CompletableFuture.supplyAsync(() -> { + await(latch); + throw exception; + }); } @WithSpan diff --git a/dd-java-agent/instrumentation/r2dbc/r2dbc-1.0/src/test/java/datadog/trace/instrumentation/r2dbc/R2dbcFilteredResultTest.java b/dd-java-agent/instrumentation/r2dbc/r2dbc-1.0/src/test/java/datadog/trace/instrumentation/r2dbc/R2dbcFilteredResultTest.java index 133f0b44c35..e1ef98de4b5 100644 --- a/dd-java-agent/instrumentation/r2dbc/r2dbc-1.0/src/test/java/datadog/trace/instrumentation/r2dbc/R2dbcFilteredResultTest.java +++ b/dd-java-agent/instrumentation/r2dbc/r2dbc-1.0/src/test/java/datadog/trace/instrumentation/r2dbc/R2dbcFilteredResultTest.java @@ -37,14 +37,11 @@ void filteredResultConsumptionFinishesQuerySpan() { assertEquals( singletonList(42), Flux.from(connection.createStatement("SELECT 42").execute()) - .flatMap( - result -> - result - .filter(segment -> segment instanceof Result.RowSegment) - .flatMap( - segment -> - Mono.just( - ((Result.RowSegment) segment).row().get(0, Integer.class)))) + .flatMap(result -> + result + .filter(segment -> segment instanceof Result.RowSegment) + .flatMap(segment -> + Mono.just(((Result.RowSegment) segment).row().get(0, Integer.class)))) .collectList() .block(TIMEOUT)); } finally { diff --git a/dd-java-agent/instrumentation/ratpack-1.5/src/main/java/datadog/trace/instrumentation/ratpack/TracingHandler.java b/dd-java-agent/instrumentation/ratpack-1.5/src/main/java/datadog/trace/instrumentation/ratpack/TracingHandler.java index 7c5ad8b19b2..60fd7a3a647 100644 --- a/dd-java-agent/instrumentation/ratpack-1.5/src/main/java/datadog/trace/instrumentation/ratpack/TracingHandler.java +++ b/dd-java-agent/instrumentation/ratpack-1.5/src/main/java/datadog/trace/instrumentation/ratpack/TracingHandler.java @@ -48,19 +48,18 @@ public void handle(final Context ctx) { try (final ContextScope scope = activateSpan(ratpackSpan)) { ctx.getResponse() - .beforeSend( - response -> { - try (final ContextScope ignored = activateSpan(ratpackSpan)) { - if (nettySpan != null) { - // Rename the netty span resource name with the ratpack route. - DECORATE.onContext(nettySpan, ctx); - } - DECORATE.onResponse(ratpackSpan, response); - DECORATE.onContext(ratpackSpan, ctx); - DECORATE.beforeFinish(ratpackSpan); - ratpackSpan.finish(); - } - }); + .beforeSend(response -> { + try (final ContextScope ignored = activateSpan(ratpackSpan)) { + if (nettySpan != null) { + // Rename the netty span resource name with the ratpack route. + DECORATE.onContext(nettySpan, ctx); + } + DECORATE.onResponse(ratpackSpan, response); + DECORATE.onContext(ratpackSpan, ctx); + DECORATE.beforeFinish(ratpackSpan); + ratpackSpan.finish(); + } + }); setFinalizer = true; diff --git a/dd-java-agent/instrumentation/reactor-core-3.1/src/latestDepTest/java/annotatedsample/ReactorTracedMethods.java b/dd-java-agent/instrumentation/reactor-core-3.1/src/latestDepTest/java/annotatedsample/ReactorTracedMethods.java index a3450a31e20..36a78853275 100644 --- a/dd-java-agent/instrumentation/reactor-core-3.1/src/latestDepTest/java/annotatedsample/ReactorTracedMethods.java +++ b/dd-java-agent/instrumentation/reactor-core-3.1/src/latestDepTest/java/annotatedsample/ReactorTracedMethods.java @@ -12,39 +12,35 @@ public class ReactorTracedMethods { @WithSpan public static Mono traceAsyncMono(CountDownLatch latch) { - return Mono.fromCallable( - () -> { - await(latch); - return "hello"; - }); + return Mono.fromCallable(() -> { + await(latch); + return "hello"; + }); } @WithSpan public static Mono traceAsyncFailingMono(CountDownLatch latch, Exception exception) { - return Mono.fromCallable( - () -> { - await(latch); - throw exception; - }); + return Mono.fromCallable(() -> { + await(latch); + throw exception; + }); } @WithSpan public static Flux traceAsyncFlux(CountDownLatch latch) { - return Flux.create( - emitter -> { - await(latch); - emitter.next("hello"); - emitter.complete(); - }); + return Flux.create(emitter -> { + await(latch); + emitter.next("hello"); + emitter.complete(); + }); } @WithSpan public static Flux traceAsyncFailingFlux(CountDownLatch latch, Exception exception) { - return Flux.create( - emitter -> { - await(latch); - emitter.error(exception); - }); + return Flux.create(emitter -> { + await(latch); + emitter.error(exception); + }); } private static void await(CountDownLatch latch) { diff --git a/dd-java-agent/instrumentation/reactor-core-3.1/src/test/java/annotatedsample/ReactorTracedMethods.java b/dd-java-agent/instrumentation/reactor-core-3.1/src/test/java/annotatedsample/ReactorTracedMethods.java index a3450a31e20..36a78853275 100644 --- a/dd-java-agent/instrumentation/reactor-core-3.1/src/test/java/annotatedsample/ReactorTracedMethods.java +++ b/dd-java-agent/instrumentation/reactor-core-3.1/src/test/java/annotatedsample/ReactorTracedMethods.java @@ -12,39 +12,35 @@ public class ReactorTracedMethods { @WithSpan public static Mono traceAsyncMono(CountDownLatch latch) { - return Mono.fromCallable( - () -> { - await(latch); - return "hello"; - }); + return Mono.fromCallable(() -> { + await(latch); + return "hello"; + }); } @WithSpan public static Mono traceAsyncFailingMono(CountDownLatch latch, Exception exception) { - return Mono.fromCallable( - () -> { - await(latch); - throw exception; - }); + return Mono.fromCallable(() -> { + await(latch); + throw exception; + }); } @WithSpan public static Flux traceAsyncFlux(CountDownLatch latch) { - return Flux.create( - emitter -> { - await(latch); - emitter.next("hello"); - emitter.complete(); - }); + return Flux.create(emitter -> { + await(latch); + emitter.next("hello"); + emitter.complete(); + }); } @WithSpan public static Flux traceAsyncFailingFlux(CountDownLatch latch, Exception exception) { - return Flux.create( - emitter -> { - await(latch); - emitter.error(exception); - }); + return Flux.create(emitter -> { + await(latch); + emitter.error(exception); + }); } private static void await(CountDownLatch latch) { diff --git a/dd-java-agent/instrumentation/reactor-netty-1.0/src/main/java/datadog/trace/instrumentation/reactor/netty/CaptureConnectSpan.java b/dd-java-agent/instrumentation/reactor-netty-1.0/src/main/java/datadog/trace/instrumentation/reactor/netty/CaptureConnectSpan.java index 41daf101e96..45a76db7eb5 100644 --- a/dd-java-agent/instrumentation/reactor-netty-1.0/src/main/java/datadog/trace/instrumentation/reactor/netty/CaptureConnectSpan.java +++ b/dd-java-agent/instrumentation/reactor-netty-1.0/src/main/java/datadog/trace/instrumentation/reactor/netty/CaptureConnectSpan.java @@ -12,14 +12,13 @@ public class CaptureConnectSpan @Override public Mono apply(Mono mono) { - return mono.contextWrite( - reactorCtx -> { - final Context context = Context.current(); - if (context != Context.root()) { - return reactorCtx.put(CONNECT_CONTEXT, context); - } else { - return reactorCtx; - } - }); + return mono.contextWrite(reactorCtx -> { + final Context context = Context.current(); + if (context != Context.root()) { + return reactorCtx.put(CONNECT_CONTEXT, context); + } else { + return reactorCtx; + } + }); } } diff --git a/dd-java-agent/instrumentation/reactor-netty-1.0/src/test/java/ReactorNettyBaggagePropagationTest.java b/dd-java-agent/instrumentation/reactor-netty-1.0/src/test/java/ReactorNettyBaggagePropagationTest.java index 5a4c4451d21..e114c6cf54b 100644 --- a/dd-java-agent/instrumentation/reactor-netty-1.0/src/test/java/ReactorNettyBaggagePropagationTest.java +++ b/dd-java-agent/instrumentation/reactor-netty-1.0/src/test/java/ReactorNettyBaggagePropagationTest.java @@ -118,25 +118,24 @@ void idlePooledChannelDoesNotReactivateRequestContext(boolean withParent) throws HttpClient client = HttpClient.create(connections) .runOn(eventLoops) - .doOnConnected( - connection -> { - channel.set(connection.channel()); - connection - .channel() - .pipeline() - .addLast( - new ChannelInboundHandlerAdapter() { - @Override - public void userEventTriggered(ChannelHandlerContext ctx, Object event) - throws Exception { - if (event == idleEvent) { - eventSpan.set(AgentTracer.activeSpan()); - eventBaggage.set(Baggage.fromContext(Context.current())); - } - super.userEventTriggered(ctx, event); - } - }); - }); + .doOnConnected(connection -> { + channel.set(connection.channel()); + connection + .channel() + .pipeline() + .addLast( + new ChannelInboundHandlerAdapter() { + @Override + public void userEventTriggered(ChannelHandlerContext ctx, Object event) + throws Exception { + if (event == idleEvent) { + eventSpan.set(AgentTracer.activeSpan()); + eventBaggage.set(Baggage.fromContext(Context.current())); + } + super.userEventTriggered(ctx, event); + } + }); + }); Channel firstChannel = null; try { for (int request = 0; request < 2; request++) { @@ -176,13 +175,12 @@ public void userEventTriggered(ChannelHandlerContext ctx, Object event) } currentChannel .eventLoop() - .submit( - () -> { - assertNull(AgentTracer.activeSpan()); - assertNull(currentChannel.attr(CONTEXT_ATTRIBUTE_KEY).get()); - assertNull(currentChannel.attr(CLIENT_PARENT_ATTRIBUTE_KEY).get()); - currentChannel.pipeline().fireUserEventTriggered(idleEvent); - }) + .submit(() -> { + assertNull(AgentTracer.activeSpan()); + assertNull(currentChannel.attr(CONTEXT_ATTRIBUTE_KEY).get()); + assertNull(currentChannel.attr(CLIENT_PARENT_ATTRIBUTE_KEY).get()); + currentChannel.pipeline().fireUserEventTriggered(idleEvent); + }) .get(10, TimeUnit.SECONDS); assertNull(eventSpan.get(), "an idle channel event must not activate the previous request"); assertNull(eventBaggage.get(), "an idle channel event must not reactivate request baggage"); @@ -206,31 +204,27 @@ void failedRequestBodyDoesNotRetainParentAfterChannelClose() throws Exception { HttpClient client = HttpClient.create(connections) .runOn(eventLoops) - .doOnConnected( - connection -> { - channel.set(connection.channel()); - connection - .channel() - .pipeline() - .addFirst( - new ChannelInboundHandlerAdapter() { - @Override - public void channelInactive(ChannelHandlerContext ctx) - throws Exception { - try { - super.channelInactive(ctx); - } finally { - inactive.countDown(); - } - } - }); - }) - .doOnDisconnected( - connection -> - disconnectSpan.compareAndSet( - null, - AgentSpan.fromContext( - connection.channel().attr(CONTEXT_ATTRIBUTE_KEY).get()))); + .doOnConnected(connection -> { + channel.set(connection.channel()); + connection + .channel() + .pipeline() + .addFirst( + new ChannelInboundHandlerAdapter() { + @Override + public void channelInactive(ChannelHandlerContext ctx) throws Exception { + try { + super.channelInactive(ctx); + } finally { + inactive.countDown(); + } + } + }); + }) + .doOnDisconnected(connection -> + disconnectSpan.compareAndSet( + null, + AgentSpan.fromContext(connection.channel().attr(CONTEXT_ATTRIBUTE_KEY).get()))); AgentSpan parent = AgentTracer.startSpan("test", "failed-body-parent"); IllegalStateException failure = new IllegalStateException("request body failed"); try { @@ -243,10 +237,9 @@ public void channelInactive(ChannelHandlerContext ctx) client .post() .uri(baseUrl + "/fail-body") - .send( - (request, outbound) -> - outbound.sendString( - Flux.concat(Mono.just("payload"), Mono.error(failure)))) + .send((request, outbound) -> + outbound.sendString( + Flux.concat(Mono.just("payload"), Mono.error(failure)))) .responseContent() .aggregate() .asString() @@ -261,11 +254,10 @@ public void channelInactive(ChannelHandlerContext ctx) channel .get() .eventLoop() - .submit( - () -> { - assertNull(channel.get().attr(CONTEXT_ATTRIBUTE_KEY).get()); - assertNull(channel.get().attr(CLIENT_PARENT_ATTRIBUTE_KEY).get()); - }) + .submit(() -> { + assertNull(channel.get().attr(CONTEXT_ATTRIBUTE_KEY).get()); + assertNull(channel.get().attr(CLIENT_PARENT_ATTRIBUTE_KEY).get()); + }) .get(10, TimeUnit.SECONDS); writer.waitForTraces(1); long parentId = parent.getSpanId(); diff --git a/dd-java-agent/instrumentation/resilience4j/resilience4j-2.0/src/main/java/datadog/trace/instrumentation/resilience4j/WrapperWithContext.java b/dd-java-agent/instrumentation/resilience4j/resilience4j-2.0/src/main/java/datadog/trace/instrumentation/resilience4j/WrapperWithContext.java index 98236acbe1c..b43e3e89d05 100644 --- a/dd-java-agent/instrumentation/resilience4j/resilience4j-2.0/src/main/java/datadog/trace/instrumentation/resilience4j/WrapperWithContext.java +++ b/dd-java-agent/instrumentation/resilience4j/resilience4j-2.0/src/main/java/datadog/trace/instrumentation/resilience4j/WrapperWithContext.java @@ -215,10 +215,9 @@ public CompletionStage get() { try (ContextScope ignore = activateScope()) { return delegate .get() - .whenComplete( - (v, e) -> { - finishSpanIfNeeded(); - }); + .whenComplete((v, e) -> { + finishSpanIfNeeded(); + }); } } } @@ -239,10 +238,9 @@ public Future get() { Future future = delegate.get(); if (future instanceof CompletableFuture) { ((CompletableFuture) future) - .whenComplete( - (v, e) -> { - finishSpanIfNeeded(); - }); + .whenComplete((v, e) -> { + finishSpanIfNeeded(); + }); return future; } return new FinishOnGetFuture<>(future, this); diff --git a/dd-java-agent/instrumentation/resilience4j/resilience4j-reactor-2.0/src/main/java/datadog/trace/instrumentation/resilience4j/ReactorHelper.java b/dd-java-agent/instrumentation/resilience4j/resilience4j-reactor-2.0/src/main/java/datadog/trace/instrumentation/resilience4j/ReactorHelper.java index 4a42aeef8fa..3cb469beb0f 100644 --- a/dd-java-agent/instrumentation/resilience4j/resilience4j-reactor-2.0/src/main/java/datadog/trace/instrumentation/resilience4j/ReactorHelper.java +++ b/dd-java-agent/instrumentation/resilience4j/resilience4j-reactor-2.0/src/main/java/datadog/trace/instrumentation/resilience4j/ReactorHelper.java @@ -38,7 +38,7 @@ public static BiConsumer, AgentSpan> putIfAbsentInto( public static Function, Publisher> wrapFunction( Function, Publisher> operator, BiConsumer, AgentSpan> attachContext) { - return (value) -> { + return value -> { AgentSpan current = Resilience4jSpan.current(); AgentSpan owned = current == null ? Resilience4jSpan.start() : null; Resilience4jSpanDecorator spanDecorator = Resilience4jSpanDecorator.DECORATE; diff --git a/dd-java-agent/instrumentation/rxjava/rxjava-2.0/src/test/java/annotatedsample/RxJava2TracedMethods.java b/dd-java-agent/instrumentation/rxjava/rxjava-2.0/src/test/java/annotatedsample/RxJava2TracedMethods.java index 5036f5e0ff7..2ede5d7b015 100644 --- a/dd-java-agent/instrumentation/rxjava/rxjava-2.0/src/test/java/annotatedsample/RxJava2TracedMethods.java +++ b/dd-java-agent/instrumentation/rxjava/rxjava-2.0/src/test/java/annotatedsample/RxJava2TracedMethods.java @@ -19,85 +19,76 @@ public static Completable traceAsyncCompletable(CountDownLatch latch) { @WithSpan public static Completable traceAsyncFailingCompletable( CountDownLatch latch, Exception exception) { - return Completable.fromCallable( - () -> { - await(latch); - throw exception; - }); + return Completable.fromCallable(() -> { + await(latch); + throw exception; + }); } @WithSpan public static Maybe traceAsyncMaybe(CountDownLatch latch) { - return Maybe.fromCallable( - () -> { - await(latch); - return "hello"; - }); + return Maybe.fromCallable(() -> { + await(latch); + return "hello"; + }); } @WithSpan public static Maybe traceAsyncFailingMaybe(CountDownLatch latch, Exception exception) { - return Maybe.fromCallable( - () -> { - await(latch); - throw exception; - }); + return Maybe.fromCallable(() -> { + await(latch); + throw exception; + }); } @WithSpan public static Single traceAsyncSingle(CountDownLatch latch) { - return Single.fromCallable( - () -> { - await(latch); - return "hello"; - }); + return Single.fromCallable(() -> { + await(latch); + return "hello"; + }); } @WithSpan public static Single traceAsyncFailingSingle(CountDownLatch latch, Exception exception) { - return Single.fromCallable( - () -> { - await(latch); - throw exception; - }); + return Single.fromCallable(() -> { + await(latch); + throw exception; + }); } @WithSpan public static Observable traceAsyncObservable(CountDownLatch latch) { - return Observable.fromCallable( - () -> { - await(latch); - return "hello"; - }); + return Observable.fromCallable(() -> { + await(latch); + return "hello"; + }); } @WithSpan public static Observable traceAsyncFailingObservable( CountDownLatch latch, Exception exception) { - return Observable.fromCallable( - () -> { - await(latch); - throw exception; - }); + return Observable.fromCallable(() -> { + await(latch); + throw exception; + }); } @WithSpan public static Flowable traceAsyncFlowable(CountDownLatch latch) { - return Flowable.fromCallable( - () -> { - await(latch); - return "hello"; - }); + return Flowable.fromCallable(() -> { + await(latch); + return "hello"; + }); } @WithSpan public static Flowable traceAsyncFailingFlowable( CountDownLatch latch, Exception exception) { - return Flowable.fromCallable( - () -> { - await(latch); - throw exception; - }); + return Flowable.fromCallable(() -> { + await(latch); + throw exception; + }); } private static void await(CountDownLatch latch) { diff --git a/dd-java-agent/instrumentation/rxjava/rxjava-3.0/src/test/java/annotatedsample/RxJava3TracedMethods.java b/dd-java-agent/instrumentation/rxjava/rxjava-3.0/src/test/java/annotatedsample/RxJava3TracedMethods.java index 163f5fb4b69..82fcccdaf24 100644 --- a/dd-java-agent/instrumentation/rxjava/rxjava-3.0/src/test/java/annotatedsample/RxJava3TracedMethods.java +++ b/dd-java-agent/instrumentation/rxjava/rxjava-3.0/src/test/java/annotatedsample/RxJava3TracedMethods.java @@ -19,85 +19,76 @@ public static Completable traceAsyncCompletable(CountDownLatch latch) { @WithSpan public static Completable traceAsyncFailingCompletable( CountDownLatch latch, Exception exception) { - return Completable.fromCallable( - () -> { - await(latch); - throw exception; - }); + return Completable.fromCallable(() -> { + await(latch); + throw exception; + }); } @WithSpan public static Maybe traceAsyncMaybe(CountDownLatch latch) { - return Maybe.fromCallable( - () -> { - await(latch); - return "hello"; - }); + return Maybe.fromCallable(() -> { + await(latch); + return "hello"; + }); } @WithSpan public static Maybe traceAsyncFailingMaybe(CountDownLatch latch, Exception exception) { - return Maybe.fromCallable( - () -> { - await(latch); - throw exception; - }); + return Maybe.fromCallable(() -> { + await(latch); + throw exception; + }); } @WithSpan public static Single traceAsyncSingle(CountDownLatch latch) { - return Single.fromCallable( - () -> { - await(latch); - return "hello"; - }); + return Single.fromCallable(() -> { + await(latch); + return "hello"; + }); } @WithSpan public static Single traceAsyncFailingSingle(CountDownLatch latch, Exception exception) { - return Single.fromCallable( - () -> { - await(latch); - throw exception; - }); + return Single.fromCallable(() -> { + await(latch); + throw exception; + }); } @WithSpan public static Observable traceAsyncObservable(CountDownLatch latch) { - return Observable.fromCallable( - () -> { - await(latch); - return "hello"; - }); + return Observable.fromCallable(() -> { + await(latch); + return "hello"; + }); } @WithSpan public static Observable traceAsyncFailingObservable( CountDownLatch latch, Exception exception) { - return Observable.fromCallable( - () -> { - await(latch); - throw exception; - }); + return Observable.fromCallable(() -> { + await(latch); + throw exception; + }); } @WithSpan public static Flowable traceAsyncFlowable(CountDownLatch latch) { - return Flowable.fromCallable( - () -> { - await(latch); - return "hello"; - }); + return Flowable.fromCallable(() -> { + await(latch); + return "hello"; + }); } @WithSpan public static Flowable traceAsyncFailingFlowable( CountDownLatch latch, Exception exception) { - return Flowable.fromCallable( - () -> { - await(latch); - throw exception; - }); + return Flowable.fromCallable(() -> { + await(latch); + throw exception; + }); } @WithSpan diff --git a/dd-java-agent/instrumentation/rxjava/rxjava-3.0/src/test/java/testdog/trace/instrumentation/rxjava3/RxJava3InteropTest.java b/dd-java-agent/instrumentation/rxjava/rxjava-3.0/src/test/java/testdog/trace/instrumentation/rxjava3/RxJava3InteropTest.java index 207ca3f6ca1..62ec8250e6b 100644 --- a/dd-java-agent/instrumentation/rxjava/rxjava-3.0/src/test/java/testdog/trace/instrumentation/rxjava3/RxJava3InteropTest.java +++ b/dd-java-agent/instrumentation/rxjava/rxjava-3.0/src/test/java/testdog/trace/instrumentation/rxjava3/RxJava3InteropTest.java @@ -48,11 +48,10 @@ static T runUnderParent(Supplier work) { @Test void fromCompletionStageSync() { Integer result = - Worker.runUnderParent( - () -> - Single.fromCompletionStage(CompletableFuture.completedFuture(1)) - .map(Worker::child) - .blockingGet()); + Worker.runUnderParent(() -> + Single.fromCompletionStage(CompletableFuture.completedFuture(1)) + .map(Worker::child) + .blockingGet()); assertEquals(2, result); assertTraces( @@ -69,11 +68,10 @@ void fromCompletionStageSync() { @Test void fromCompletionStageAsync() { Integer result = - Worker.runUnderParent( - () -> - Single.fromCompletionStage(CompletableFuture.supplyAsync(() -> 1)) - .map(Worker::child) - .blockingGet()); + Worker.runUnderParent(() -> + Single.fromCompletionStage(CompletableFuture.supplyAsync(() -> 1)) + .map(Worker::child) + .blockingGet()); assertEquals(2, result); assertTraces( diff --git a/dd-java-agent/instrumentation/rxjava/rxjava-3.0/src/test/java/testdog/trace/instrumentation/rxjava3/RxJava3Test.java b/dd-java-agent/instrumentation/rxjava/rxjava-3.0/src/test/java/testdog/trace/instrumentation/rxjava3/RxJava3Test.java index 89278800e57..23f4c752f0b 100644 --- a/dd-java-agent/instrumentation/rxjava/rxjava-3.0/src/test/java/testdog/trace/instrumentation/rxjava3/RxJava3Test.java +++ b/dd-java-agent/instrumentation/rxjava/rxjava-3.0/src/test/java/testdog/trace/instrumentation/rxjava3/RxJava3Test.java @@ -453,11 +453,10 @@ void chainParent(String name, int workSpans, Supplier supplier) { void correctParentsFromSubscriptionTimeBlockingGet() { Maybe maybe = Maybe.just(42).map(Worker::addOne).map(Worker::addTwo); - Worker.runUnderTraceParent( - () -> { - maybe.blockingGet(); - return null; - }); + Worker.runUnderTraceParent(() -> { + maybe.blockingGet(); + return null; + }); assertTraces( trace( @@ -490,29 +489,28 @@ static List subscriptionTimeIntermediateArgs() { @MethodSource("subscriptionTimeIntermediateArgs") @SuppressWarnings("unchecked") void correctParentsFromSubscriptionTime(String name, int workItems, Supplier supplier) { - Worker.assemblePublisherUnderTrace( - () -> { - // The "add one" operations are assembled under publisher-parent and stay its children. - // The "add two" operations are assembled under intermediate, but intermediate is finished - // before subscription, so re-activating its context at delivery time is a no-op and - // addTwo falls back to the still-active publisher-parent as well. - Object publisher = supplier.get(); - - AgentSpan intermediate = startSpan("test", "intermediate"); - Worker.intermediateId = intermediate.getSpanId(); - ContextScope scope = activateSpan(intermediate); - try { - if (publisher instanceof Maybe) { - return ((Maybe) publisher).map(Worker::addTwo); - } else if (publisher instanceof Flowable) { - return ((Flowable) publisher).map(Worker::addTwo); - } - throw new IllegalStateException("Unknown publisher type"); - } finally { - scope.close(); - intermediate.finish(); - } - }); + Worker.assemblePublisherUnderTrace(() -> { + // The "add one" operations are assembled under publisher-parent and stay its children. + // The "add two" operations are assembled under intermediate, but intermediate is finished + // before subscription, so re-activating its context at delivery time is a no-op and + // addTwo falls back to the still-active publisher-parent as well. + Object publisher = supplier.get(); + + AgentSpan intermediate = startSpan("test", "intermediate"); + Worker.intermediateId = intermediate.getSpanId(); + ContextScope scope = activateSpan(intermediate); + try { + if (publisher instanceof Maybe) { + return ((Maybe) publisher).map(Worker::addTwo); + } else if (publisher instanceof Flowable) { + return ((Flowable) publisher).map(Worker::addTwo); + } + throw new IllegalStateException("Unknown publisher type"); + } finally { + scope.close(); + intermediate.finish(); + } + }); SpanMatcher[] matchers = new SpanMatcher[3 + 2 * workItems]; matchers[0] = @@ -568,10 +566,8 @@ void schedulers(String schedulerName, Scheduler scheduler) { Flowable.fromIterable(Arrays.asList(1, 2, 3, 4)) .parallel() .runOn(scheduler) - .flatMap( - num -> - Maybe.just(num.toString() + " on " + Thread.currentThread().getName()) - .toFlowable()) + .flatMap(num -> + Maybe.just(num.toString() + " on " + Thread.currentThread().getName()).toFlowable()) .sequential() .toList() .blockingGet(); @@ -592,13 +588,12 @@ void schedulers(String schedulerName, Scheduler scheduler) { @ParameterizedTest(name = "Flowable propagates context on ''{0}'' scheduler") @MethodSource("schedulerArgs") void flowableParallelContextPropagation(String schedulerName, Scheduler scheduler) { - Worker.assemblePublisherUnderTrace( - () -> - Flowable.fromIterable(Arrays.asList(1, 2, 3, 4)) - .parallel() - .runOn(scheduler) - .flatMap(num -> Maybe.just(num).map(Worker::addOne).toFlowable()) - .sequential()); + Worker.assemblePublisherUnderTrace(() -> + Flowable.fromIterable(Arrays.asList(1, 2, 3, 4)) + .parallel() + .runOn(scheduler) + .flatMap(num -> Maybe.just(num).map(Worker::addOne).toFlowable()) + .sequential()); SpanMatcher[] matchers = new SpanMatcher[6]; matchers[0] = diff --git a/dd-java-agent/instrumentation/rxjava/rxjava-3.0/src/test/java/testdog/trace/instrumentation/rxjava3/SubscriptionTest.java b/dd-java-agent/instrumentation/rxjava/rxjava-3.0/src/test/java/testdog/trace/instrumentation/rxjava3/SubscriptionTest.java index cc0a84b42fc..e1ead5ae812 100644 --- a/dd-java-agent/instrumentation/rxjava/rxjava-3.0/src/test/java/testdog/trace/instrumentation/rxjava3/SubscriptionTest.java +++ b/dd-java-agent/instrumentation/rxjava/rxjava-3.0/src/test/java/testdog/trace/instrumentation/rxjava3/SubscriptionTest.java @@ -28,11 +28,10 @@ void maybeSubscriptionPropagatesParentSpan() throws InterruptedException { AgentSpan parent = startSpan("test", "parent"); try (ContextScope scope = activateSpan(parent)) { Maybe connection = Maybe.create(emitter -> emitter.onSuccess(new Connection())); - connection.subscribe( - c -> { - c.query(); - latch.countDown(); - }); + connection.subscribe(c -> { + c.query(); + latch.countDown(); + }); } finally { parent.finish(); } @@ -52,11 +51,10 @@ void singleSubscriptionPropagatesParentSpan() throws InterruptedException { AgentSpan parent = startSpan("test", "parent"); try (ContextScope scope = activateSpan(parent)) { Single connection = Single.create(emitter -> emitter.onSuccess(new Connection())); - connection.subscribe( - c -> { - c.query(); - latch.countDown(); - }); + connection.subscribe(c -> { + c.query(); + latch.countDown(); + }); } finally { parent.finish(); } @@ -76,11 +74,10 @@ void completableSubscriptionPropagatesParentSpan() throws InterruptedException { AgentSpan parent = startSpan("test", "parent"); try (ContextScope scope = activateSpan(parent)) { Completable action = Completable.create(emitter -> emitter.onComplete()); - action.subscribe( - () -> { - new Connection().query(); - latch.countDown(); - }); + action.subscribe(() -> { + new Connection().query(); + latch.countDown(); + }); } finally { parent.finish(); } @@ -100,16 +97,14 @@ void observableSubscriptionPropagatesParentSpan() throws InterruptedException { AgentSpan parent = startSpan("test", "parent"); try (ContextScope scope = activateSpan(parent)) { Observable connection = - Observable.create( - emitter -> { - emitter.onNext(new Connection()); - emitter.onComplete(); - }); - connection.subscribe( - c -> { - c.query(); - latch.countDown(); + Observable.create(emitter -> { + emitter.onNext(new Connection()); + emitter.onComplete(); }); + connection.subscribe(c -> { + c.query(); + latch.countDown(); + }); } finally { parent.finish(); } @@ -135,11 +130,10 @@ void flowableSubscriptionPropagatesParentSpan() throws InterruptedException { emitter.onComplete(); }, BackpressureStrategy.BUFFER); - connection.subscribe( - c -> { - c.query(); - latch.countDown(); - }); + connection.subscribe(c -> { + c.query(); + latch.countDown(); + }); } finally { parent.finish(); } diff --git a/dd-java-agent/instrumentation/spark/spark-common/src/main/java/datadog/trace/instrumentation/spark/AbstractSparkPlanSerializer.java b/dd-java-agent/instrumentation/spark/spark-common/src/main/java/datadog/trace/instrumentation/spark/AbstractSparkPlanSerializer.java index 271f273660a..1a7adae6c5d 100644 --- a/dd-java-agent/instrumentation/spark/spark-common/src/main/java/datadog/trace/instrumentation/spark/AbstractSparkPlanSerializer.java +++ b/dd-java-agent/instrumentation/spark/spark-common/src/main/java/datadog/trace/instrumentation/spark/AbstractSparkPlanSerializer.java @@ -69,10 +69,9 @@ public abstract class AbstractSparkPlanSerializer { public Map extractFormattedProduct(SparkPlan plan) { HashMap result = new HashMap<>(); safeParseTreeNode(plan, 0) - .forEach( - (key, value) -> { - result.put(key, writeObjectToString(value)); - }); + .forEach((key, value) -> { + result.put(key, writeObjectToString(value)); + }); return result; } diff --git a/dd-java-agent/instrumentation/spark/spark-common/src/main/java/datadog/trace/instrumentation/spark/SparkAggregatedTaskMetrics.java b/dd-java-agent/instrumentation/spark/spark-common/src/main/java/datadog/trace/instrumentation/spark/SparkAggregatedTaskMetrics.java index 988a9507649..2adf85619a3 100644 --- a/dd-java-agent/instrumentation/spark/spark-common/src/main/java/datadog/trace/instrumentation/spark/SparkAggregatedTaskMetrics.java +++ b/dd-java-agent/instrumentation/spark/spark-common/src/main/java/datadog/trace/instrumentation/spark/SparkAggregatedTaskMetrics.java @@ -147,23 +147,22 @@ public void addTaskMetrics( externalAccumulableHistograms = new RemoveEldestHashMap<>(MAX_ACCUMULATOR_SIZE); } - externalAccumulators.forEach( - acc -> { - HistogramWithSum hist = externalAccumulableHistograms.get(acc.id()); - if (hist == null) { - hist = - Histogram.newHistogramWithSum( - HISTOGRAM_RELATIVE_ACCURACY, HISTOGRAM_MAX_NUM_BINS); - } - - try { - // As of spark 3.5, all SQL metrics are Long, safeguard if it changes in new - // versions - hist.accept(((Number) acc.value()).doubleValue()); - externalAccumulableHistograms.put(acc.id(), hist); - } catch (ClassCastException ignored) { - } - }); + externalAccumulators.forEach(acc -> { + HistogramWithSum hist = externalAccumulableHistograms.get(acc.id()); + if (hist == null) { + hist = + Histogram.newHistogramWithSum( + HISTOGRAM_RELATIVE_ACCURACY, HISTOGRAM_MAX_NUM_BINS); + } + + try { + // As of spark 3.5, all SQL metrics are Long, safeguard if it changes in new + // versions + hist.accept(((Number) acc.value()).doubleValue()); + externalAccumulableHistograms.put(acc.id(), hist); + } catch (ClassCastException ignored) { + } + }); } } } diff --git a/dd-java-agent/instrumentation/spark/spark-common/src/main/java/datadog/trace/instrumentation/spark/SparkLauncherListener.java b/dd-java-agent/instrumentation/spark/spark-common/src/main/java/datadog/trace/instrumentation/spark/SparkLauncherListener.java index fa050768917..16e053fe013 100644 --- a/dd-java-agent/instrumentation/spark/spark-common/src/main/java/datadog/trace/instrumentation/spark/SparkLauncherListener.java +++ b/dd-java-agent/instrumentation/spark/spark-common/src/main/java/datadog/trace/instrumentation/spark/SparkLauncherListener.java @@ -60,18 +60,17 @@ public static synchronized void createLauncherSpan(Object launcher) { shutdownHookRegistered = true; Runtime.getRuntime() .addShutdownHook( - new Thread( - () -> { - synchronized (SparkLauncherListener.class) { - AgentSpan s = launcherSpan; - if (s != null) { - log.info("Finishing spark.launcher span from shutdown hook"); - setTimingMetrics(s); - s.finish(); - launcherSpan = null; - } - } - })); + new Thread(() -> { + synchronized (SparkLauncherListener.class) { + AgentSpan s = launcherSpan; + if (s != null) { + log.info("Finishing spark.launcher span from shutdown hook"); + setTimingMetrics(s); + s.finish(); + launcherSpan = null; + } + } + })); } } diff --git a/dd-java-agent/instrumentation/spray-1.3/src/test/java/datadog/trace/instrumentation/spray/RequestCompletionTest.java b/dd-java-agent/instrumentation/spray-1.3/src/test/java/datadog/trace/instrumentation/spray/RequestCompletionTest.java index 689de03aac5..0b5f983e18b 100644 --- a/dd-java-agent/instrumentation/spray-1.3/src/test/java/datadog/trace/instrumentation/spray/RequestCompletionTest.java +++ b/dd-java-agent/instrumentation/spray-1.3/src/test/java/datadog/trace/instrumentation/spray/RequestCompletionTest.java @@ -51,21 +51,19 @@ void finishesOnceWhenResponseAndScopeClosureRace() throws Exception { CountDownLatch ready = new CountDownLatch(2); CountDownLatch start = new CountDownLatch(1); Future response = - executor.submit( - () -> { - ready.countDown(); - assertTrue(start.await(5, TimeUnit.SECONDS)); - SprayHelper.responseComplete(span, completion); - return null; - }); + executor.submit(() -> { + ready.countDown(); + assertTrue(start.await(5, TimeUnit.SECONDS)); + SprayHelper.responseComplete(span, completion); + return null; + }); Future route = - executor.submit( - () -> { - ready.countDown(); - assertTrue(start.await(5, TimeUnit.SECONDS)); - SprayHelper.scopeClosed(span, completion); - return null; - }); + executor.submit(() -> { + ready.countDown(); + assertTrue(start.await(5, TimeUnit.SECONDS)); + SprayHelper.scopeClosed(span, completion); + return null; + }); try { assertTrue(ready.await(5, TimeUnit.SECONDS)); } finally { diff --git a/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-5.0/src/bootTest/groovy/dd/trace/instrumentation/springwebflux/server/WsHandler.java b/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-5.0/src/bootTest/groovy/dd/trace/instrumentation/springwebflux/server/WsHandler.java index 0285c45b485..0a6839e9af3 100644 --- a/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-5.0/src/bootTest/groovy/dd/trace/instrumentation/springwebflux/server/WsHandler.java +++ b/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-5.0/src/bootTest/groovy/dd/trace/instrumentation/springwebflux/server/WsHandler.java @@ -20,27 +20,23 @@ public Mono handle(WebSocketSession webSocketSession) { } return webSocketSession .receive() - .map( - msg -> { - if (msg.getType() == WebSocketMessage.Type.TEXT) { - return webSocketSession.textMessage(msg.getPayloadAsText()); - } - byte[] bytes = new byte[msg.getPayload().readableByteCount()]; - msg.getPayload().read(bytes); - return webSocketSession.binaryMessage( - dataBufferFactory -> dataBufferFactory.wrap(bytes)); - }) - .flatMap( - msg -> - webSocketSession - .send(Mono.just(msg)) - .doFinally( - ignored -> { - synchronized (this) { - activeSession = null; - notifyAll(); - } - })) + .map(msg -> { + if (msg.getType() == WebSocketMessage.Type.TEXT) { + return webSocketSession.textMessage(msg.getPayloadAsText()); + } + byte[] bytes = new byte[msg.getPayload().readableByteCount()]; + msg.getPayload().read(bytes); + return webSocketSession.binaryMessage(dataBufferFactory -> dataBufferFactory.wrap(bytes)); + }) + .flatMap(msg -> + webSocketSession + .send(Mono.just(msg)) + .doFinally(ignored -> { + synchronized (this) { + activeSession = null; + notifyAll(); + } + })) .then(); } diff --git a/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-5.0/src/main/java/datadog/trace/instrumentation/springwebflux/server/AdviceUtils.java b/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-5.0/src/main/java/datadog/trace/instrumentation/springwebflux/server/AdviceUtils.java index 3690e0b463c..61cf01158d0 100644 --- a/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-5.0/src/main/java/datadog/trace/instrumentation/springwebflux/server/AdviceUtils.java +++ b/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-5.0/src/main/java/datadog/trace/instrumentation/springwebflux/server/AdviceUtils.java @@ -15,17 +15,16 @@ public final class AdviceUtils { "datadog.trace.instrumentation.springwebflux.ParentSpan"; private static final ClassValue NAMES = - GenericClassValue.of( - type -> { - String name = type.getName(); - int lambdaIdx = name.lastIndexOf("$$Lambda"); - if (lambdaIdx > -1) { - return UTF8BytesString.create( - name.substring(name.lastIndexOf('.') + 1, lambdaIdx) + ".lambda"); - } else { - return DECORATE.spanNameForMethod(type, "handle"); - } - }); + GenericClassValue.of(type -> { + String name = type.getName(); + int lambdaIdx = name.lastIndexOf("$$Lambda"); + if (lambdaIdx > -1) { + return UTF8BytesString.create( + name.substring(name.lastIndexOf('.') + 1, lambdaIdx) + ".lambda"); + } else { + return DECORATE.spanNameForMethod(type, "handle"); + } + }); public static CharSequence constructOperationName(Object handler) { return NAMES.get(handler.getClass()); diff --git a/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-6.0/src/bootTest/groovy/dd/trace/instrumentation/springwebflux/server/WsHandler.java b/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-6.0/src/bootTest/groovy/dd/trace/instrumentation/springwebflux/server/WsHandler.java index 0285c45b485..0a6839e9af3 100644 --- a/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-6.0/src/bootTest/groovy/dd/trace/instrumentation/springwebflux/server/WsHandler.java +++ b/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-6.0/src/bootTest/groovy/dd/trace/instrumentation/springwebflux/server/WsHandler.java @@ -20,27 +20,23 @@ public Mono handle(WebSocketSession webSocketSession) { } return webSocketSession .receive() - .map( - msg -> { - if (msg.getType() == WebSocketMessage.Type.TEXT) { - return webSocketSession.textMessage(msg.getPayloadAsText()); - } - byte[] bytes = new byte[msg.getPayload().readableByteCount()]; - msg.getPayload().read(bytes); - return webSocketSession.binaryMessage( - dataBufferFactory -> dataBufferFactory.wrap(bytes)); - }) - .flatMap( - msg -> - webSocketSession - .send(Mono.just(msg)) - .doFinally( - ignored -> { - synchronized (this) { - activeSession = null; - notifyAll(); - } - })) + .map(msg -> { + if (msg.getType() == WebSocketMessage.Type.TEXT) { + return webSocketSession.textMessage(msg.getPayloadAsText()); + } + byte[] bytes = new byte[msg.getPayload().readableByteCount()]; + msg.getPayload().read(bytes); + return webSocketSession.binaryMessage(dataBufferFactory -> dataBufferFactory.wrap(bytes)); + }) + .flatMap(msg -> + webSocketSession + .send(Mono.just(msg)) + .doFinally(ignored -> { + synchronized (this) { + activeSession = null; + notifyAll(); + } + })) .then(); } diff --git a/dd-java-agent/instrumentation/spring/spring-webmvc/spring-webmvc-3.1/src/main/java/datadog/trace/instrumentation/springweb/SpringWebHttpServerDecorator.java b/dd-java-agent/instrumentation/spring/spring-webmvc/spring-webmvc-3.1/src/main/java/datadog/trace/instrumentation/springweb/SpringWebHttpServerDecorator.java index b7a2778d097..01d06605dd5 100644 --- a/dd-java-agent/instrumentation/spring/spring-webmvc/spring-webmvc-3.1/src/main/java/datadog/trace/instrumentation/springweb/SpringWebHttpServerDecorator.java +++ b/dd-java-agent/instrumentation/spring/spring-webmvc/spring-webmvc-3.1/src/main/java/datadog/trace/instrumentation/springweb/SpringWebHttpServerDecorator.java @@ -37,11 +37,10 @@ public class SpringWebHttpServerDecorator public static final String DD_HANDLER_SPAN_CONTINUE_SUFFIX = ".continue"; private static final ClassValue> HANDLER_SPAN_KEYS = - GenericClassValue.of( - type -> { - String spanKey = DD_HANDLER_SPAN_PREFIX_KEY + type.getName(); - return of(spanKey, spanKey + DD_HANDLER_SPAN_CONTINUE_SUFFIX); - }); + GenericClassValue.of(type -> { + String spanKey = DD_HANDLER_SPAN_PREFIX_KEY + type.getName(); + return of(spanKey, spanKey + DD_HANDLER_SPAN_CONTINUE_SUFFIX); + }); /** Returns the span attribute key on the left and the continuation attribute key on the right. */ public static Pair handlerSpanKeys(Class handlerClass) { diff --git a/dd-java-agent/instrumentation/spring/spring-webmvc/spring-webmvc-6.0/src/main/java17/datadog/trace/instrumentation/springweb6/SpringWebHttpServerDecorator.java b/dd-java-agent/instrumentation/spring/spring-webmvc/spring-webmvc-6.0/src/main/java17/datadog/trace/instrumentation/springweb6/SpringWebHttpServerDecorator.java index 9037203fa25..611625b0c3f 100644 --- a/dd-java-agent/instrumentation/spring/spring-webmvc/spring-webmvc-6.0/src/main/java17/datadog/trace/instrumentation/springweb6/SpringWebHttpServerDecorator.java +++ b/dd-java-agent/instrumentation/spring/spring-webmvc/spring-webmvc-6.0/src/main/java17/datadog/trace/instrumentation/springweb6/SpringWebHttpServerDecorator.java @@ -41,11 +41,10 @@ public class SpringWebHttpServerDecorator public static final String DD_HANDLER_SPAN_CONTINUE_SUFFIX = ".continue"; private static final ClassValue> HANDLER_SPAN_KEYS = - GenericClassValue.of( - type -> { - String spanKey = DD_HANDLER_SPAN_PREFIX_KEY + type.getName(); - return of(spanKey, spanKey + DD_HANDLER_SPAN_CONTINUE_SUFFIX); - }); + GenericClassValue.of(type -> { + String spanKey = DD_HANDLER_SPAN_PREFIX_KEY + type.getName(); + return of(spanKey, spanKey + DD_HANDLER_SPAN_CONTINUE_SUFFIX); + }); /** Returns the span attribute key on the left and the continuation attribute key on the right. */ public static Pair handlerSpanKeys(Class handlerClass) { diff --git a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/src/test/java/datadog/trace/instrumentation/vertx_3_4/server/RoutingContextSessionAdviceAppSecTest.java b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/src/test/java/datadog/trace/instrumentation/vertx_3_4/server/RoutingContextSessionAdviceAppSecTest.java index e9867925af6..d7cda2f5957 100644 --- a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/src/test/java/datadog/trace/instrumentation/vertx_3_4/server/RoutingContextSessionAdviceAppSecTest.java +++ b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/src/test/java/datadog/trace/instrumentation/vertx_3_4/server/RoutingContextSessionAdviceAppSecTest.java @@ -65,11 +65,10 @@ void setUp() { CallbackProvider callbackProvider = mock(CallbackProvider.class); when(callbackProvider.getCallback(EVENTS.requestSession())) - .thenReturn( - (ctx, id) -> { - receivedSessionId = id; - return flow; - }); + .thenReturn((ctx, id) -> { + receivedSessionId = id; + return flow; + }); AgentTracer.TracerAPI tracer = mock(AgentTracer.TracerAPI.class); when(tracer.activeSpan()).thenReturn(span); when(tracer.getCallbackProvider(RequestContextSlot.APPSEC)).thenReturn(callbackProvider); diff --git a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/src/test/java/server/IastSinksVerticle.java b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/src/test/java/server/IastSinksVerticle.java index 6acf7fa058f..55d32917b98 100644 --- a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/src/test/java/server/IastSinksVerticle.java +++ b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/src/test/java/server/IastSinksVerticle.java @@ -15,26 +15,23 @@ public void start(final Future startFuture) { Router router = Router.router(vertx); router .route("/iast/sinks/reroute1") - .handler( - rc -> { - final String path = rc.request().getParam("path"); - rc.reroute(path); - }); + .handler(rc -> { + final String path = rc.request().getParam("path"); + rc.reroute(path); + }); router .route("/iast/sinks/reroute2") - .handler( - rc -> { - final String path = rc.request().getParam("path"); - rc.reroute(HttpMethod.GET, path); - }); + .handler(rc -> { + final String path = rc.request().getParam("path"); + rc.reroute(HttpMethod.GET, path); + }); router .route("/iast/sinks/putheader1") - .handler( - rc -> { - final String headerName = rc.request().getParam("name"); - final String headerValue = rc.request().getParam("value"); - rc.response().putHeader(headerName, headerValue).end(); - }); + .handler(rc -> { + final String headerName = rc.request().getParam("name"); + final String headerValue = rc.request().getParam("value"); + rc.response().putHeader(headerName, headerValue).end(); + }); vertx .createHttpServer() diff --git a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/src/test/java/server/IastSourceVerticle.java b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/src/test/java/server/IastSourceVerticle.java index e73ca00d610..e2400ed67b5 100644 --- a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/src/test/java/server/IastSourceVerticle.java +++ b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/src/test/java/server/IastSourceVerticle.java @@ -21,48 +21,42 @@ public void start(final Future startPromise) { router.route().handler(CookieHandler.create()); router .route("/iast/propagation/cookies") - .handler( - rc -> { - rc.cookies(); - rc.response().end(); - }); + .handler(rc -> { + rc.cookies(); + rc.response().end(); + }); router .route("/iast/propagation/getcookie") - .handler( - rc -> { - rc.getCookie("cookie"); - rc.response().end(); - }); + .handler(rc -> { + rc.getCookie("cookie"); + rc.response().end(); + }); router .route("/iast/propagation/getcookiename") - .handler( - rc -> { - Cookie cookie = new CookieImpl("cookieName", "cookieValue"); - cookie.getName(); - rc.response().end(); - }); + .handler(rc -> { + Cookie cookie = new CookieImpl("cookieName", "cookieValue"); + cookie.getName(); + rc.response().end(); + }); router .route("/iast/propagation/getcookievalue") - .handler( - rc -> { - Cookie cookie = new CookieImpl("cookieName", "cookieValue"); - cookie.getValue(); - rc.response().end(); - }); + .handler(rc -> { + Cookie cookie = new CookieImpl("cookieName", "cookieValue"); + cookie.getValue(); + rc.response().end(); + }); router .route("/iast/propagation/headers") - .handler( - rc -> { - rc.request().headers(); - rc.response().end(); - }); + .handler(rc -> { + rc.request().headers(); + rc.response().end(); + }); router .route("/iast/propagation/params") - .handler( - rc -> { - rc.request().params(); - rc.response().end(); - }); + .handler(rc -> { + rc.request().params(); + rc.response().end(); + }); router .route("/iast/propagation/formAttributes") .handler(rc -> rc.response().end(rc.request().formAttributes().get("formAttribute"))); diff --git a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/src/test/java/server/RouteHandlerExceptionHandlerTest.java b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/src/test/java/server/RouteHandlerExceptionHandlerTest.java index 3892646adcf..3b0a81e3d2b 100644 --- a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/src/test/java/server/RouteHandlerExceptionHandlerTest.java +++ b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/src/test/java/server/RouteHandlerExceptionHandlerTest.java @@ -48,17 +48,16 @@ static void startServer() throws Exception { Router router = Router.router(vertx); router .route("/fail") - .handler( - ctx -> { - ResponseExceptionFiringHelper.fireException( - ctx.response(), new IOException("simulated response I/O failure")); - try { - ctx.response().setStatusCode(500).end("error"); - } catch (IllegalStateException ignore) { - // handleException may have left the response in a state where end() is rejected; - // the span is already finished by our registered exception handler. - } - }); + .handler(ctx -> { + ResponseExceptionFiringHelper.fireException( + ctx.response(), new IOException("simulated response I/O failure")); + try { + ctx.response().setStatusCode(500).end("error"); + } catch (IllegalStateException ignore) { + // handleException may have left the response in a state where end() is rejected; + // the span is already finished by our registered exception handler. + } + }); CountDownLatch ready = new CountDownLatch(1); server = diff --git a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/src/test/java/server/VertxTestServer.java b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/src/test/java/server/VertxTestServer.java index 0110d1268da..f1aea412fbb 100644 --- a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/src/test/java/server/VertxTestServer.java +++ b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/src/test/java/server/VertxTestServer.java @@ -48,150 +48,135 @@ public void start(final Future startFuture) { router .route(SUCCESS.getPath()) - .handler( - ctx -> - controller( - ctx, - SUCCESS, - () -> - ctx.response().setStatusCode(SUCCESS.getStatus()).end(SUCCESS.getBody()))); + .handler(ctx -> + controller( + ctx, + SUCCESS, + () -> ctx.response().setStatusCode(SUCCESS.getStatus()).end(SUCCESS.getBody()))); router .route(FORWARDED.getPath()) - .handler( - ctx -> - controller( - ctx, - FORWARDED, - () -> - ctx.response() - .setStatusCode(FORWARDED.getStatus()) - .end(ctx.request().getHeader("x-forwarded-for")))); + .handler(ctx -> + controller( + ctx, + FORWARDED, + () -> + ctx.response() + .setStatusCode(FORWARDED.getStatus()) + .end(ctx.request().getHeader("x-forwarded-for")))); router .route(CREATED.getPath()) - .handler( - ctx -> - controller( - ctx, - CREATED, - () -> - ctx.request() - .bodyHandler( - body -> - ctx.response() - .setStatusCode(CREATED.getStatus()) - .end(CREATED.getBody() + ": " + body.toString())))); + .handler(ctx -> + controller( + ctx, + CREATED, + () -> + ctx.request() + .bodyHandler(body -> + ctx.response() + .setStatusCode(CREATED.getStatus()) + .end(CREATED.getBody() + ": " + body.toString())))); router.route(BODY_URLENCODED.getPath()).handler(BodyHandler.create()); router .route(BODY_URLENCODED.getPath()) - .handler( - ctx -> - controller( - ctx, - BODY_URLENCODED, - () -> { - String res = convertFormAttributes(ctx); - ctx.response().setStatusCode(BODY_URLENCODED.getStatus()).end(res); - })); + .handler(ctx -> + controller( + ctx, + BODY_URLENCODED, + () -> { + String res = convertFormAttributes(ctx); + ctx.response().setStatusCode(BODY_URLENCODED.getStatus()).end(res); + })); router.route(BODY_MULTIPART.getPath()).handler(BodyHandler.create()); router .route(BODY_MULTIPART.getPath()) - .handler( - ctx -> - controller( - ctx, - BODY_MULTIPART, - () -> { - ctx.fileUploads(); - String res = convertFormAttributes(ctx); - ctx.response().setStatusCode(BODY_MULTIPART.getStatus()).end(res); - })); + .handler(ctx -> + controller( + ctx, + BODY_MULTIPART, + () -> { + ctx.fileUploads(); + String res = convertFormAttributes(ctx); + ctx.response().setStatusCode(BODY_MULTIPART.getStatus()).end(res); + })); router.route(BODY_JSON.getPath()).handler(BodyHandler.create()); router .route(BODY_JSON.getPath()) - .handler( - ctx -> - controller( - ctx, - BODY_JSON, - () -> { - JsonObject json = ctx.getBodyAsJson(); - ctx.response().setStatusCode(BODY_JSON.getStatus()).end(json.toString()); - })); + .handler(ctx -> + controller( + ctx, + BODY_JSON, + () -> { + JsonObject json = ctx.getBodyAsJson(); + ctx.response().setStatusCode(BODY_JSON.getStatus()).end(json.toString()); + })); router .route(QUERY_ENCODED_BOTH.getRawPath()) - .handler( - ctx -> - controller( - ctx, - QUERY_ENCODED_BOTH, - () -> - ctx.response() - .setStatusCode(QUERY_ENCODED_BOTH.getStatus()) - .end(QUERY_ENCODED_BOTH.bodyForQuery(ctx.request().query())))); + .handler(ctx -> + controller( + ctx, + QUERY_ENCODED_BOTH, + () -> + ctx.response() + .setStatusCode(QUERY_ENCODED_BOTH.getStatus()) + .end(QUERY_ENCODED_BOTH.bodyForQuery(ctx.request().query())))); router .route(QUERY_ENCODED_QUERY.getPath()) - .handler( - ctx -> - controller( - ctx, - QUERY_ENCODED_QUERY, - () -> - ctx.response() - .setStatusCode(QUERY_ENCODED_QUERY.getStatus()) - .end(QUERY_ENCODED_QUERY.bodyForQuery(ctx.request().query())))); + .handler(ctx -> + controller( + ctx, + QUERY_ENCODED_QUERY, + () -> + ctx.response() + .setStatusCode(QUERY_ENCODED_QUERY.getStatus()) + .end(QUERY_ENCODED_QUERY.bodyForQuery(ctx.request().query())))); router .route(QUERY_PARAM.getPath()) - .handler( - ctx -> - controller( - ctx, - QUERY_PARAM, - () -> - ctx.response() - .setStatusCode(QUERY_PARAM.getStatus()) - .end(ctx.request().query()))); + .handler(ctx -> + controller( + ctx, + QUERY_PARAM, + () -> + ctx.response() + .setStatusCode(QUERY_PARAM.getStatus()) + .end(ctx.request().query()))); router .route(USER_BLOCK.getPath()) - .handler( - ctx -> - controller( - ctx, - USER_BLOCK, - () -> { - Blocking.forUser("user-to-block").blockIfMatch(); - ctx.response().end("Should not be reached"); - })); + .handler(ctx -> + controller( + ctx, + USER_BLOCK, + () -> { + Blocking.forUser("user-to-block").blockIfMatch(); + ctx.response().end("Should not be reached"); + })); router .route("/path/:id/param") - .handler( - ctx -> - controller( - ctx, - PATH_PARAM, - () -> - ctx.response() - .setStatusCode(PATH_PARAM.getStatus()) - .end(ctx.request().getParam("id")))); + .handler(ctx -> + controller( + ctx, + PATH_PARAM, + () -> + ctx.response() + .setStatusCode(PATH_PARAM.getStatus()) + .end(ctx.request().getParam("id")))); router .route(REDIRECT.getPath()) - .handler( - ctx -> - controller( - ctx, - REDIRECT, - () -> - ctx.response() - .setStatusCode(REDIRECT.getStatus()) - .putHeader("location", REDIRECT.getBody()) - .end())); + .handler(ctx -> + controller( + ctx, + REDIRECT, + () -> + ctx.response() + .setStatusCode(REDIRECT.getStatus()) + .putHeader("location", REDIRECT.getBody()) + .end())); router .route(ERROR.getPath()) - .handler( - ctx -> - controller( - ctx, - ERROR, - () -> ctx.response().setStatusCode(ERROR.getStatus()).end(ERROR.getBody()))); + .handler(ctx -> + controller( + ctx, + ERROR, + () -> ctx.response().setStatusCode(ERROR.getStatus()).end(ERROR.getBody()))); router .route(EXCEPTION.getPath()) .handler(ctx -> controller(ctx, EXCEPTION, VertxTestServer::exception)); diff --git a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.9/src/test/java/server/IastVertx39TestVerticle.java b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.9/src/test/java/server/IastVertx39TestVerticle.java index 5893f99f871..9ed47d8e5a3 100644 --- a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.9/src/test/java/server/IastVertx39TestVerticle.java +++ b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.9/src/test/java/server/IastVertx39TestVerticle.java @@ -42,191 +42,175 @@ public void start(final Future startFuture) { customizeBeforeRoutes(router); router .route("/vulnerability/setHeaderString") - .handler( - ctx -> - controller( - ctx, - SUCCESS, - () -> { - final String headerName = ctx.request().getParam("name"); - final String headerValue = ctx.request().getParam("value"); - ctx.response() - .setStatusCode(SUCCESS.getStatus()) - .putHeader(headerName, headerValue) - .end(SUCCESS.getBody()); - })); + .handler(ctx -> + controller( + ctx, + SUCCESS, + () -> { + final String headerName = ctx.request().getParam("name"); + final String headerValue = ctx.request().getParam("value"); + ctx.response() + .setStatusCode(SUCCESS.getStatus()) + .putHeader(headerName, headerValue) + .end(SUCCESS.getBody()); + })); router .route("/iast/vulnerabilities/insecureCookie") - .handler( - ctx -> - controller( - ctx, - SUCCESS, - () -> { - final String headerName = ctx.request().getParam("name"); - final String headerValue = ctx.request().getParam("value"); - Cookie cookie = Cookie.cookie(headerName, headerValue); - if ("true".equals(ctx.request().getParam("secure"))) { - cookie.setSecure(true); - } - ctx.response() - .setStatusCode(SUCCESS.getStatus()) - .addCookie(cookie) - .end("Cookie Set"); - })); + .handler(ctx -> + controller( + ctx, + SUCCESS, + () -> { + final String headerName = ctx.request().getParam("name"); + final String headerValue = ctx.request().getParam("value"); + Cookie cookie = Cookie.cookie(headerName, headerValue); + if ("true".equals(ctx.request().getParam("secure"))) { + cookie.setSecure(true); + } + ctx.response() + .setStatusCode(SUCCESS.getStatus()) + .addCookie(cookie) + .end("Cookie Set"); + })); router .route(SUCCESS.getPath()) - .handler( - ctx -> - controller( - ctx, - SUCCESS, - () -> - ctx.response().setStatusCode(SUCCESS.getStatus()).end(SUCCESS.getBody()))); + .handler(ctx -> + controller( + ctx, + SUCCESS, + () -> ctx.response().setStatusCode(SUCCESS.getStatus()).end(SUCCESS.getBody()))); router .route(FORWARDED.getPath()) - .handler( - ctx -> - controller( - ctx, - FORWARDED, - () -> - ctx.response() - .setStatusCode(FORWARDED.getStatus()) - .end(ctx.request().getHeader("x-forwarded-for")))); + .handler(ctx -> + controller( + ctx, + FORWARDED, + () -> + ctx.response() + .setStatusCode(FORWARDED.getStatus()) + .end(ctx.request().getHeader("x-forwarded-for")))); router .route(CREATED.getPath()) - .handler( - ctx -> - controller( - ctx, - CREATED, - () -> - ctx.request() - .bodyHandler( - body -> - ctx.response() - .setStatusCode(CREATED.getStatus()) - .end(CREATED.getBody() + ": " + body.toString())))); + .handler(ctx -> + controller( + ctx, + CREATED, + () -> + ctx.request() + .bodyHandler(body -> + ctx.response() + .setStatusCode(CREATED.getStatus()) + .end(CREATED.getBody() + ": " + body.toString())))); router.route(BODY_URLENCODED.getPath()).handler(BodyHandler.create()); router .route(BODY_URLENCODED.getPath()) - .handler( - ctx -> - controller( - ctx, - BODY_URLENCODED, - () -> { - String res = "["; - MultiMap entries = ctx.request().formAttributes(); - for (String name : entries.names()) { - if (name.equals("ignore")) { - continue; - } - if (res.length() > 1) { - res += ", "; - } - res += name; - res += ":["; - int i = 0; - for (String s : entries.getAll(name)) { - if (i++ > 0) { - res += ", "; - } - res += s; - } - res += ']'; + .handler(ctx -> + controller( + ctx, + BODY_URLENCODED, + () -> { + String res = "["; + MultiMap entries = ctx.request().formAttributes(); + for (String name : entries.names()) { + if (name.equals("ignore")) { + continue; + } + if (res.length() > 1) { + res += ", "; + } + res += name; + res += ":["; + int i = 0; + for (String s : entries.getAll(name)) { + if (i++ > 0) { + res += ", "; } - res += ']'; - ctx.response().setStatusCode(BODY_URLENCODED.getStatus()).end(res); - })); + res += s; + } + res += ']'; + } + res += ']'; + ctx.response().setStatusCode(BODY_URLENCODED.getStatus()).end(res); + })); router.route(BODY_JSON.getPath()).handler(BodyHandler.create()); router .route(BODY_JSON.getPath()) - .handler( - ctx -> - controller( - ctx, - BODY_JSON, - () -> { - JsonObject json = ctx.getBodyAsJson(); - ctx.response().setStatusCode(BODY_JSON.getStatus()).end(json.toString()); - })); + .handler(ctx -> + controller( + ctx, + BODY_JSON, + () -> { + JsonObject json = ctx.getBodyAsJson(); + ctx.response().setStatusCode(BODY_JSON.getStatus()).end(json.toString()); + })); router .route(QUERY_ENCODED_BOTH.getRawPath()) - .handler( - ctx -> - controller( - ctx, - QUERY_ENCODED_BOTH, - () -> - ctx.response() - .setStatusCode(QUERY_ENCODED_BOTH.getStatus()) - .end(QUERY_ENCODED_BOTH.bodyForQuery(ctx.request().query())))); + .handler(ctx -> + controller( + ctx, + QUERY_ENCODED_BOTH, + () -> + ctx.response() + .setStatusCode(QUERY_ENCODED_BOTH.getStatus()) + .end(QUERY_ENCODED_BOTH.bodyForQuery(ctx.request().query())))); router .route(QUERY_ENCODED_QUERY.getPath()) - .handler( - ctx -> - controller( - ctx, - QUERY_ENCODED_QUERY, - () -> - ctx.response() - .setStatusCode(QUERY_ENCODED_QUERY.getStatus()) - .end(QUERY_ENCODED_QUERY.bodyForQuery(ctx.request().query())))); + .handler(ctx -> + controller( + ctx, + QUERY_ENCODED_QUERY, + () -> + ctx.response() + .setStatusCode(QUERY_ENCODED_QUERY.getStatus()) + .end(QUERY_ENCODED_QUERY.bodyForQuery(ctx.request().query())))); router .route(QUERY_PARAM.getPath()) - .handler( - ctx -> - controller( - ctx, - QUERY_PARAM, - () -> - ctx.response() - .setStatusCode(QUERY_PARAM.getStatus()) - .end(ctx.request().query()))); + .handler(ctx -> + controller( + ctx, + QUERY_PARAM, + () -> + ctx.response() + .setStatusCode(QUERY_PARAM.getStatus()) + .end(ctx.request().query()))); router .route(USER_BLOCK.getPath()) - .handler( - ctx -> - controller( - ctx, - USER_BLOCK, - () -> { - Blocking.forUser("user-to-block").blockIfMatch(); - ctx.response().end("Should not be reached"); - })); + .handler(ctx -> + controller( + ctx, + USER_BLOCK, + () -> { + Blocking.forUser("user-to-block").blockIfMatch(); + ctx.response().end("Should not be reached"); + })); router .route("/path/:id/param") - .handler( - ctx -> - controller( - ctx, - PATH_PARAM, - () -> - ctx.response() - .setStatusCode(PATH_PARAM.getStatus()) - .end(ctx.request().getParam("id")))); + .handler(ctx -> + controller( + ctx, + PATH_PARAM, + () -> + ctx.response() + .setStatusCode(PATH_PARAM.getStatus()) + .end(ctx.request().getParam("id")))); router .route(REDIRECT.getPath()) - .handler( - ctx -> - controller( - ctx, - REDIRECT, - () -> - ctx.response() - .setStatusCode(REDIRECT.getStatus()) - .putHeader("location", REDIRECT.getBody()) - .end())); + .handler(ctx -> + controller( + ctx, + REDIRECT, + () -> + ctx.response() + .setStatusCode(REDIRECT.getStatus()) + .putHeader("location", REDIRECT.getBody()) + .end())); router .route(ERROR.getPath()) - .handler( - ctx -> - controller( - ctx, - ERROR, - () -> ctx.response().setStatusCode(ERROR.getStatus()).end(ERROR.getBody()))); + .handler(ctx -> + controller( + ctx, + ERROR, + () -> ctx.response().setStatusCode(ERROR.getStatus()).end(ERROR.getBody()))); router .route(EXCEPTION.getPath()) .handler(ctx -> controller(ctx, EXCEPTION, IastVertx39TestVerticle::exception)); diff --git a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/src/latestDepTest/java/server/IastSinksVerticle.java b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/src/latestDepTest/java/server/IastSinksVerticle.java index a518d274e99..3286da7095d 100644 --- a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/src/latestDepTest/java/server/IastSinksVerticle.java +++ b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/src/latestDepTest/java/server/IastSinksVerticle.java @@ -16,26 +16,23 @@ public void start(final Promise startPromise) throws Exception { router.route().handler(BodyHandler.create()); router .route("/iast/sinks/reroute1") - .handler( - rc -> { - final String path = rc.request().getParam("path"); - rc.reroute(path); - }); + .handler(rc -> { + final String path = rc.request().getParam("path"); + rc.reroute(path); + }); router .route("/iast/sinks/reroute2") - .handler( - rc -> { - final String path = rc.request().getParam("path"); - rc.reroute(HttpMethod.GET, path); - }); + .handler(rc -> { + final String path = rc.request().getParam("path"); + rc.reroute(HttpMethod.GET, path); + }); router .route("/iast/sinks/redirectheader") - .handler( - rc -> { - final String name = rc.request().getParam("name"); - final String value = rc.request().getParam("value"); - rc.response().putHeader(name, value).end(); - }); + .handler(rc -> { + final String name = rc.request().getParam("name"); + final String value = rc.request().getParam("value"); + rc.response().putHeader(name, value).end(); + }); final EventBus eventBus = vertx.eventBus(); final HttpServerOptions serverOptions = new HttpServerOptions(); @@ -44,18 +41,16 @@ public void start(final Promise startPromise) throws Exception { .createHttpServer(serverOptions) .requestHandler(router) .listen(0) - .onSuccess( - server -> - eventBus - .request("PORT_DATA", server.actualPort()) - .andThen( - ar -> { - if (ar.succeeded()) { - startPromise.complete(); - } else { - startPromise.fail(ar.cause()); - } - })) + .onSuccess(server -> + eventBus + .request("PORT_DATA", server.actualPort()) + .andThen(ar -> { + if (ar.succeeded()) { + startPromise.complete(); + } else { + startPromise.fail(ar.cause()); + } + })) .onFailure(startPromise::fail); } } diff --git a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/src/latestDepTest/java/server/IastSourcesVerticle.java b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/src/latestDepTest/java/server/IastSourcesVerticle.java index 35cef8bc955..ebed93b22e5 100644 --- a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/src/latestDepTest/java/server/IastSourcesVerticle.java +++ b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/src/latestDepTest/java/server/IastSourcesVerticle.java @@ -27,107 +27,94 @@ public void start(final Promise startPromise) throws Exception { router.route().handler(BodyHandler.create()); router .route("/iast/sources/header") - .handler( - rc -> { - final String value = rc.request().getHeader("name"); - rc.response().end("Received " + value); - }); + .handler(rc -> { + final String value = rc.request().getHeader("name"); + rc.response().end("Received " + value); + }); router .route("/iast/sources/headers") - .handler( - rc -> { - final MultiMap value = rc.request().headers(); - rc.response().end("Received " + value.get("name")); - }); + .handler(rc -> { + final MultiMap value = rc.request().headers(); + rc.response().end("Received " + value.get("name")); + }); router .route("/iast/sources/cookie") - .handler( - rc -> { - final Cookie cookie = rc.request().getCookie("name"); - rc.response().end("Received " + cookie.getName() + " " + cookie.getValue()); - }); + .handler(rc -> { + final Cookie cookie = rc.request().getCookie("name"); + rc.response().end("Received " + cookie.getName() + " " + cookie.getValue()); + }); router .route("/iast/sources/path/:name") - .handler( - rc -> { - final String value = rc.pathParam("name"); - rc.response().end("Received " + value); - }); + .handler(rc -> { + final String value = rc.pathParam("name"); + rc.response().end("Received " + value); + }); router .route("/iast/sources/parameter") - .handler( - rc -> { - final String value = rc.request().getParam("name"); - rc.response().end("Received " + value); - }); + .handler(rc -> { + final String value = rc.request().getParam("name"); + rc.response().end("Received " + value); + }); router .route("/iast/sources/parameters") - .handler( - rc -> { - final MultiMap value = rc.request().params(); - rc.response().end("Received " + value.get("name")); - }); + .handler(rc -> { + final MultiMap value = rc.request().params(); + rc.response().end("Received " + value.get("name")); + }); router .route("/iast/sources/form") - .handler( - rc -> { - final String value = rc.request().getFormAttribute("name"); - rc.response().end("Received " + value); - }); + .handler(rc -> { + final String value = rc.request().getFormAttribute("name"); + rc.response().end("Received " + value); + }); router .route("/iast/sources/body/string") - .handler( - rc -> { - final String encoding = rc.request().getParam("encoding"); - if (encoding != null) { - rc.response().end("Received " + rc.body().asString(encoding)); - } else { - rc.response().end("Received " + rc.body().asString()); - } - }); + .handler(rc -> { + final String encoding = rc.request().getParam("encoding"); + if (encoding != null) { + rc.response().end("Received " + rc.body().asString(encoding)); + } else { + rc.response().end("Received " + rc.body().asString()); + } + }); router .route("/iast/sources/body/json") - .handler( - rc -> { - rc.response().end("Received " + rc.body().asJsonObject()); - }); + .handler(rc -> { + rc.response().end("Received " + rc.body().asJsonObject()); + }); router .route("/body/jsonArray") - .handler( - rc -> { - rc.response().end("Received " + rc.body().asJsonArray()); - }); + .handler(rc -> { + rc.response().end("Received " + rc.body().asJsonArray()); + }); router .route("/iast/sources/eventBus") - .handler( - rc -> { - final JsonObject target = rc.body().asJsonObject(); - rc.vertx() - .eventBus() - .request(EVENT_BUS_ENDPOINT, target) - .andThen( - reply -> { - if (reply.succeeded()) { - rc.response().end(reply.result().body().toString()); - } else { - rc.fail(reply.cause()); - } - }); - }); + .handler(rc -> { + final JsonObject target = rc.body().asJsonObject(); + rc.vertx() + .eventBus() + .request(EVENT_BUS_ENDPOINT, target) + .andThen(reply -> { + if (reply.succeeded()) { + rc.response().end(reply.result().body().toString()); + } else { + rc.fail(reply.cause()); + } + }); + }); router .route("/iast/vulnerabilities/insecureCookie") - .handler( - rc -> { - final String cookieName = rc.request().getParam("name"); - final String cookieValue = rc.request().getParam("value"); - final String secure = rc.request().getParam("secure"); - Cookie cookie = Cookie.cookie(cookieName, cookieValue); - if ("true".equals(secure)) { - cookie.setSecure(true); - } - rc.response().addCookie(cookie).end("Cookie Set"); - }); + .handler(rc -> { + final String cookieName = rc.request().getParam("name"); + final String cookieValue = rc.request().getParam("value"); + final String secure = rc.request().getParam("secure"); + Cookie cookie = Cookie.cookie(cookieName, cookieValue); + if ("true".equals(secure)) { + cookie.setSecure(true); + } + rc.response().addCookie(cookie).end("Cookie Set"); + }); final EventBus eventBus = vertx.eventBus(); eventBus.consumer( @@ -162,18 +149,16 @@ public void start(final Promise startPromise) throws Exception { .createHttpServer(serverOptions) .requestHandler(router) .listen(0) - .onSuccess( - server -> - eventBus - .request("PORT_DATA", server.actualPort()) - .andThen( - ar -> { - if (ar.succeeded()) { - startPromise.complete(); - } else { - startPromise.fail(ar.cause()); - } - })) + .onSuccess(server -> + eventBus + .request("PORT_DATA", server.actualPort()) + .andThen(ar -> { + if (ar.succeeded()) { + startPromise.complete(); + } else { + startPromise.fail(ar.cause()); + } + })) .onFailure(startPromise::fail); } } diff --git a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/src/latestDepTest/java/server/VertxTestServer.java b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/src/latestDepTest/java/server/VertxTestServer.java index 8b20617cc7c..803524acae7 100644 --- a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/src/latestDepTest/java/server/VertxTestServer.java +++ b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/src/latestDepTest/java/server/VertxTestServer.java @@ -48,152 +48,137 @@ public void start(final Promise startPromise) { router .route(SUCCESS.getPath()) - .handler( - ctx -> - controller( - ctx, - SUCCESS, - () -> - ctx.response().setStatusCode(SUCCESS.getStatus()).end(SUCCESS.getBody()))); + .handler(ctx -> + controller( + ctx, + SUCCESS, + () -> ctx.response().setStatusCode(SUCCESS.getStatus()).end(SUCCESS.getBody()))); router .route(FORWARDED.getPath()) - .handler( - ctx -> - controller( - ctx, - FORWARDED, - () -> - ctx.response() - .setStatusCode(FORWARDED.getStatus()) - .end(ctx.request().getHeader("x-forwarded-for")))); + .handler(ctx -> + controller( + ctx, + FORWARDED, + () -> + ctx.response() + .setStatusCode(FORWARDED.getStatus()) + .end(ctx.request().getHeader("x-forwarded-for")))); router .route(CREATED.getPath()) - .handler( - ctx -> - controller( - ctx, - CREATED, - () -> - ctx.request() - .bodyHandler( - body -> - ctx.response() - .setStatusCode(CREATED.getStatus()) - .end(CREATED.getBody() + ": " + body.toString())))); + .handler(ctx -> + controller( + ctx, + CREATED, + () -> + ctx.request() + .bodyHandler(body -> + ctx.response() + .setStatusCode(CREATED.getStatus()) + .end(CREATED.getBody() + ": " + body.toString())))); router.route(BODY_URLENCODED.getPath()).handler(BodyHandler.create()); router .route(BODY_URLENCODED.getPath()) - .handler( - ctx -> - controller( - ctx, - BODY_URLENCODED, - () -> { - String res = convertFormAttributes(ctx); - ctx.response().setStatusCode(BODY_URLENCODED.getStatus()).end(res); - })); + .handler(ctx -> + controller( + ctx, + BODY_URLENCODED, + () -> { + String res = convertFormAttributes(ctx); + ctx.response().setStatusCode(BODY_URLENCODED.getStatus()).end(res); + })); router.route(BODY_MULTIPART.getPath()).handler(BodyHandler.create()); router .route(BODY_MULTIPART.getPath()) - .handler( - ctx -> - controller( - ctx, - BODY_MULTIPART, - () -> { - ctx.fileUploads(); - String res = convertFormAttributes(ctx); - ctx.response().setStatusCode(BODY_MULTIPART.getStatus()).end(res); - })); + .handler(ctx -> + controller( + ctx, + BODY_MULTIPART, + () -> { + ctx.fileUploads(); + String res = convertFormAttributes(ctx); + ctx.response().setStatusCode(BODY_MULTIPART.getStatus()).end(res); + })); router.route(BODY_JSON.getPath()).handler(BodyHandler.create()); router .route(BODY_JSON.getPath()) - .handler( - ctx -> - controller( - ctx, - BODY_JSON, - () -> { - JsonObject json = ctx.body().asJsonObject(); - ctx.response().setStatusCode(BODY_JSON.getStatus()).end(json.toString()); - })); + .handler(ctx -> + controller( + ctx, + BODY_JSON, + () -> { + JsonObject json = ctx.body().asJsonObject(); + ctx.response().setStatusCode(BODY_JSON.getStatus()).end(json.toString()); + })); router .route(QUERY_ENCODED_BOTH.getRawPath()) - .handler( - ctx -> - controller( - ctx, - QUERY_ENCODED_BOTH, - () -> - ctx.response() - .setStatusCode(QUERY_ENCODED_BOTH.getStatus()) - .end(QUERY_ENCODED_BOTH.bodyForQuery(ctx.request().query())))); + .handler(ctx -> + controller( + ctx, + QUERY_ENCODED_BOTH, + () -> + ctx.response() + .setStatusCode(QUERY_ENCODED_BOTH.getStatus()) + .end(QUERY_ENCODED_BOTH.bodyForQuery(ctx.request().query())))); router .route(QUERY_ENCODED_QUERY.getPath()) - .handler( - ctx -> - controller( - ctx, - QUERY_ENCODED_QUERY, - () -> - ctx.response() - .setStatusCode(QUERY_ENCODED_QUERY.getStatus()) - .end(QUERY_ENCODED_QUERY.bodyForQuery(ctx.request().query())))); + .handler(ctx -> + controller( + ctx, + QUERY_ENCODED_QUERY, + () -> + ctx.response() + .setStatusCode(QUERY_ENCODED_QUERY.getStatus()) + .end(QUERY_ENCODED_QUERY.bodyForQuery(ctx.request().query())))); router .route(QUERY_PARAM.getPath()) - .handler( - ctx -> - controller( - ctx, - QUERY_PARAM, - () -> - ctx.response() - .setStatusCode(QUERY_PARAM.getStatus()) - .end(ctx.request().query()))); + .handler(ctx -> + controller( + ctx, + QUERY_PARAM, + () -> + ctx.response() + .setStatusCode(QUERY_PARAM.getStatus()) + .end(ctx.request().query()))); router .route(USER_BLOCK.getPath()) - .handler( - ctx -> - controller( - ctx, - USER_BLOCK, - () -> { - Blocking.forUser("user-to-block").blockIfMatch(); - ctx.response().end("Should not be reached"); - })); + .handler(ctx -> + controller( + ctx, + USER_BLOCK, + () -> { + Blocking.forUser("user-to-block").blockIfMatch(); + ctx.response().end("Should not be reached"); + })); router .route("/path/:id/param") - .handler( - ctx -> - controller( - ctx, - PATH_PARAM, - () -> - ctx.response() - .setStatusCode(PATH_PARAM.getStatus()) - .end(ctx.request().getParam("id")))); + .handler(ctx -> + controller( + ctx, + PATH_PARAM, + () -> + ctx.response() + .setStatusCode(PATH_PARAM.getStatus()) + .end(ctx.request().getParam("id")))); router .route(REDIRECT.getPath()) - .handler( - ctx -> - controller( - ctx, - REDIRECT, - () -> - ctx.response() - .setStatusCode(REDIRECT.getStatus()) - .putHeader("location", REDIRECT.getBody()) - .end())); + .handler(ctx -> + controller( + ctx, + REDIRECT, + () -> + ctx.response() + .setStatusCode(REDIRECT.getStatus()) + .putHeader("location", REDIRECT.getBody()) + .end())); router .route(ERROR.getPath()) - .handler( - ctx -> - controller( - ctx, - ERROR, - () -> ctx.response().setStatusCode(ERROR.getStatus()).end(ERROR.getBody()))); + .handler(ctx -> + controller( + ctx, + ERROR, + () -> ctx.response().setStatusCode(ERROR.getStatus()).end(ERROR.getBody()))); router .route(EXCEPTION.getPath()) .handler(ctx -> controller(ctx, EXCEPTION, VertxTestServer::exception)); @@ -212,22 +197,20 @@ public void start(final Promise startPromise) { .createHttpServer(new HttpServerOptions().setHandle100ContinueAutomatically(true)) .requestHandler(router) .listen(port) - .andThen( - event -> { - // send this though event bus and succeed deploy after successful response - int actualPort = event.result().actualPort(); - vertx - .eventBus() - .request(PORT_DATA_ADDRESS, actualPort) - .andThen( - ar -> { - if (ar.succeeded()) { - startPromise.complete(); - } else { - startPromise.fail(ar.cause()); - } - }); - }); + .andThen(event -> { + // send this though event bus and succeed deploy after successful response + int actualPort = event.result().actualPort(); + vertx + .eventBus() + .request(PORT_DATA_ADDRESS, actualPort) + .andThen(ar -> { + if (ar.succeeded()) { + startPromise.complete(); + } else { + startPromise.fail(ar.cause()); + } + }); + }); } private static String convertFormAttributes(RoutingContext ctx) { diff --git a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/src/test/java/datadog/trace/instrumentation/vertx_4_0/server/RoutingContextSessionAdviceAppSecTest.java b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/src/test/java/datadog/trace/instrumentation/vertx_4_0/server/RoutingContextSessionAdviceAppSecTest.java index 45a87e4a3bd..c0e29dd9417 100644 --- a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/src/test/java/datadog/trace/instrumentation/vertx_4_0/server/RoutingContextSessionAdviceAppSecTest.java +++ b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/src/test/java/datadog/trace/instrumentation/vertx_4_0/server/RoutingContextSessionAdviceAppSecTest.java @@ -65,11 +65,10 @@ void setUp() { CallbackProvider callbackProvider = mock(CallbackProvider.class); when(callbackProvider.getCallback(EVENTS.requestSession())) - .thenReturn( - (ctx, id) -> { - receivedSessionId = id; - return flow; - }); + .thenReturn((ctx, id) -> { + receivedSessionId = id; + return flow; + }); AgentTracer.TracerAPI tracer = mock(AgentTracer.TracerAPI.class); when(tracer.activeSpan()).thenReturn(span); when(tracer.getCallbackProvider(RequestContextSlot.APPSEC)).thenReturn(callbackProvider); diff --git a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/src/test/java/server/IastSinksVerticle.java b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/src/test/java/server/IastSinksVerticle.java index 1b274eb1d1a..a2743916859 100644 --- a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/src/test/java/server/IastSinksVerticle.java +++ b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/src/test/java/server/IastSinksVerticle.java @@ -16,26 +16,23 @@ public void start(final Promise startPromise) throws Exception { router.route().handler(BodyHandler.create()); router .route("/iast/sinks/reroute1") - .handler( - rc -> { - final String path = rc.request().getParam("path"); - rc.reroute(path); - }); + .handler(rc -> { + final String path = rc.request().getParam("path"); + rc.reroute(path); + }); router .route("/iast/sinks/reroute2") - .handler( - rc -> { - final String path = rc.request().getParam("path"); - rc.reroute(HttpMethod.GET, path); - }); + .handler(rc -> { + final String path = rc.request().getParam("path"); + rc.reroute(HttpMethod.GET, path); + }); router .route("/iast/sinks/redirectheader") - .handler( - rc -> { - final String name = rc.request().getParam("name"); - final String value = rc.request().getParam("value"); - rc.response().putHeader(name, value).end(); - }); + .handler(rc -> { + final String name = rc.request().getParam("name"); + final String value = rc.request().getParam("value"); + rc.response().putHeader(name, value).end(); + }); final EventBus eventBus = vertx.eventBus(); final HttpServerOptions serverOptions = new HttpServerOptions(); @@ -44,18 +41,17 @@ public void start(final Promise startPromise) throws Exception { .createHttpServer(serverOptions) .requestHandler(router) .listen(0) - .onSuccess( - server -> - eventBus.request( - "PORT_DATA", - server.actualPort(), - ar -> { - if (ar.succeeded()) { - startPromise.complete(); - } else { - startPromise.fail(ar.cause()); - } - })) + .onSuccess(server -> + eventBus.request( + "PORT_DATA", + server.actualPort(), + ar -> { + if (ar.succeeded()) { + startPromise.complete(); + } else { + startPromise.fail(ar.cause()); + } + })) .onFailure(startPromise::fail); } } diff --git a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/src/test/java/server/IastSourcesVerticle.java b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/src/test/java/server/IastSourcesVerticle.java index 9964b8909a4..69185f65997 100644 --- a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/src/test/java/server/IastSourcesVerticle.java +++ b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/src/test/java/server/IastSourcesVerticle.java @@ -27,108 +27,96 @@ public void start(final Promise startPromise) throws Exception { router.route().handler(BodyHandler.create()); router .route("/iast/sources/header") - .handler( - rc -> { - final String value = rc.request().getHeader("name"); - rc.response().end("Received " + value); - }); + .handler(rc -> { + final String value = rc.request().getHeader("name"); + rc.response().end("Received " + value); + }); router .route("/iast/sources/headers") - .handler( - rc -> { - final MultiMap value = rc.request().headers(); - rc.response().end("Received " + value.get("name")); - }); + .handler(rc -> { + final MultiMap value = rc.request().headers(); + rc.response().end("Received " + value.get("name")); + }); router .route("/iast/sources/cookie") - .handler( - rc -> { - final Cookie cookie = rc.getCookie("name"); - rc.response().end("Received " + cookie.getName() + " " + cookie.getValue()); - }); + .handler(rc -> { + final Cookie cookie = rc.getCookie("name"); + rc.response().end("Received " + cookie.getName() + " " + cookie.getValue()); + }); router .route("/iast/sources/path/:name") - .handler( - rc -> { - final String value = rc.pathParam("name"); - rc.response().end("Received " + value); - }); + .handler(rc -> { + final String value = rc.pathParam("name"); + rc.response().end("Received " + value); + }); router .route("/iast/sources/parameter") - .handler( - rc -> { - final String value = rc.request().getParam("name"); - rc.response().end("Received " + value); - }); + .handler(rc -> { + final String value = rc.request().getParam("name"); + rc.response().end("Received " + value); + }); router .route("/iast/sources/parameters") - .handler( - rc -> { - final MultiMap value = rc.request().params(); - rc.response().end("Received " + value.get("name")); - }); + .handler(rc -> { + final MultiMap value = rc.request().params(); + rc.response().end("Received " + value.get("name")); + }); router .route("/iast/sources/form") - .handler( - rc -> { - final String value = rc.request().getFormAttribute("name"); - rc.response().end("Received " + value); - }); + .handler(rc -> { + final String value = rc.request().getFormAttribute("name"); + rc.response().end("Received " + value); + }); router .route("/iast/sources/body/string") - .handler( - rc -> { - final String encoding = rc.request().getParam("encoding"); - if (encoding != null) { - rc.response().end("Received " + rc.getBodyAsString(encoding)); - } else { - rc.response().end("Received " + rc.getBodyAsString()); - } - }); + .handler(rc -> { + final String encoding = rc.request().getParam("encoding"); + if (encoding != null) { + rc.response().end("Received " + rc.getBodyAsString(encoding)); + } else { + rc.response().end("Received " + rc.getBodyAsString()); + } + }); router .route("/iast/sources/body/json") - .handler( - rc -> { - rc.response().end("Received " + rc.getBodyAsJson()); - }); + .handler(rc -> { + rc.response().end("Received " + rc.getBodyAsJson()); + }); router .route("/body/jsonArray") - .handler( - rc -> { - rc.response().end("Received " + rc.getBodyAsJsonArray()); - }); + .handler(rc -> { + rc.response().end("Received " + rc.getBodyAsJsonArray()); + }); router .route("/iast/sources/eventBus") - .handler( - rc -> { - final JsonObject target = rc.getBodyAsJson(); - rc.vertx() - .eventBus() - .request( - EVENT_BUS_ENDPOINT, - target, - reply -> { - if (reply.succeeded()) { - rc.response().end(reply.result().body().toString()); - } else { - rc.fail(reply.cause()); - } - }); - }); + .handler(rc -> { + final JsonObject target = rc.getBodyAsJson(); + rc.vertx() + .eventBus() + .request( + EVENT_BUS_ENDPOINT, + target, + reply -> { + if (reply.succeeded()) { + rc.response().end(reply.result().body().toString()); + } else { + rc.fail(reply.cause()); + } + }); + }); router .route("/iast/vulnerabilities/insecureCookie") - .handler( - rc -> { - final String cookieName = rc.request().getParam("name"); - final String cookieValue = rc.request().getParam("value"); - final String secure = rc.request().getParam("secure"); - Cookie cookie = Cookie.cookie(cookieName, cookieValue); - if ("true".equals(secure)) { - cookie.setSecure(true); - } - rc.response().addCookie(cookie).end("Cookie Set"); - }); + .handler(rc -> { + final String cookieName = rc.request().getParam("name"); + final String cookieValue = rc.request().getParam("value"); + final String secure = rc.request().getParam("secure"); + Cookie cookie = Cookie.cookie(cookieName, cookieValue); + if ("true".equals(secure)) { + cookie.setSecure(true); + } + rc.response().addCookie(cookie).end("Cookie Set"); + }); final EventBus eventBus = vertx.eventBus(); eventBus.consumer( @@ -163,18 +151,17 @@ public void start(final Promise startPromise) throws Exception { .createHttpServer(serverOptions) .requestHandler(router) .listen(0) - .onSuccess( - server -> - eventBus.request( - "PORT_DATA", - server.actualPort(), - ar -> { - if (ar.succeeded()) { - startPromise.complete(); - } else { - startPromise.fail(ar.cause()); - } - })) + .onSuccess(server -> + eventBus.request( + "PORT_DATA", + server.actualPort(), + ar -> { + if (ar.succeeded()) { + startPromise.complete(); + } else { + startPromise.fail(ar.cause()); + } + })) .onFailure(startPromise::fail); } } diff --git a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/src/test/java/server/RouteHandlerExceptionHandlerTest.java b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/src/test/java/server/RouteHandlerExceptionHandlerTest.java index fb91f77a4b7..8c83c35efed 100644 --- a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/src/test/java/server/RouteHandlerExceptionHandlerTest.java +++ b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/src/test/java/server/RouteHandlerExceptionHandlerTest.java @@ -50,17 +50,16 @@ static void startServer() throws Exception { Router router = Router.router(vertx); router .route("/fail") - .handler( - ctx -> { - ResponseExceptionFiringHelper.fireException( - ctx.response(), new IOException("simulated response I/O failure")); - try { - ctx.response().setStatusCode(500).end("error"); - } catch (IllegalStateException ignore) { - // handleException may have left the response in a state where end() is rejected; - // the span is already finished by our addEndHandler callback. - } - }); + .handler(ctx -> { + ResponseExceptionFiringHelper.fireException( + ctx.response(), new IOException("simulated response I/O failure")); + try { + ctx.response().setStatusCode(500).end("error"); + } catch (IllegalStateException ignore) { + // handleException may have left the response in a state where end() is rejected; + // the span is already finished by our addEndHandler callback. + } + }); CountDownLatch ready = new CountDownLatch(1); server = diff --git a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/src/test/java/server/VertxTestServer.java b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/src/test/java/server/VertxTestServer.java index 53c8236ef78..5e8d0629be8 100644 --- a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/src/test/java/server/VertxTestServer.java +++ b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/src/test/java/server/VertxTestServer.java @@ -48,153 +48,138 @@ public void start(final Promise startPromise) { router .route(SUCCESS.getPath()) - .handler( - ctx -> - controller( - ctx, - SUCCESS, - () -> - ctx.response().setStatusCode(SUCCESS.getStatus()).end(SUCCESS.getBody()))); + .handler(ctx -> + controller( + ctx, + SUCCESS, + () -> ctx.response().setStatusCode(SUCCESS.getStatus()).end(SUCCESS.getBody()))); router .route(FORWARDED.getPath()) - .handler( - ctx -> - controller( - ctx, - FORWARDED, - () -> - ctx.response() - .setStatusCode(FORWARDED.getStatus()) - .end(ctx.request().getHeader("x-forwarded-for")))); + .handler(ctx -> + controller( + ctx, + FORWARDED, + () -> + ctx.response() + .setStatusCode(FORWARDED.getStatus()) + .end(ctx.request().getHeader("x-forwarded-for")))); router .route(CREATED.getPath()) - .handler( - ctx -> - controller( - ctx, - CREATED, - () -> - ctx.request() - .bodyHandler( - body -> - ctx.response() - .setStatusCode(CREATED.getStatus()) - .end(CREATED.getBody() + ": " + body.toString())))); + .handler(ctx -> + controller( + ctx, + CREATED, + () -> + ctx.request() + .bodyHandler(body -> + ctx.response() + .setStatusCode(CREATED.getStatus()) + .end(CREATED.getBody() + ": " + body.toString())))); router.route(BODY_URLENCODED.getPath()).handler(BodyHandler.create()); router .route(BODY_URLENCODED.getPath()) - .handler( - ctx -> - controller( - ctx, - BODY_URLENCODED, - () -> { - String res = convertFormAttributes(ctx); - ctx.response().setStatusCode(BODY_URLENCODED.getStatus()).end(res); - })); + .handler(ctx -> + controller( + ctx, + BODY_URLENCODED, + () -> { + String res = convertFormAttributes(ctx); + ctx.response().setStatusCode(BODY_URLENCODED.getStatus()).end(res); + })); router.route(BODY_MULTIPART.getPath()).handler(BodyHandler.create()); router .route(BODY_MULTIPART.getPath()) - .handler( - ctx -> - controller( - ctx, - BODY_MULTIPART, - () -> { - ctx.fileUploads(); - String res = convertFormAttributes(ctx); - ctx.response().setStatusCode(BODY_MULTIPART.getStatus()).end(res); - })); + .handler(ctx -> + controller( + ctx, + BODY_MULTIPART, + () -> { + ctx.fileUploads(); + String res = convertFormAttributes(ctx); + ctx.response().setStatusCode(BODY_MULTIPART.getStatus()).end(res); + })); router.route(BODY_JSON.getPath()).handler(BodyHandler.create()); router .route(BODY_JSON.getPath()) - .handler( - ctx -> - controller( - ctx, - BODY_JSON, - () -> { - JsonObject json = ctx.getBodyAsJson(); - ctx.response().setStatusCode(BODY_JSON.getStatus()); - ctx.json(json); - })); + .handler(ctx -> + controller( + ctx, + BODY_JSON, + () -> { + JsonObject json = ctx.getBodyAsJson(); + ctx.response().setStatusCode(BODY_JSON.getStatus()); + ctx.json(json); + })); router .route(QUERY_ENCODED_BOTH.getRawPath()) - .handler( - ctx -> - controller( - ctx, - QUERY_ENCODED_BOTH, - () -> - ctx.response() - .setStatusCode(QUERY_ENCODED_BOTH.getStatus()) - .end(QUERY_ENCODED_BOTH.bodyForQuery(ctx.request().query())))); + .handler(ctx -> + controller( + ctx, + QUERY_ENCODED_BOTH, + () -> + ctx.response() + .setStatusCode(QUERY_ENCODED_BOTH.getStatus()) + .end(QUERY_ENCODED_BOTH.bodyForQuery(ctx.request().query())))); router .route(QUERY_ENCODED_QUERY.getPath()) - .handler( - ctx -> - controller( - ctx, - QUERY_ENCODED_QUERY, - () -> - ctx.response() - .setStatusCode(QUERY_ENCODED_QUERY.getStatus()) - .end(QUERY_ENCODED_QUERY.bodyForQuery(ctx.request().query())))); + .handler(ctx -> + controller( + ctx, + QUERY_ENCODED_QUERY, + () -> + ctx.response() + .setStatusCode(QUERY_ENCODED_QUERY.getStatus()) + .end(QUERY_ENCODED_QUERY.bodyForQuery(ctx.request().query())))); router .route(QUERY_PARAM.getPath()) - .handler( - ctx -> - controller( - ctx, - QUERY_PARAM, - () -> - ctx.response() - .setStatusCode(QUERY_PARAM.getStatus()) - .end(ctx.request().query()))); + .handler(ctx -> + controller( + ctx, + QUERY_PARAM, + () -> + ctx.response() + .setStatusCode(QUERY_PARAM.getStatus()) + .end(ctx.request().query()))); router .route(USER_BLOCK.getPath()) - .handler( - ctx -> - controller( - ctx, - USER_BLOCK, - () -> { - Blocking.forUser("user-to-block").blockIfMatch(); - ctx.response().end("Should not be reached"); - })); + .handler(ctx -> + controller( + ctx, + USER_BLOCK, + () -> { + Blocking.forUser("user-to-block").blockIfMatch(); + ctx.response().end("Should not be reached"); + })); router .route("/path/:id/param") - .handler( - ctx -> - controller( - ctx, - PATH_PARAM, - () -> - ctx.response() - .setStatusCode(PATH_PARAM.getStatus()) - .end(ctx.request().getParam("id")))); + .handler(ctx -> + controller( + ctx, + PATH_PARAM, + () -> + ctx.response() + .setStatusCode(PATH_PARAM.getStatus()) + .end(ctx.request().getParam("id")))); router .route(REDIRECT.getPath()) - .handler( - ctx -> - controller( - ctx, - REDIRECT, - () -> - ctx.response() - .setStatusCode(REDIRECT.getStatus()) - .putHeader("location", REDIRECT.getBody()) - .end())); + .handler(ctx -> + controller( + ctx, + REDIRECT, + () -> + ctx.response() + .setStatusCode(REDIRECT.getStatus()) + .putHeader("location", REDIRECT.getBody()) + .end())); router .route(ERROR.getPath()) - .handler( - ctx -> - controller( - ctx, - ERROR, - () -> ctx.response().setStatusCode(ERROR.getStatus()).end(ERROR.getBody()))); + .handler(ctx -> + controller( + ctx, + ERROR, + () -> ctx.response().setStatusCode(ERROR.getStatus()).end(ERROR.getBody()))); router .route(EXCEPTION.getPath()) .handler(ctx -> controller(ctx, EXCEPTION, VertxTestServer::exception)); diff --git a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-5.0/src/test/java/server/HttpServerResponseEndHandlerInstrumentationTest.java b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-5.0/src/test/java/server/HttpServerResponseEndHandlerInstrumentationTest.java index 7dd284f456d..ec053acaa92 100644 --- a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-5.0/src/test/java/server/HttpServerResponseEndHandlerInstrumentationTest.java +++ b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-5.0/src/test/java/server/HttpServerResponseEndHandlerInstrumentationTest.java @@ -58,14 +58,13 @@ static void startServer() throws Exception { .createHttpServer(new HttpServerOptions().setHttp2ClearTextEnabled(true)) .requestHandler(router) .listen(port) - .andThen( - result -> { - if (result.failed()) { - throw new RuntimeException("Failed to start Vert.x server", result.cause()); - } - server = result.result(); - ready.countDown(); - }); + .andThen(result -> { + if (result.failed()) { + throw new RuntimeException("Failed to start Vert.x server", result.cause()); + } + server = result.result(); + ready.countDown(); + }); if (!ready.await(10, TimeUnit.SECONDS)) { throw new IllegalStateException("Vert.x server did not start in time"); } @@ -132,9 +131,8 @@ void wrapsApplicationEndHandlerOnVertx51Http2Response() throws Exception { private Future> collectResponse(HttpClientResponse response) { return response .body() - .map( - body -> - new SimpleEntry<>(response.statusCode(), body.toString(StandardCharsets.UTF_8))); + .map(body -> + new SimpleEntry<>(response.statusCode(), body.toString(StandardCharsets.UTF_8))); } private static boolean hasVertx51Http1Response() { diff --git a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-5.0/src/test/java/server/IastSinksVerticle.java b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-5.0/src/test/java/server/IastSinksVerticle.java index a518d274e99..3286da7095d 100644 --- a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-5.0/src/test/java/server/IastSinksVerticle.java +++ b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-5.0/src/test/java/server/IastSinksVerticle.java @@ -16,26 +16,23 @@ public void start(final Promise startPromise) throws Exception { router.route().handler(BodyHandler.create()); router .route("/iast/sinks/reroute1") - .handler( - rc -> { - final String path = rc.request().getParam("path"); - rc.reroute(path); - }); + .handler(rc -> { + final String path = rc.request().getParam("path"); + rc.reroute(path); + }); router .route("/iast/sinks/reroute2") - .handler( - rc -> { - final String path = rc.request().getParam("path"); - rc.reroute(HttpMethod.GET, path); - }); + .handler(rc -> { + final String path = rc.request().getParam("path"); + rc.reroute(HttpMethod.GET, path); + }); router .route("/iast/sinks/redirectheader") - .handler( - rc -> { - final String name = rc.request().getParam("name"); - final String value = rc.request().getParam("value"); - rc.response().putHeader(name, value).end(); - }); + .handler(rc -> { + final String name = rc.request().getParam("name"); + final String value = rc.request().getParam("value"); + rc.response().putHeader(name, value).end(); + }); final EventBus eventBus = vertx.eventBus(); final HttpServerOptions serverOptions = new HttpServerOptions(); @@ -44,18 +41,16 @@ public void start(final Promise startPromise) throws Exception { .createHttpServer(serverOptions) .requestHandler(router) .listen(0) - .onSuccess( - server -> - eventBus - .request("PORT_DATA", server.actualPort()) - .andThen( - ar -> { - if (ar.succeeded()) { - startPromise.complete(); - } else { - startPromise.fail(ar.cause()); - } - })) + .onSuccess(server -> + eventBus + .request("PORT_DATA", server.actualPort()) + .andThen(ar -> { + if (ar.succeeded()) { + startPromise.complete(); + } else { + startPromise.fail(ar.cause()); + } + })) .onFailure(startPromise::fail); } } diff --git a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-5.0/src/test/java/server/IastSourcesVerticle.java b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-5.0/src/test/java/server/IastSourcesVerticle.java index 35cef8bc955..ebed93b22e5 100644 --- a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-5.0/src/test/java/server/IastSourcesVerticle.java +++ b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-5.0/src/test/java/server/IastSourcesVerticle.java @@ -27,107 +27,94 @@ public void start(final Promise startPromise) throws Exception { router.route().handler(BodyHandler.create()); router .route("/iast/sources/header") - .handler( - rc -> { - final String value = rc.request().getHeader("name"); - rc.response().end("Received " + value); - }); + .handler(rc -> { + final String value = rc.request().getHeader("name"); + rc.response().end("Received " + value); + }); router .route("/iast/sources/headers") - .handler( - rc -> { - final MultiMap value = rc.request().headers(); - rc.response().end("Received " + value.get("name")); - }); + .handler(rc -> { + final MultiMap value = rc.request().headers(); + rc.response().end("Received " + value.get("name")); + }); router .route("/iast/sources/cookie") - .handler( - rc -> { - final Cookie cookie = rc.request().getCookie("name"); - rc.response().end("Received " + cookie.getName() + " " + cookie.getValue()); - }); + .handler(rc -> { + final Cookie cookie = rc.request().getCookie("name"); + rc.response().end("Received " + cookie.getName() + " " + cookie.getValue()); + }); router .route("/iast/sources/path/:name") - .handler( - rc -> { - final String value = rc.pathParam("name"); - rc.response().end("Received " + value); - }); + .handler(rc -> { + final String value = rc.pathParam("name"); + rc.response().end("Received " + value); + }); router .route("/iast/sources/parameter") - .handler( - rc -> { - final String value = rc.request().getParam("name"); - rc.response().end("Received " + value); - }); + .handler(rc -> { + final String value = rc.request().getParam("name"); + rc.response().end("Received " + value); + }); router .route("/iast/sources/parameters") - .handler( - rc -> { - final MultiMap value = rc.request().params(); - rc.response().end("Received " + value.get("name")); - }); + .handler(rc -> { + final MultiMap value = rc.request().params(); + rc.response().end("Received " + value.get("name")); + }); router .route("/iast/sources/form") - .handler( - rc -> { - final String value = rc.request().getFormAttribute("name"); - rc.response().end("Received " + value); - }); + .handler(rc -> { + final String value = rc.request().getFormAttribute("name"); + rc.response().end("Received " + value); + }); router .route("/iast/sources/body/string") - .handler( - rc -> { - final String encoding = rc.request().getParam("encoding"); - if (encoding != null) { - rc.response().end("Received " + rc.body().asString(encoding)); - } else { - rc.response().end("Received " + rc.body().asString()); - } - }); + .handler(rc -> { + final String encoding = rc.request().getParam("encoding"); + if (encoding != null) { + rc.response().end("Received " + rc.body().asString(encoding)); + } else { + rc.response().end("Received " + rc.body().asString()); + } + }); router .route("/iast/sources/body/json") - .handler( - rc -> { - rc.response().end("Received " + rc.body().asJsonObject()); - }); + .handler(rc -> { + rc.response().end("Received " + rc.body().asJsonObject()); + }); router .route("/body/jsonArray") - .handler( - rc -> { - rc.response().end("Received " + rc.body().asJsonArray()); - }); + .handler(rc -> { + rc.response().end("Received " + rc.body().asJsonArray()); + }); router .route("/iast/sources/eventBus") - .handler( - rc -> { - final JsonObject target = rc.body().asJsonObject(); - rc.vertx() - .eventBus() - .request(EVENT_BUS_ENDPOINT, target) - .andThen( - reply -> { - if (reply.succeeded()) { - rc.response().end(reply.result().body().toString()); - } else { - rc.fail(reply.cause()); - } - }); - }); + .handler(rc -> { + final JsonObject target = rc.body().asJsonObject(); + rc.vertx() + .eventBus() + .request(EVENT_BUS_ENDPOINT, target) + .andThen(reply -> { + if (reply.succeeded()) { + rc.response().end(reply.result().body().toString()); + } else { + rc.fail(reply.cause()); + } + }); + }); router .route("/iast/vulnerabilities/insecureCookie") - .handler( - rc -> { - final String cookieName = rc.request().getParam("name"); - final String cookieValue = rc.request().getParam("value"); - final String secure = rc.request().getParam("secure"); - Cookie cookie = Cookie.cookie(cookieName, cookieValue); - if ("true".equals(secure)) { - cookie.setSecure(true); - } - rc.response().addCookie(cookie).end("Cookie Set"); - }); + .handler(rc -> { + final String cookieName = rc.request().getParam("name"); + final String cookieValue = rc.request().getParam("value"); + final String secure = rc.request().getParam("secure"); + Cookie cookie = Cookie.cookie(cookieName, cookieValue); + if ("true".equals(secure)) { + cookie.setSecure(true); + } + rc.response().addCookie(cookie).end("Cookie Set"); + }); final EventBus eventBus = vertx.eventBus(); eventBus.consumer( @@ -162,18 +149,16 @@ public void start(final Promise startPromise) throws Exception { .createHttpServer(serverOptions) .requestHandler(router) .listen(0) - .onSuccess( - server -> - eventBus - .request("PORT_DATA", server.actualPort()) - .andThen( - ar -> { - if (ar.succeeded()) { - startPromise.complete(); - } else { - startPromise.fail(ar.cause()); - } - })) + .onSuccess(server -> + eventBus + .request("PORT_DATA", server.actualPort()) + .andThen(ar -> { + if (ar.succeeded()) { + startPromise.complete(); + } else { + startPromise.fail(ar.cause()); + } + })) .onFailure(startPromise::fail); } } diff --git a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-5.0/src/test/java/server/VertxTestServer.java b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-5.0/src/test/java/server/VertxTestServer.java index 24902867163..b608b69850b 100644 --- a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-5.0/src/test/java/server/VertxTestServer.java +++ b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-5.0/src/test/java/server/VertxTestServer.java @@ -48,153 +48,138 @@ public void start(final Promise startPromise) { router .route(SUCCESS.getPath()) - .handler( - ctx -> - controller( - ctx, - SUCCESS, - () -> - ctx.response().setStatusCode(SUCCESS.getStatus()).end(SUCCESS.getBody()))); + .handler(ctx -> + controller( + ctx, + SUCCESS, + () -> ctx.response().setStatusCode(SUCCESS.getStatus()).end(SUCCESS.getBody()))); router .route(FORWARDED.getPath()) - .handler( - ctx -> - controller( - ctx, - FORWARDED, - () -> - ctx.response() - .setStatusCode(FORWARDED.getStatus()) - .end(ctx.request().getHeader("x-forwarded-for")))); + .handler(ctx -> + controller( + ctx, + FORWARDED, + () -> + ctx.response() + .setStatusCode(FORWARDED.getStatus()) + .end(ctx.request().getHeader("x-forwarded-for")))); router .route(CREATED.getPath()) - .handler( - ctx -> - controller( - ctx, - CREATED, - () -> - ctx.request() - .bodyHandler( - body -> - ctx.response() - .setStatusCode(CREATED.getStatus()) - .end(CREATED.getBody() + ": " + body.toString())))); + .handler(ctx -> + controller( + ctx, + CREATED, + () -> + ctx.request() + .bodyHandler(body -> + ctx.response() + .setStatusCode(CREATED.getStatus()) + .end(CREATED.getBody() + ": " + body.toString())))); router.route(BODY_URLENCODED.getPath()).handler(BodyHandler.create()); router .route(BODY_URLENCODED.getPath()) - .handler( - ctx -> - controller( - ctx, - BODY_URLENCODED, - () -> { - String res = convertFormAttributes(ctx); - ctx.response().setStatusCode(BODY_URLENCODED.getStatus()).end(res); - })); + .handler(ctx -> + controller( + ctx, + BODY_URLENCODED, + () -> { + String res = convertFormAttributes(ctx); + ctx.response().setStatusCode(BODY_URLENCODED.getStatus()).end(res); + })); router.route(BODY_MULTIPART.getPath()).handler(BodyHandler.create()); router .route(BODY_MULTIPART.getPath()) - .handler( - ctx -> - controller( - ctx, - BODY_MULTIPART, - () -> { - ctx.fileUploads(); - String res = convertFormAttributes(ctx); - ctx.response().setStatusCode(BODY_MULTIPART.getStatus()).end(res); - })); + .handler(ctx -> + controller( + ctx, + BODY_MULTIPART, + () -> { + ctx.fileUploads(); + String res = convertFormAttributes(ctx); + ctx.response().setStatusCode(BODY_MULTIPART.getStatus()).end(res); + })); router.route(BODY_JSON.getPath()).handler(BodyHandler.create()); router .route(BODY_JSON.getPath()) - .handler( - ctx -> - controller( - ctx, - BODY_JSON, - () -> { - JsonObject json = ctx.body().asJsonObject(); - ctx.response().setStatusCode(BODY_JSON.getStatus()); - ctx.json(json); - })); + .handler(ctx -> + controller( + ctx, + BODY_JSON, + () -> { + JsonObject json = ctx.body().asJsonObject(); + ctx.response().setStatusCode(BODY_JSON.getStatus()); + ctx.json(json); + })); router .route(QUERY_ENCODED_BOTH.getRawPath()) - .handler( - ctx -> - controller( - ctx, - QUERY_ENCODED_BOTH, - () -> - ctx.response() - .setStatusCode(QUERY_ENCODED_BOTH.getStatus()) - .end(QUERY_ENCODED_BOTH.bodyForQuery(ctx.request().query())))); + .handler(ctx -> + controller( + ctx, + QUERY_ENCODED_BOTH, + () -> + ctx.response() + .setStatusCode(QUERY_ENCODED_BOTH.getStatus()) + .end(QUERY_ENCODED_BOTH.bodyForQuery(ctx.request().query())))); router .route(QUERY_ENCODED_QUERY.getPath()) - .handler( - ctx -> - controller( - ctx, - QUERY_ENCODED_QUERY, - () -> - ctx.response() - .setStatusCode(QUERY_ENCODED_QUERY.getStatus()) - .end(QUERY_ENCODED_QUERY.bodyForQuery(ctx.request().query())))); + .handler(ctx -> + controller( + ctx, + QUERY_ENCODED_QUERY, + () -> + ctx.response() + .setStatusCode(QUERY_ENCODED_QUERY.getStatus()) + .end(QUERY_ENCODED_QUERY.bodyForQuery(ctx.request().query())))); router .route(QUERY_PARAM.getPath()) - .handler( - ctx -> - controller( - ctx, - QUERY_PARAM, - () -> - ctx.response() - .setStatusCode(QUERY_PARAM.getStatus()) - .end(ctx.request().query()))); + .handler(ctx -> + controller( + ctx, + QUERY_PARAM, + () -> + ctx.response() + .setStatusCode(QUERY_PARAM.getStatus()) + .end(ctx.request().query()))); router .route(USER_BLOCK.getPath()) - .handler( - ctx -> - controller( - ctx, - USER_BLOCK, - () -> { - Blocking.forUser("user-to-block").blockIfMatch(); - ctx.response().end("Should not be reached"); - })); + .handler(ctx -> + controller( + ctx, + USER_BLOCK, + () -> { + Blocking.forUser("user-to-block").blockIfMatch(); + ctx.response().end("Should not be reached"); + })); router .route("/path/:id/param") - .handler( - ctx -> - controller( - ctx, - PATH_PARAM, - () -> - ctx.response() - .setStatusCode(PATH_PARAM.getStatus()) - .end(ctx.request().getParam("id")))); + .handler(ctx -> + controller( + ctx, + PATH_PARAM, + () -> + ctx.response() + .setStatusCode(PATH_PARAM.getStatus()) + .end(ctx.request().getParam("id")))); router .route(REDIRECT.getPath()) - .handler( - ctx -> - controller( - ctx, - REDIRECT, - () -> - ctx.response() - .setStatusCode(REDIRECT.getStatus()) - .putHeader("location", REDIRECT.getBody()) - .end())); + .handler(ctx -> + controller( + ctx, + REDIRECT, + () -> + ctx.response() + .setStatusCode(REDIRECT.getStatus()) + .putHeader("location", REDIRECT.getBody()) + .end())); router .route(ERROR.getPath()) - .handler( - ctx -> - controller( - ctx, - ERROR, - () -> ctx.response().setStatusCode(ERROR.getStatus()).end(ERROR.getBody()))); + .handler(ctx -> + controller( + ctx, + ERROR, + () -> ctx.response().setStatusCode(ERROR.getStatus()).end(ERROR.getBody()))); router .route(EXCEPTION.getPath()) .handler(ctx -> controller(ctx, EXCEPTION, VertxTestServer::exception)); @@ -213,22 +198,20 @@ public void start(final Promise startPromise) { .createHttpServer(new HttpServerOptions().setHandle100ContinueAutomatically(true)) .requestHandler(router) .listen(port) - .andThen( - event -> { - // send this though event bus and succeed deploy after successful response - int actualPort = event.result().actualPort(); - vertx - .eventBus() - .request(PORT_DATA_ADDRESS, actualPort) - .andThen( - ar -> { - if (ar.succeeded()) { - startPromise.complete(); - } else { - startPromise.fail(ar.cause()); - } - }); - }); + .andThen(event -> { + // send this though event bus and succeed deploy after successful response + int actualPort = event.result().actualPort(); + vertx + .eventBus() + .request(PORT_DATA_ADDRESS, actualPort) + .andThen(ar -> { + if (ar.succeeded()) { + startPromise.complete(); + } else { + startPromise.fail(ar.cause()); + } + }); + }); } private static String convertFormAttributes(RoutingContext ctx) { diff --git a/dd-java-agent/instrumentation/websocket/jetty-websocket/jetty-websocket-12.0/src/test/java/NativeWebSocketHandshakeTest.java b/dd-java-agent/instrumentation/websocket/jetty-websocket/jetty-websocket-12.0/src/test/java/NativeWebSocketHandshakeTest.java index a76028a2f85..6e245eddcb9 100644 --- a/dd-java-agent/instrumentation/websocket/jetty-websocket/jetty-websocket-12.0/src/test/java/NativeWebSocketHandshakeTest.java +++ b/dd-java-agent/instrumentation/websocket/jetty-websocket/jetty-websocket-12.0/src/test/java/NativeWebSocketHandshakeTest.java @@ -54,9 +54,8 @@ void messagesLinkToHandshakesInBothDirections( server.setHandler(context); context.setHandler( WebSocketUpgradeHandler.from(server, context) - .configure( - container -> - container.addMapping("/receive", (request, response, callback) -> endpoint))); + .configure(container -> + container.addMapping("/receive", (request, response, callback) -> endpoint))); server.start(); client.start(); URI uri = diff --git a/dd-java-agent/instrumentation/websocket/jetty-websocket/jetty-websocket-12.0/src/test/java/NativeWebSocketTest.java b/dd-java-agent/instrumentation/websocket/jetty-websocket/jetty-websocket-12.0/src/test/java/NativeWebSocketTest.java index e42b43d28e2..dd4db31ba9b 100644 --- a/dd-java-agent/instrumentation/websocket/jetty-websocket/jetty-websocket-12.0/src/test/java/NativeWebSocketTest.java +++ b/dd-java-agent/instrumentation/websocket/jetty-websocket/jetty-websocket-12.0/src/test/java/NativeWebSocketTest.java @@ -346,15 +346,14 @@ void deferredBinaryCallbackCompletesReceiveSpan(Behavior behavior, boolean fail) assertNull(activeSpan()); CompletableFuture completion = - CompletableFuture.runAsync( - () -> { - if (fail) { - endpoint.pendingCallback.fail(new IllegalStateException("callback failed")); - } else { - endpoint.pendingCallback.succeed(); - } - assertNull(activeSpan()); - }); + CompletableFuture.runAsync(() -> { + if (fail) { + endpoint.pendingCallback.fail(new IllegalStateException("callback failed")); + } else { + endpoint.pendingCallback.succeed(); + } + assertNull(activeSpan()); + }); completion.get(5, SECONDS); assertTrue(callback.isDone()); diff --git a/dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/server/http/HttpProxy.java b/dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/server/http/HttpProxy.java index 63df85f3518..d722726e14d 100644 --- a/dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/server/http/HttpProxy.java +++ b/dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/server/http/HttpProxy.java @@ -33,12 +33,11 @@ public final class HttpProxy implements Closeable { serverSocket.setSoTimeout(0); port = serverSocket.getLocalPort(); executorService = - Executors.newCachedThreadPool( - r -> { - final Thread thread = new Thread(null, r, "Http Proxy: " + port); - thread.setDaemon(true); - return thread; - }); + Executors.newCachedThreadPool(r -> { + final Thread thread = new Thread(null, r, "Http Proxy: " + port); + thread.setDaemon(true); + return thread; + }); executorService.execute(new SocketAcceptor()); System.out.println("Started proxy server " + this + " on port " + port); } diff --git a/dd-openfeature/src/main/java/com/datadog/openfeature/internal/delivery/RemoteConfigurationService.java b/dd-openfeature/src/main/java/com/datadog/openfeature/internal/delivery/RemoteConfigurationService.java index ec63935162a..d0be25d5b76 100644 --- a/dd-openfeature/src/main/java/com/datadog/openfeature/internal/delivery/RemoteConfigurationService.java +++ b/dd-openfeature/src/main/java/com/datadog/openfeature/internal/delivery/RemoteConfigurationService.java @@ -27,28 +27,27 @@ public synchronized void start(final Consumer listener) { } LOGGER.debug("Feature Flags subscribing to Remote Configuration"); this.subscription = - this.source.subscribe( - content -> { - if (content == null) { - listener.accept(null); - return; - } - final ServerConfiguration configuration; - try { - configuration = UniversalFlagConfigParser.parse(content); - } catch (final IOException | RuntimeException e) { - LOGGER.debug( - "Remote Configuration returned a malformed flag configuration ({}); retaining the current configuration", - e.getClass().getSimpleName(), - e); - // Rejects the document so the agent reports it as not applied. - throw new IllegalArgumentException( - "Malformed flag configuration: " + e.getMessage(), e); - } - if (configuration != null) { - listener.accept(configuration); - } - }); + this.source.subscribe(content -> { + if (content == null) { + listener.accept(null); + return; + } + final ServerConfiguration configuration; + try { + configuration = UniversalFlagConfigParser.parse(content); + } catch (final IOException | RuntimeException e) { + LOGGER.debug( + "Remote Configuration returned a malformed flag configuration ({}); retaining the current configuration", + e.getClass().getSimpleName(), + e); + // Rejects the document so the agent reports it as not applied. + throw new IllegalArgumentException( + "Malformed flag configuration: " + e.getMessage(), e); + } + if (configuration != null) { + listener.accept(configuration); + } + }); } @Override diff --git a/dd-openfeature/src/main/java/com/datadog/openfeature/internal/evaluation/FlagEvaluator.java b/dd-openfeature/src/main/java/com/datadog/openfeature/internal/evaluation/FlagEvaluator.java index 03cdfe3b9de..5a02f01f708 100644 --- a/dd-openfeature/src/main/java/com/datadog/openfeature/internal/evaluation/FlagEvaluator.java +++ b/dd-openfeature/src/main/java/com/datadog/openfeature/internal/evaluation/FlagEvaluator.java @@ -330,17 +330,17 @@ private static boolean evaluateCondition( case LT: return compareNumber(attributeValue, condition.value, (a, b) -> a < b); case SEMVER_EQ: - return evaluateSemverCondition(attributeValue, condition.semverComparand, (o) -> o == 0); + return evaluateSemverCondition(attributeValue, condition.semverComparand, o -> o == 0); case SEMVER_NEQ: - return evaluateSemverCondition(attributeValue, condition.semverComparand, (o) -> o != 0); + return evaluateSemverCondition(attributeValue, condition.semverComparand, o -> o != 0); case SEMVER_LT: - return evaluateSemverCondition(attributeValue, condition.semverComparand, (o) -> o < 0); + return evaluateSemverCondition(attributeValue, condition.semverComparand, o -> o < 0); case SEMVER_LTE: - return evaluateSemverCondition(attributeValue, condition.semverComparand, (o) -> o <= 0); + return evaluateSemverCondition(attributeValue, condition.semverComparand, o -> o <= 0); case SEMVER_GT: - return evaluateSemverCondition(attributeValue, condition.semverComparand, (o) -> o > 0); + return evaluateSemverCondition(attributeValue, condition.semverComparand, o -> o > 0); case SEMVER_GTE: - return evaluateSemverCondition(attributeValue, condition.semverComparand, (o) -> o >= 0); + return evaluateSemverCondition(attributeValue, condition.semverComparand, o -> o >= 0); default: return false; } diff --git a/dd-openfeature/src/main/java/com/datadog/openfeature/internal/exposure/ExposuresRequest.java b/dd-openfeature/src/main/java/com/datadog/openfeature/internal/exposure/ExposuresRequest.java index cbeefd12070..49830ce524e 100644 --- a/dd-openfeature/src/main/java/com/datadog/openfeature/internal/exposure/ExposuresRequest.java +++ b/dd-openfeature/src/main/java/com/datadog/openfeature/internal/exposure/ExposuresRequest.java @@ -20,38 +20,37 @@ public ExposuresRequest(final Map context, final List { - generator.writeStartObject(); - generator.writeFieldName("context"); - writeValue(generator, this.context); - generator.writeArrayFieldStart("exposures"); - for (final ExposureEvent exposure : this.exposures) { - generator.writeStartObject(); - generator.writeNumberField("timestamp", exposure.timestamp); - writeKeyObject(generator, "allocation", exposure.allocation.key); - writeKeyObject(generator, "flag", exposure.flag.key); - writeKeyObject(generator, "variant", exposure.variant.key); - generator.writeObjectFieldStart("subject"); - if (exposure.subject.id != null) { - generator.writeStringField("id", exposure.subject.id); - } - if (exposure.subject.attributes != null) { - generator.writeFieldName("attributes"); - writeValue(generator, exposure.subject.attributes); - } - generator.writeEndObject(); - if (exposure.serial_id != null) { - generator.writeNumberField("serial_id", exposure.serial_id); - } - if (exposure.features != null && !exposure.features.isEmpty()) { - generator.writeFieldName("features"); - writeValue(generator, exposure.features); - } - generator.writeEndObject(); - } - generator.writeEndArray(); - generator.writeEndObject(); - }); + return JsonWriting.write(generator -> { + generator.writeStartObject(); + generator.writeFieldName("context"); + writeValue(generator, this.context); + generator.writeArrayFieldStart("exposures"); + for (final ExposureEvent exposure : this.exposures) { + generator.writeStartObject(); + generator.writeNumberField("timestamp", exposure.timestamp); + writeKeyObject(generator, "allocation", exposure.allocation.key); + writeKeyObject(generator, "flag", exposure.flag.key); + writeKeyObject(generator, "variant", exposure.variant.key); + generator.writeObjectFieldStart("subject"); + if (exposure.subject.id != null) { + generator.writeStringField("id", exposure.subject.id); + } + if (exposure.subject.attributes != null) { + generator.writeFieldName("attributes"); + writeValue(generator, exposure.subject.attributes); + } + generator.writeEndObject(); + if (exposure.serial_id != null) { + generator.writeNumberField("serial_id", exposure.serial_id); + } + if (exposure.features != null && !exposure.features.isEmpty()) { + generator.writeFieldName("features"); + writeValue(generator, exposure.features); + } + generator.writeEndObject(); + } + generator.writeEndArray(); + generator.writeEndObject(); + }); } } diff --git a/dd-openfeature/src/main/java/com/datadog/openfeature/internal/flagevaluation/FlagEvaluationPayloads.java b/dd-openfeature/src/main/java/com/datadog/openfeature/internal/flagevaluation/FlagEvaluationPayloads.java index 0918083534c..b829244524b 100644 --- a/dd-openfeature/src/main/java/com/datadog/openfeature/internal/flagevaluation/FlagEvaluationPayloads.java +++ b/dd-openfeature/src/main/java/com/datadog/openfeature/internal/flagevaluation/FlagEvaluationPayloads.java @@ -28,14 +28,13 @@ final class FlagEvaluationPayloads { // Per-thread SHA-256 instance as hashing runs for every full-tier row without consent. private static final ThreadLocal SHA_256 = - ThreadLocal.withInitial( - () -> { - try { - return MessageDigest.getInstance("SHA-256"); - } catch (final NoSuchAlgorithmException e) { - throw new IllegalStateException("SHA-256 not available", e); - } - }); + ThreadLocal.withInitial(() -> { + try { + return MessageDigest.getInstance("SHA-256"); + } catch (final NoSuchAlgorithmException e) { + throw new IllegalStateException("SHA-256 not available", e); + } + }); private FlagEvaluationPayloads() {} @@ -92,39 +91,38 @@ private static byte[] payloadPrefix(final Map context) { } static byte[] encodeEvent(final FlagEvaluationEvent event) { - return JsonWriting.write( - generator -> { - generator.writeStartObject(); - generator.writeNumberField("timestamp", event.timestamp); - writeKeyObject(generator, "flag", event.flag.key); - generator.writeNumberField("first_evaluation", event.first_evaluation); - generator.writeNumberField("last_evaluation", event.last_evaluation); - generator.writeNumberField("evaluation_count", event.evaluation_count); - writeKeyObject(generator, "variant", keyOf(event.variant)); - writeKeyObject(generator, "allocation", keyOf(event.allocation)); - if (event.targeting_key != null) { - generator.writeStringField("targeting_key", event.targeting_key); - } - if (event.runtime_default_used != null) { - generator.writeBooleanField("runtime_default_used", event.runtime_default_used); - } - if (event.context != null) { - generator.writeObjectFieldStart("context"); - generator.writeFieldName("evaluation"); - writeValue(generator, event.context.evaluation); - generator.writeEndObject(); - } - if (event.error != null) { - generator.writeObjectFieldStart("error"); - generator.writeStringField("message", event.error.message); - generator.writeEndObject(); - } - if (event.features != null) { - generator.writeFieldName("features"); - writeValue(generator, event.features); - } - generator.writeEndObject(); - }); + return JsonWriting.write(generator -> { + generator.writeStartObject(); + generator.writeNumberField("timestamp", event.timestamp); + writeKeyObject(generator, "flag", event.flag.key); + generator.writeNumberField("first_evaluation", event.first_evaluation); + generator.writeNumberField("last_evaluation", event.last_evaluation); + generator.writeNumberField("evaluation_count", event.evaluation_count); + writeKeyObject(generator, "variant", keyOf(event.variant)); + writeKeyObject(generator, "allocation", keyOf(event.allocation)); + if (event.targeting_key != null) { + generator.writeStringField("targeting_key", event.targeting_key); + } + if (event.runtime_default_used != null) { + generator.writeBooleanField("runtime_default_used", event.runtime_default_used); + } + if (event.context != null) { + generator.writeObjectFieldStart("context"); + generator.writeFieldName("evaluation"); + writeValue(generator, event.context.evaluation); + generator.writeEndObject(); + } + if (event.error != null) { + generator.writeObjectFieldStart("error"); + generator.writeStringField("message", event.error.message); + generator.writeEndObject(); + } + if (event.features != null) { + generator.writeFieldName("features"); + writeValue(generator, event.features); + } + generator.writeEndObject(); + }); } /** diff --git a/dd-openfeature/src/test/java/com/datadog/openfeature/DDEvaluatorTest.java b/dd-openfeature/src/test/java/com/datadog/openfeature/DDEvaluatorTest.java index f38c0eaf570..170571bd6bd 100644 --- a/dd-openfeature/src/test/java/com/datadog/openfeature/DDEvaluatorTest.java +++ b/dd-openfeature/src/test/java/com/datadog/openfeature/DDEvaluatorTest.java @@ -199,12 +199,11 @@ public void testShutdownWhileInitializationWaitsForConfiguration() throws Except final AutoCloseable subscription = mock(AutoCloseable.class); final AgentBridge bridge = mock(AgentBridge.class); when(bridge.remoteConfiguration()) - .thenReturn( - listener -> { - configurationListener.set(listener); - subscribed.countDown(); - return subscription; - }); + .thenReturn(listener -> { + configurationListener.set(listener); + subscribed.countDown(); + return subscription; + }); final Settings settings = TestSettings.of("feature.flags.configuration.source", "remote_config"); final DDEvaluator evaluator = new DDEvaluator(() -> {}, bridge, settings); diff --git a/dd-openfeature/src/test/java/com/datadog/openfeature/ExperimentationOptOutProviderTest.java b/dd-openfeature/src/test/java/com/datadog/openfeature/ExperimentationOptOutProviderTest.java index 46e33390e78..041aa34e366 100644 --- a/dd-openfeature/src/test/java/com/datadog/openfeature/ExperimentationOptOutProviderTest.java +++ b/dd-openfeature/src/test/java/com/datadog/openfeature/ExperimentationOptOutProviderTest.java @@ -190,14 +190,13 @@ void publicProvidersApplyOptOutAfterHttpConfiguration( provider.shutdown(); } } finally { - previousProperties.forEach( - (key, value) -> { - if (value == null) { - System.clearProperty(key); - } else { - System.setProperty(key, value); - } - }); + previousProperties.forEach((key, value) -> { + if (value == null) { + System.clearProperty(key); + } else { + System.setProperty(key, value); + } + }); } } } diff --git a/dd-openfeature/src/test/java/com/datadog/openfeature/ExposureHookTest.java b/dd-openfeature/src/test/java/com/datadog/openfeature/ExposureHookTest.java index 81aae5bbbda..3cb1ce46269 100644 --- a/dd-openfeature/src/test/java/com/datadog/openfeature/ExposureHookTest.java +++ b/dd-openfeature/src/test/java/com/datadog/openfeature/ExposureHookTest.java @@ -248,10 +248,9 @@ void aFailingCallbackDoesNotAffectTheEvaluation() throws Exception { start(true, configuration(Boolean.TRUE, null)); OpenFeatureAPI.getInstance() .addHooks( - new ExposureHook( - evaluation -> { - throw new IllegalStateException("warehouse unavailable"); - })); + new ExposureHook(evaluation -> { + throw new IllegalStateException("warehouse unavailable"); + })); final FlagEvaluationDetails details = evaluate("user-1"); @@ -313,29 +312,26 @@ void theHookContainsCallbackFailures() { final FlagEvaluationDetails details = FlagEvaluationDetails.builder().flagKey("flag").value(1).build(); - assertDoesNotThrow( - () -> - new ExposureHook( - evaluation -> { - throw new IllegalStateException("warehouse unavailable"); - }) - .finallyAfter(context, details, emptyMap())); - assertDoesNotThrow( - () -> - new ExposureHook( - evaluation -> { - throw new NoClassDefFoundError("missing class"); - }) - .finallyAfter(context, details, emptyMap())); + assertDoesNotThrow(() -> + new ExposureHook( + evaluation -> { + throw new IllegalStateException("warehouse unavailable"); + }) + .finallyAfter(context, details, emptyMap())); + assertDoesNotThrow(() -> + new ExposureHook( + evaluation -> { + throw new NoClassDefFoundError("missing class"); + }) + .finallyAfter(context, details, emptyMap())); } @Test void keepsContainingCallbackFailuresAfterTheFirstOne() { final ExposureHook hook = - new ExposureHook( - evaluation -> { - throw new IllegalStateException("warehouse unavailable"); - }); + new ExposureHook(evaluation -> { + throw new IllegalStateException("warehouse unavailable"); + }); final FlagEvaluationDetails details = FlagEvaluationDetails.builder().flagKey("flag").value(1).build(); diff --git a/dd-openfeature/src/test/java/com/datadog/openfeature/ExposureLoggingHookTest.java b/dd-openfeature/src/test/java/com/datadog/openfeature/ExposureLoggingHookTest.java index e705bb0ffef..fd6580b41e9 100644 --- a/dd-openfeature/src/test/java/com/datadog/openfeature/ExposureLoggingHookTest.java +++ b/dd-openfeature/src/test/java/com/datadog/openfeature/ExposureLoggingHookTest.java @@ -203,14 +203,12 @@ void sendsNothingWithoutAnInitializedDatadogEvaluator() { final ExposureLoggingHook withoutRuntime = new ExposureLoggingHook<>(() -> uninitialized); - assertDoesNotThrow( - () -> - withoutEvaluator.finallyAfter( - hookContext(), details("on", exposureMetadata(true, false, "a")), emptyMap())); - assertDoesNotThrow( - () -> - withoutRuntime.finallyAfter( - hookContext(), details("on", exposureMetadata(true, false, "a")), emptyMap())); + assertDoesNotThrow(() -> + withoutEvaluator.finallyAfter( + hookContext(), details("on", exposureMetadata(true, false, "a")), emptyMap())); + assertDoesNotThrow(() -> + withoutRuntime.finallyAfter( + hookContext(), details("on", exposureMetadata(true, false, "a")), emptyMap())); } @Test @@ -244,14 +242,10 @@ void recordExposure(final ExposureEvent event) { final ExposureLoggingHook hook = new ExposureLoggingHook<>(() -> failing); final HookContext context = hookContext(); - assertDoesNotThrow( - () -> - hook.finallyAfter( - context, details("on", exposureMetadata(true, false, "a")), emptyMap())); - assertDoesNotThrow( - () -> - hook.finallyAfter( - context, details("off", exposureMetadata(true, false, "a")), emptyMap())); + assertDoesNotThrow(() -> + hook.finallyAfter(context, details("on", exposureMetadata(true, false, "a")), emptyMap())); + assertDoesNotThrow(() -> + hook.finallyAfter(context, details("off", exposureMetadata(true, false, "a")), emptyMap())); } private static Object cacheHit(final FlagEvaluationDetails details) { diff --git a/dd-openfeature/src/test/java/com/datadog/openfeature/FlagEvalLoggingHookTest.java b/dd-openfeature/src/test/java/com/datadog/openfeature/FlagEvalLoggingHookTest.java index bd13dbbd7cf..1e4d2138515 100644 --- a/dd-openfeature/src/test/java/com/datadog/openfeature/FlagEvalLoggingHookTest.java +++ b/dd-openfeature/src/test/java/com/datadog/openfeature/FlagEvalLoggingHookTest.java @@ -521,10 +521,9 @@ void writerNullIsNoOp() { @Test void writerLookupLinkageErrorIsNoOp() { final FlagEvalLoggingHook hook = - new FlagEvalLoggingHook<>( - () -> { - throw new NoSuchMethodError("old bootstrap"); - }); + new FlagEvalLoggingHook<>(() -> { + throw new NoSuchMethodError("old bootstrap"); + }); final FlagEvaluationDetails det = details("flag", "v", "v", Reason.TARGETING_MATCH.name(), null); diff --git a/dd-openfeature/src/test/java/com/datadog/openfeature/ProviderTest.java b/dd-openfeature/src/test/java/com/datadog/openfeature/ProviderTest.java index 5e8b9c47ce3..dace3a33fea 100644 --- a/dd-openfeature/src/test/java/com/datadog/openfeature/ProviderTest.java +++ b/dd-openfeature/src/test/java/com/datadog/openfeature/ProviderTest.java @@ -445,12 +445,11 @@ public void testClientEvaluationRoutesThroughFlagEvalLoggingHook() throws Except final Provider provider = newProvider( new Options().initTimeout(10, SECONDS), - new ProxyAgentBridge( - (route, json) -> { - if ("flagevaluation".equals(route)) { - posted.add(json); - } - })); + new ProxyAgentBridge((route, json) -> { + if ("flagevaluation".equals(route)) { + posted.add(json); + } + })); final OpenFeatureAPI api = OpenFeatureAPI.getInstance(); this.executor.submit(() -> api.setProviderAndWait(provider)); awaitInitialization(); @@ -545,12 +544,8 @@ public void testProviderEvaluation( when(evaluator.initialize(eq(10L), eq(SECONDS), any())).thenReturn(true); when(evaluator.hasConfiguration()).thenReturn(true); when(evaluator.evaluate(any(), any(), any(), any())) - .thenAnswer( - invocation -> - ProviderEvaluation.builder() - .value(invocation.getArgument(2)) - .reason("MOCK") - .build()); + .thenAnswer(invocation -> + ProviderEvaluation.builder().value(invocation.getArgument(2)).reason("MOCK").build()); final OpenFeatureAPI api = OpenFeatureAPI.getInstance(); api.setProviderAndWait(new Provider(new Options().initTimeout(10, SECONDS), evaluator)); final Client client = api.getClient(); diff --git a/dd-openfeature/src/test/java/com/datadog/openfeature/internal/EventQueueTest.java b/dd-openfeature/src/test/java/com/datadog/openfeature/internal/EventQueueTest.java index fbee9cc5944..e2d62d88442 100644 --- a/dd-openfeature/src/test/java/com/datadog/openfeature/internal/EventQueueTest.java +++ b/dd-openfeature/src/test/java/com/datadog/openfeature/internal/EventQueueTest.java @@ -62,11 +62,10 @@ void timedPollWaitsForAnElement() throws Exception { final EventQueue queue = new EventQueue<>(1); final ExecutorService executor = Executors.newSingleThreadExecutor(); try { - executor.submit( - () -> { - MILLISECONDS.sleep(50); - return queue.offer("late"); - }); + executor.submit(() -> { + MILLISECONDS.sleep(50); + return queue.offer("late"); + }); assertEquals("late", queue.poll(5, TimeUnit.SECONDS)); } finally { @@ -119,16 +118,15 @@ void concurrentProducersNeverExceedCapacity() throws Exception { final AtomicInteger accepted = new AtomicInteger(); try { for (int p = 0; p < producers; p++) { - executor.submit( - () -> { - start.await(); - for (int i = 0; i < 500; i++) { - if (queue.offer(i)) { - accepted.incrementAndGet(); - } - } - return null; - }); + executor.submit(() -> { + start.await(); + for (int i = 0; i < 500; i++) { + if (queue.offer(i)) { + accepted.incrementAndGet(); + } + } + return null; + }); } start.countDown(); executor.shutdown(); diff --git a/dd-openfeature/src/test/java/com/datadog/openfeature/internal/FeatureFlagsRuntimeTest.java b/dd-openfeature/src/test/java/com/datadog/openfeature/internal/FeatureFlagsRuntimeTest.java index 7821bfa07ef..0335f289bb0 100644 --- a/dd-openfeature/src/test/java/com/datadog/openfeature/internal/FeatureFlagsRuntimeTest.java +++ b/dd-openfeature/src/test/java/com/datadog/openfeature/internal/FeatureFlagsRuntimeTest.java @@ -240,28 +240,25 @@ void concurrentRemovalIsDeliveredAfterTheInitialReplay() throws Exception { final ExecutorService executor = Executors.newFixedThreadPool(2); try { final Future registration = - executor.submit( - () -> - runtime.addConfigurationListener( - configuration -> { - if (configuration != null) { - replayStarted.countDown(); - try { - assertTrue(finishReplay.await(5, SECONDS)); - } catch (final InterruptedException e) { - Thread.currentThread().interrupt(); - throw new AssertionError(e); - } - } - received.add(configuration); - })); + executor.submit(() -> + runtime.addConfigurationListener(configuration -> { + if (configuration != null) { + replayStarted.countDown(); + try { + assertTrue(finishReplay.await(5, SECONDS)); + } catch (final InterruptedException e) { + Thread.currentThread().interrupt(); + throw new AssertionError(e); + } + } + received.add(configuration); + })); assertTrue(replayStarted.await(5, SECONDS)); final Future removal = - executor.submit( - () -> { - removalStarted.countDown(); - source.listener.accept(null); - }); + executor.submit(() -> { + removalStarted.countDown(); + source.listener.accept(null); + }); assertTrue(removalStarted.await(5, SECONDS)); assertThrows(TimeoutException.class, () -> removal.get(100, MILLISECONDS)); @@ -308,10 +305,9 @@ void failingListenerDoesNotStarveOtherListeners() { new TestAgentBridge(source, null), TestSettings.of("feature.flags.configuration.source", "remote_config")); final List received = new CopyOnWriteArrayList<>(); - runtime.addConfigurationListener( - configuration -> { - throw new IllegalStateException("listener failure"); - }); + runtime.addConfigurationListener(configuration -> { + throw new IllegalStateException("listener failure"); + }); runtime.addConfigurationListener(received::add); runtime.start(); try { diff --git a/dd-openfeature/src/test/java/com/datadog/openfeature/internal/delivery/CdnConfigurationSourceTest.java b/dd-openfeature/src/test/java/com/datadog/openfeature/internal/delivery/CdnConfigurationSourceTest.java index 9dc8168dd5c..94af54f7b29 100644 --- a/dd-openfeature/src/test/java/com/datadog/openfeature/internal/delivery/CdnConfigurationSourceTest.java +++ b/dd-openfeature/src/test/java/com/datadog/openfeature/internal/delivery/CdnConfigurationSourceTest.java @@ -244,10 +244,9 @@ void failedDispatchDoesNotAdvanceEtag() { this.server.enqueue(200, CONFIG, "ETag", "\"v1\"").enqueue(200, CONFIG, "ETag", "\"v2\""); final CdnConfigurationSource source = source(); final RuntimeException failure = new IllegalStateException("listener failure"); - source.setListenerForTest( - configuration -> { - throw failure; - }); + source.setListenerForTest(configuration -> { + throw failure; + }); assertThrows(IllegalStateException.class, source::pollOnce); source.setListenerForTest(this.dispatched::add); @@ -399,10 +398,9 @@ void startSurvivesListenerFailure() { final ScheduledExecutorService executor = mock(ScheduledExecutorService.class); final CdnConfigurationSource source = source(this.server.uri("/ufc"), null, executor); - source.start( - configuration -> { - throw new IllegalStateException("listener failure"); - }); + source.start(configuration -> { + throw new IllegalStateException("listener failure"); + }); verify(executor) .scheduleWithFixedDelay(any(Runnable.class), any(Long.class), any(Long.class), any()); @@ -440,11 +438,10 @@ void closeWakesRetryBackoffWithoutInterruptingCaller() throws Exception { }); final boolean[] result = {true, true}; final Thread poller = - new Thread( - () -> { - result[0] = source.pollOnce(); - result[1] = Thread.currentThread().isInterrupted(); - }); + new Thread(() -> { + result[0] = source.pollOnce(); + result[1] = Thread.currentThread().isInterrupted(); + }); poller.setDaemon(true); poller.start(); try { @@ -510,11 +507,10 @@ void closeCancelsInitialPollWithoutInterruptingCaller() throws Exception { null, () -> 1.0); final FutureTask initialization = - new FutureTask<>( - () -> { - source.start(this.dispatched::add); - return Thread.currentThread().isInterrupted(); - }); + new FutureTask<>(() -> { + source.start(this.dispatched::add); + return Thread.currentThread().isInterrupted(); + }); final Thread caller = new Thread(initialization, "provider-initialization"); caller.setDaemon(true); caller.start(); diff --git a/dd-openfeature/src/test/java/com/datadog/openfeature/internal/exposure/ExposurePipelineTest.java b/dd-openfeature/src/test/java/com/datadog/openfeature/internal/exposure/ExposurePipelineTest.java index 1324100acdb..5d521cb0264 100644 --- a/dd-openfeature/src/test/java/com/datadog/openfeature/internal/exposure/ExposurePipelineTest.java +++ b/dd-openfeature/src/test/java/com/datadog/openfeature/internal/exposure/ExposurePipelineTest.java @@ -143,12 +143,11 @@ void testHighLoadScenario() throws Exception { final List partition = exposures.subList(index, Math.min(index + exposuresPerThread, exposures.size())); futures.add( - executor.submit( - () -> { - latch.await(); - partition.forEach(pipeline); - return true; - })); + executor.submit(() -> { + latch.await(); + partition.forEach(pipeline); + return true; + })); } latch.countDown(); // start threads for (final Future future : futures) { diff --git a/dd-smoke-tests/apm-tracing-disabled/application/src/main/java/datadog/smoketest/apmtracingdisabled/Controller.java b/dd-smoke-tests/apm-tracing-disabled/application/src/main/java/datadog/smoketest/apmtracingdisabled/Controller.java index d471fcb630b..a1e868f6569 100644 --- a/dd-smoke-tests/apm-tracing-disabled/application/src/main/java/datadog/smoketest/apmtracingdisabled/Controller.java +++ b/dd-smoke-tests/apm-tracing-disabled/application/src/main/java/datadog/smoketest/apmtracingdisabled/Controller.java @@ -87,22 +87,21 @@ public String lateOutbound(@RequestParam(name = "url") String url) { // Thread synchronization relies on waitForTraceCount rather than Thread completion, no race // issue. Thread thread = - new Thread( - () -> { - try { - // Sleep past PendingTraceBuffer's 500ms flush delay so the root chunk exports - // before this late child. - Thread.sleep(3000); - } catch (InterruptedException e) { - Thread.currentThread().interrupt(); - return; - } - try (Scope scope = GlobalTracer.get().activateSpan(span)) { - new RestTemplate().getForObject(url, String.class); - } catch (Exception e) { - log.debug("late outbound call to {} failed", url, e); - } - }); + new Thread(() -> { + try { + // Sleep past PendingTraceBuffer's 500ms flush delay so the root chunk exports + // before this late child. + Thread.sleep(3000); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + return; + } + try (Scope scope = GlobalTracer.get().activateSpan(span)) { + new RestTemplate().getForObject(url, String.class); + } catch (Exception e) { + log.debug("late outbound call to {} failed", url, e); + } + }); thread.setDaemon(true); thread.start(); return "late-outbound"; diff --git a/dd-smoke-tests/appsec/lambda-sca/src/test/java/datadog/smoketest/LambdaScaSmokeTest.java b/dd-smoke-tests/appsec/lambda-sca/src/test/java/datadog/smoketest/LambdaScaSmokeTest.java index 6987b615869..9e8059b47ce 100644 --- a/dd-smoke-tests/appsec/lambda-sca/src/test/java/datadog/smoketest/LambdaScaSmokeTest.java +++ b/dd-smoke-tests/appsec/lambda-sca/src/test/java/datadog/smoketest/LambdaScaSmokeTest.java @@ -51,30 +51,26 @@ private static void assertReachability(SmokeServerApp app) { // method has executed yet, so this establishes readiness without a sleep or a warm-up call. app.backend() .telemetry() - .waitForFlat( - event -> - advisories(event).stream() - .anyMatch(advisory -> Collections.emptyList().equals(advisory.get("reached")))); + .waitForFlat(event -> + advisories(event).stream() + .anyMatch(advisory -> Collections.emptyList().equals(advisory.get("reached")))); assertEquals(200, app.get("/invoke/warm")); new PollingConditions(30) - .eventually( - () -> - assertTrue( - app.backend().traces().getTraces().stream() - .flatMap(trace -> trace.getSpans().stream()) - .anyMatch( - span -> - "dd-tracer-serverless-span".equals(span.getName()) - && "serverless".equals(span.getType()) - && "warm".equals(span.getMeta().get("request_id"))), - "expected serverless invocation span for request warm")); + .eventually(() -> + assertTrue( + app.backend().traces().getTraces().stream() + .flatMap(trace -> trace.getSpans().stream()) + .anyMatch(span -> + "dd-tracer-serverless-span".equals(span.getName()) + && "serverless".equals(span.getType()) + && "warm".equals(span.getMeta().get("request_id"))), + "expected serverless invocation span for request warm")); app.backend() .telemetry() - .waitForFlat( - event -> - reachedCallsites(event).stream() - .anyMatch(hit -> "warmInvocation".equals(hit.get("symbol")))); + .waitForFlat(event -> + reachedCallsites(event).stream() + .anyMatch(hit -> "warmInvocation".equals(hit.get("symbol")))); Map caller = app.backend().telemetry().getFlatMessages().stream() diff --git a/dd-smoke-tests/appsec/springboot-security/src/main/java/datadog/smoketest/appsec/springbootsecurity/WebSecurityConfig.java b/dd-smoke-tests/appsec/springboot-security/src/main/java/datadog/smoketest/appsec/springbootsecurity/WebSecurityConfig.java index 819244a520a..172704eb8a0 100644 --- a/dd-smoke-tests/appsec/springboot-security/src/main/java/datadog/smoketest/appsec/springbootsecurity/WebSecurityConfig.java +++ b/dd-smoke-tests/appsec/springboot-security/src/main/java/datadog/smoketest/appsec/springbootsecurity/WebSecurityConfig.java @@ -27,14 +27,13 @@ public WebSecurityConfig(DataSource dataSource) { @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { - http.authorizeRequests( - (requests) -> - requests - .antMatchers("/", "/signup", "/register") - .permitAll() - .anyRequest() - .authenticated()) - .formLogin((form) -> form.loginPage("/login").permitAll()) + http.authorizeRequests(requests -> + requests + .antMatchers("/", "/signup", "/register") + .permitAll() + .anyRequest() + .authenticated()) + .formLogin(form -> form.loginPage("/login").permitAll()) .logout(LogoutConfigurer::permitAll); return http.build(); diff --git a/dd-smoke-tests/crashtracking/src/main/java/datadog/smoketest/crashtracking/CrashtrackingTestApplication.java b/dd-smoke-tests/crashtracking/src/main/java/datadog/smoketest/crashtracking/CrashtrackingTestApplication.java index 5b8301ba5af..09a8d724c38 100644 --- a/dd-smoke-tests/crashtracking/src/main/java/datadog/smoketest/crashtracking/CrashtrackingTestApplication.java +++ b/dd-smoke-tests/crashtracking/src/main/java/datadog/smoketest/crashtracking/CrashtrackingTestApplication.java @@ -63,16 +63,15 @@ public static void main(String[] args) throws Exception { CountDownLatch latch = new CountDownLatch(1); Thread t = - new Thread( - () -> { - Path scriptPath = - Paths.get(crashUploaderScript != null ? crashUploaderScript : oomeNotifierScript); - while (!Files.exists(scriptPath)) { - System.out.println("Waiting for the script " + scriptPath + " to be created..."); - LockSupport.parkNanos(1_000_000_000L); - } - latch.countDown(); - }); + new Thread(() -> { + Path scriptPath = + Paths.get(crashUploaderScript != null ? crashUploaderScript : oomeNotifierScript); + while (!Files.exists(scriptPath)) { + System.out.println("Waiting for the script " + scriptPath + " to be created..."); + LockSupport.parkNanos(1_000_000_000L); + } + latch.countDown(); + }); t.setDaemon(true); t.start(); diff --git a/dd-smoke-tests/custom-systemloader/src/test/java/datadog/smoketest/CustomSystemLoaderSmokeTest.java b/dd-smoke-tests/custom-systemloader/src/test/java/datadog/smoketest/CustomSystemLoaderSmokeTest.java index 2cea674533b..d17294e1a05 100644 --- a/dd-smoke-tests/custom-systemloader/src/test/java/datadog/smoketest/CustomSystemLoaderSmokeTest.java +++ b/dd-smoke-tests/custom-systemloader/src/test/java/datadog/smoketest/CustomSystemLoaderSmokeTest.java @@ -38,11 +38,10 @@ void resourceTypesLoadedByCustomSystemClassLoaderAreTransformed() { List logLines = new ArrayList<>(); assertTrue( - app.waitForLogLine( - line -> { - logLines.add(line); - return "FIN".equals(line); - })); + app.waitForLogLine(line -> { + logLines.add(line); + return "FIN".equals(line); + })); Predicate loadedResource = compile("Loading sample.app.Resource[$]Test[1-3] from TestLoader").asPredicate(); Predicate transformedResource = diff --git a/dd-smoke-tests/debugger-integration-tests/src/main/java/datadog/smoketest/debugger/TestApplicationHelper.java b/dd-smoke-tests/debugger-integration-tests/src/main/java/datadog/smoketest/debugger/TestApplicationHelper.java index 7b6ba3f0149..4accc40909f 100644 --- a/dd-smoke-tests/debugger-integration-tests/src/main/java/datadog/smoketest/debugger/TestApplicationHelper.java +++ b/dd-smoke-tests/debugger-integration-tests/src/main/java/datadog/smoketest/debugger/TestApplicationHelper.java @@ -167,15 +167,14 @@ private static String waitForSpecificLogLine( init.run(); AtomicBoolean fromLineMatched = new AtomicBoolean(fromLineMatcher == null); try (Stream lines = Files.lines(logFilePath)) { - lines.forEach( - line -> { - if (!fromLineMatched.get()) { - fromLineMatched.set(fromLineMatcher.test(line)); - } else if (lineMatcher.test(line)) { - matchedLine.set(line); - result.set(true); - } - }); + lines.forEach(line -> { + if (!fromLineMatched.get()) { + fromLineMatched.set(fromLineMatcher.test(line)); + } else if (lineMatcher.test(line)) { + matchedLine.set(line); + result.set(true); + } + }); } LockSupport.parkNanos(sleep.toNanos()); i++; diff --git a/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/AgentDebuggerIntegrationTest.java b/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/AgentDebuggerIntegrationTest.java index 47d009c7d01..19626367bc7 100644 --- a/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/AgentDebuggerIntegrationTest.java +++ b/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/AgentDebuggerIntegrationTest.java @@ -33,10 +33,9 @@ void testLatestJdk() throws Exception { classpath, commandParams, logFilePath, "App", EXPECTED_UPLOADS) .start(); AtomicBoolean snapshotReceived = new AtomicBoolean(false); - registerSnapshotListener( - snapshot -> { - snapshotReceived.set(true); - }); + registerSnapshotListener(snapshot -> { + snapshotReceived.set(true); + }); processRequests( snapshotReceived::get, () -> String.format("timeout snapshotReceived=%s", snapshotReceived.get())); @@ -53,10 +52,9 @@ void testShutdown() throws Exception { setCurrentConfiguration(createConfig(probe)); targetProcess = createProcessBuilder(logFilePath, METHOD_NAME, EXPECTED_UPLOADS).start(); AtomicBoolean snapshotReceived = new AtomicBoolean(false); - registerSnapshotListener( - snapshot -> { - snapshotReceived.set(true); - }); + registerSnapshotListener(snapshot -> { + snapshotReceived.set(true); + }); processRequests( snapshotReceived::get, () -> String.format("timeout snapshotReceived=%s", snapshotReceived.get())); @@ -80,10 +78,9 @@ void testDestroy() throws Exception { .setResponseCode(200)); targetProcess = createProcessBuilder(logFilePath, METHOD_NAME, EXPECTED_UPLOADS).start(); AtomicBoolean snapshotReceived = new AtomicBoolean(false); - registerSnapshotListener( - snapshot -> { - snapshotReceived.set(true); - }); + registerSnapshotListener(snapshot -> { + snapshotReceived.set(true); + }); processRequests( snapshotReceived::get, () -> String.format("timeout snapshotReceived=%s", snapshotReceived.get())); diff --git a/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/BaseIntegrationTest.java b/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/BaseIntegrationTest.java index 4cad57d0768..4853ee0fae4 100644 --- a/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/BaseIntegrationTest.java +++ b/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/BaseIntegrationTest.java @@ -342,21 +342,20 @@ protected AtomicBoolean registerCheckReceivedInstalledEmitting(ProbeId probeId) AtomicBoolean installed = new AtomicBoolean(); AtomicBoolean emitting = new AtomicBoolean(); AtomicBoolean result = new AtomicBoolean(); - registerProbeStatusListener( - probeStatus -> { - if (probeStatus.getDiagnostics().getProbeId().equals(probeId)) { - if (probeStatus.getDiagnostics().getStatus() == ProbeStatus.Status.RECEIVED) { - received.set(true); - } - if (probeStatus.getDiagnostics().getStatus() == ProbeStatus.Status.INSTALLED) { - installed.set(true); - } - if (probeStatus.getDiagnostics().getStatus() == ProbeStatus.Status.EMITTING) { - emitting.set(true); - } - result.set(received.get() && installed.get() && emitting.get()); - } - }); + registerProbeStatusListener(probeStatus -> { + if (probeStatus.getDiagnostics().getProbeId().equals(probeId)) { + if (probeStatus.getDiagnostics().getStatus() == ProbeStatus.Status.RECEIVED) { + received.set(true); + } + if (probeStatus.getDiagnostics().getStatus() == ProbeStatus.Status.INSTALLED) { + installed.set(true); + } + if (probeStatus.getDiagnostics().getStatus() == ProbeStatus.Status.EMITTING) { + emitting.set(true); + } + result.set(received.get() && installed.get() && emitting.get()); + } + }); return result; } @@ -605,12 +604,11 @@ protected static boolean logHasErrors(Path logFilePath, Function lines = Files.lines(logFilePath)) { long errorLines = lines - .filter( - it -> - it.contains(" ERROR ") - || it.contains("ASSERTION FAILED") - || it.contains("Error:") - || checker.apply(it)) + .filter(it -> + it.contains(" ERROR ") + || it.contains("ASSERTION FAILED") + || it.contains("Error:") + || checker.apply(it)) .peek(System.out::println) .count(); boolean hasErrors = errorLines > 0; diff --git a/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/CodeOriginIntegrationTest.java b/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/CodeOriginIntegrationTest.java index b2063fc53ac..7f35f9cbd8d 100644 --- a/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/CodeOriginIntegrationTest.java +++ b/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/CodeOriginIntegrationTest.java @@ -31,24 +31,22 @@ void testCodeOriginTraceAnnotation() throws Exception { waitForInstrumentation(appUrl); execute(appUrl, TRACED_METHOD_NAME); AtomicBoolean codeOrigin = new AtomicBoolean(); - registerTraceListener( - decodedTrace -> { - for (DecodedSpan span : decodedTrace.getSpans()) { - if (isTracedFullMethodSpan(span)) { - if (span.getMeta().containsKey(DDTags.DD_CODE_ORIGIN_TYPE)) { - assertEquals("entry", span.getMeta().get(DDTags.DD_CODE_ORIGIN_TYPE)); - assertEquals( - "ServerDebuggerTestApplication.java", - span.getMeta().get(DD_CODE_ORIGIN_FRAME_FILE)); - assertEquals("runTracedMethod", span.getMeta().get(DD_CODE_ORIGIN_FRAME_METHOD)); - assertEquals( - "(java.lang.String)", span.getMeta().get(DD_CODE_ORIGIN_FRAME_SIGNATURE)); - assertEquals("158", span.getMeta().get(DD_CODE_ORIGIN_FRAME_LINE)); - codeOrigin.set(true); - } - } + registerTraceListener(decodedTrace -> { + for (DecodedSpan span : decodedTrace.getSpans()) { + if (isTracedFullMethodSpan(span)) { + if (span.getMeta().containsKey(DDTags.DD_CODE_ORIGIN_TYPE)) { + assertEquals("entry", span.getMeta().get(DDTags.DD_CODE_ORIGIN_TYPE)); + assertEquals( + "ServerDebuggerTestApplication.java", + span.getMeta().get(DD_CODE_ORIGIN_FRAME_FILE)); + assertEquals("runTracedMethod", span.getMeta().get(DD_CODE_ORIGIN_FRAME_METHOD)); + assertEquals("(java.lang.String)", span.getMeta().get(DD_CODE_ORIGIN_FRAME_SIGNATURE)); + assertEquals("158", span.getMeta().get(DD_CODE_ORIGIN_FRAME_LINE)); + codeOrigin.set(true); } - }); + } + } + }); processRequests( codeOrigin::get, () -> String.format("timeout codeOrigin=%s", codeOrigin.get())); } diff --git a/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/ExceptionDebuggerIntegrationTest.java b/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/ExceptionDebuggerIntegrationTest.java index f44a3ccc5e4..69e0592ff5e 100644 --- a/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/ExceptionDebuggerIntegrationTest.java +++ b/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/ExceptionDebuggerIntegrationTest.java @@ -56,10 +56,9 @@ void testSimpleSingleFrameException() throws Exception { execute(appUrl, TRACED_METHOD_NAME, "oops"); // collecting snapshots and sending them registerTraceListener(this::receiveExceptionReplayTrace); registerSnapshotListener(this::receiveSnapshot); - registerIntakeRequestListener( - intakeRequest -> { - assertEquals("snapshot", intakeRequest.getType()); - }); + registerIntakeRequestListener(intakeRequest -> { + assertEquals("snapshot", intakeRequest.getType()); + }); processRequests( () -> { if (snapshotIdTags.isEmpty()) { @@ -90,16 +89,15 @@ void testNoSubsequentCaptureAfterFirst() throws Exception { resetSnapshotsAndTraces(); // we should not receive any more snapshots after the first one execute(appUrl, TRACED_METHOD_NAME, "oops"); // no snapshot should be sent - registerTraceListener( - decodedTrace -> { - for (DecodedSpan span : decodedTrace.getSpans()) { - if (isTracedFullMethodSpan(span)) { - assertFalse(span.getMeta().containsKey("error.debug_info_captured")); - assertFalse(span.getMeta().containsKey("_dd.debug.error.0.snapshot_id")); - traceReceived = true; - } - } - }); + registerTraceListener(decodedTrace -> { + for (DecodedSpan span : decodedTrace.getSpans()) { + if (isTracedFullMethodSpan(span)) { + assertFalse(span.getMeta().containsKey("error.debug_info_captured")); + assertFalse(span.getMeta().containsKey("_dd.debug.error.0.snapshot_id")); + traceReceived = true; + } + } + }); processRequests(() -> traceReceived && !snapshotReceived, timeoutMessage); } diff --git a/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/LogProbesIntegrationTest.java b/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/LogProbesIntegrationTest.java index 6b7ead0ccc1..9ecf5f5e5e1 100644 --- a/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/LogProbesIntegrationTest.java +++ b/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/LogProbesIntegrationTest.java @@ -61,10 +61,9 @@ void testInaccessibleObject() throws Exception { setCurrentConfiguration(createConfig(probe)); targetProcess = createProcessBuilder(logFilePath, METHOD_NAME, EXPECTED_UPLOADS).start(); AtomicBoolean snapshotReceived = new AtomicBoolean(false); - registerSnapshotListener( - snapshot -> { - snapshotReceived.set(true); - }); + registerSnapshotListener(snapshot -> { + snapshotReceived.set(true); + }); processRequests( snapshotReceived::get, () -> String.format("timeout snapshotReceived=%s", snapshotReceived.get())); @@ -85,27 +84,25 @@ void testFullMethod() throws Exception { setCurrentConfiguration(createConfig(probe)); targetProcess = createProcessBuilder(logFilePath, METHOD_NAME, EXPECTED_UPLOADS).start(); AtomicBoolean snapshotReceived = new AtomicBoolean(); - registerIntakeRequestListener( - intakeRequest -> { - assertEquals("snapshot", intakeRequest.getType()); - }); - registerSnapshotListener( - snapshot -> { - assertEquals(PROBE_ID.getId(), snapshot.getProbe().getId()); - assertFullMethodCaptureArgs(snapshot.getCaptures().getEntry()); - assertNull(snapshot.getCaptures().getEntry().getLocals()); - assertNull(snapshot.getCaptures().getEntry().getCapturedThrowable()); - assertFullMethodCaptureArgs(snapshot.getCaptures().getReturn()); - assertCaptureReturnValue( - snapshot.getCaptures().getReturn(), - "java.lang.String", - "42, foobar, 3.42, {key1=val1, key2=val2, key3=val3}, var1,var2,var3"); - assertNotNull(snapshot.getCaptures().getReturn().getLocals()); - // @return is the only locals but ex is safely hoisted in the method - assertEquals(2, snapshot.getCaptures().getReturn().getLocals().size()); - assertNull(snapshot.getCaptures().getReturn().getCapturedThrowable()); - snapshotReceived.set(true); - }); + registerIntakeRequestListener(intakeRequest -> { + assertEquals("snapshot", intakeRequest.getType()); + }); + registerSnapshotListener(snapshot -> { + assertEquals(PROBE_ID.getId(), snapshot.getProbe().getId()); + assertFullMethodCaptureArgs(snapshot.getCaptures().getEntry()); + assertNull(snapshot.getCaptures().getEntry().getLocals()); + assertNull(snapshot.getCaptures().getEntry().getCapturedThrowable()); + assertFullMethodCaptureArgs(snapshot.getCaptures().getReturn()); + assertCaptureReturnValue( + snapshot.getCaptures().getReturn(), + "java.lang.String", + "42, foobar, 3.42, {key1=val1, key2=val2, key3=val3}, var1,var2,var3"); + assertNotNull(snapshot.getCaptures().getReturn().getLocals()); + // @return is the only locals but ex is safely hoisted in the method + assertEquals(2, snapshot.getCaptures().getReturn().getLocals().size()); + assertNull(snapshot.getCaptures().getReturn().getCapturedThrowable()); + snapshotReceived.set(true); + }); AtomicBoolean statusResult = registerCheckReceivedInstalledEmitting(PROBE_ID); processRequests( () -> snapshotReceived.get() && statusResult.get(), @@ -132,12 +129,11 @@ void testFullMethodWithCondition() throws Exception { setCurrentConfiguration(createConfig(probe)); targetProcess = createProcessBuilder(logFilePath, METHOD_NAME, EXPECTED_UPLOADS).start(); AtomicBoolean snapshotReceived = new AtomicBoolean(); - registerSnapshotListener( - snapshot -> { - assertEquals(PROBE_ID.getId(), snapshot.getProbe().getId()); - assertFullMethodCaptureArgs(snapshot.getCaptures().getEntry()); - snapshotReceived.set(true); - }); + registerSnapshotListener(snapshot -> { + assertEquals(PROBE_ID.getId(), snapshot.getProbe().getId()); + assertFullMethodCaptureArgs(snapshot.getCaptures().getEntry()); + snapshotReceived.set(true); + }); AtomicBoolean statusResult = registerCheckReceivedInstalledEmitting(PROBE_ID); processRequests( () -> snapshotReceived.get() && statusResult.get(), @@ -166,12 +162,11 @@ void testFullMethodWithConditionAtExit() throws Exception { setCurrentConfiguration(createConfig(probe)); targetProcess = createProcessBuilder(logFilePath, METHOD_NAME, EXPECTED_UPLOADS).start(); AtomicBoolean snapshotReceived = new AtomicBoolean(); - registerSnapshotListener( - snapshot -> { - assertEquals(PROBE_ID.getId(), snapshot.getProbe().getId()); - assertFullMethodCaptureArgs(snapshot.getCaptures().getReturn()); - snapshotReceived.set(true); - }); + registerSnapshotListener(snapshot -> { + assertEquals(PROBE_ID.getId(), snapshot.getProbe().getId()); + assertFullMethodCaptureArgs(snapshot.getCaptures().getReturn()); + snapshotReceived.set(true); + }); AtomicBoolean statusResult = registerCheckReceivedInstalledEmitting(PROBE_ID); processRequests( () -> snapshotReceived.get() && statusResult.get(), @@ -197,14 +192,12 @@ void testFullMethodWithConditionFailed() throws Exception { setCurrentConfiguration(createConfig(probe)); targetProcess = createProcessBuilder(logFilePath, METHOD_NAME, EXPECTED_UPLOADS).start(); AtomicBoolean snapshotReceived = new AtomicBoolean(); - registerSnapshotListener( - snapshot -> { - assertEquals(PROBE_ID.getId(), snapshot.getProbe().getId()); - assertEquals(1, snapshot.getEvaluationErrors().size()); - assertEquals( - "Cannot find symbol: noarg", snapshot.getEvaluationErrors().get(0).getMessage()); - snapshotReceived.set(true); - }); + registerSnapshotListener(snapshot -> { + assertEquals(PROBE_ID.getId(), snapshot.getProbe().getId()); + assertEquals(1, snapshot.getEvaluationErrors().size()); + assertEquals("Cannot find symbol: noarg", snapshot.getEvaluationErrors().get(0).getMessage()); + snapshotReceived.set(true); + }); AtomicBoolean statusResult = registerCheckReceivedInstalledEmitting(PROBE_ID); processRequests( () -> snapshotReceived.get() && statusResult.get(), @@ -230,18 +223,16 @@ void testFullMethodWithLogTemplate() throws Exception { targetProcess = createProcessBuilder(logFilePath, METHOD_NAME, EXPECTED_UPLOADS).start(); AtomicBoolean snapshotReceived = new AtomicBoolean(); AtomicBoolean correctLogMessage = new AtomicBoolean(); - registerIntakeRequestListener( - intakeRequest -> { - assertEquals( - "log line 42 foobar 3.42 {[key1=val1], [key2=val2], [key3=val3]} [var1, var2, var3]", - intakeRequest.getMessage()); - correctLogMessage.set(true); - }); - registerSnapshotListener( - snapshot -> { - assertEquals(PROBE_ID.getId(), snapshot.getProbe().getId()); - snapshotReceived.set(true); - }); + registerIntakeRequestListener(intakeRequest -> { + assertEquals( + "log line 42 foobar 3.42 {[key1=val1], [key2=val2], [key3=val3]} [var1, var2, var3]", + intakeRequest.getMessage()); + correctLogMessage.set(true); + }); + registerSnapshotListener(snapshot -> { + assertEquals(PROBE_ID.getId(), snapshot.getProbe().getId()); + snapshotReceived.set(true); + }); AtomicBoolean statusResult = registerCheckReceivedInstalledEmitting(PROBE_ID); processRequests( () -> snapshotReceived.get() && correctLogMessage.get() && statusResult.get(), @@ -276,24 +267,23 @@ void testFullMethodWithCaptureExpressions() throws Exception { setCurrentConfiguration(createConfig(probe)); targetProcess = createProcessBuilder(logFilePath, METHOD_NAME, EXPECTED_UPLOADS).start(); AtomicBoolean snapshotReceived = new AtomicBoolean(); - registerSnapshotListener( - snapshot -> { - assertEquals(PROBE_ID.getId(), snapshot.getProbe().getId()); - assertEquals(2, snapshot.getCaptures().getReturn().getCaptureExpressions().size()); - assertNull(snapshot.getCaptures().getReturn().getArguments()); - assertNull(snapshot.getCaptures().getReturn().getLocals()); - CapturedContext.CapturedValue argStrValue = - snapshot.getCaptures().getReturn().getCaptureExpressions().get("argStr"); - assertEquals("argStr", argStrValue.getName()); - assertEquals("foo", argStrValue.getValue()); - assertEquals("truncated", argStrValue.getNotCapturedReason()); - CapturedContext.CapturedValue key2Value = - snapshot.getCaptures().getReturn().getCaptureExpressions().get("argMap[key2]"); - assertEquals("argMap[key2]", key2Value.getName()); - assertEquals("val2", key2Value.getValue()); - assertNull(key2Value.getNotCapturedReason()); - snapshotReceived.set(true); - }); + registerSnapshotListener(snapshot -> { + assertEquals(PROBE_ID.getId(), snapshot.getProbe().getId()); + assertEquals(2, snapshot.getCaptures().getReturn().getCaptureExpressions().size()); + assertNull(snapshot.getCaptures().getReturn().getArguments()); + assertNull(snapshot.getCaptures().getReturn().getLocals()); + CapturedContext.CapturedValue argStrValue = + snapshot.getCaptures().getReturn().getCaptureExpressions().get("argStr"); + assertEquals("argStr", argStrValue.getName()); + assertEquals("foo", argStrValue.getValue()); + assertEquals("truncated", argStrValue.getNotCapturedReason()); + CapturedContext.CapturedValue key2Value = + snapshot.getCaptures().getReturn().getCaptureExpressions().get("argMap[key2]"); + assertEquals("argMap[key2]", key2Value.getName()); + assertEquals("val2", key2Value.getValue()); + assertNull(key2Value.getNotCapturedReason()); + snapshotReceived.set(true); + }); AtomicBoolean statusResult = registerCheckReceivedInstalledEmitting(PROBE_ID); processRequests( () -> snapshotReceived.get() && statusResult.get(), @@ -325,22 +315,20 @@ void testMultiProbes() throws Exception { Set probeIds = new HashSet<>(); AtomicBoolean allSnapshotReceived = new AtomicBoolean(); AtomicBoolean allStatusEmitting = new AtomicBoolean(); - registerSnapshotListener( - snapshot -> { - probeIds.add(snapshot.getProbe().getId()); - allSnapshotReceived.set(probeIds.size() == NB_PROBES); - }); + registerSnapshotListener(snapshot -> { + probeIds.add(snapshot.getProbe().getId()); + allSnapshotReceived.set(probeIds.size() == NB_PROBES); + }); Map statuses = new HashMap<>(); - registerProbeStatusListener( - probeStatus -> { - statuses.put( - probeStatus.getDiagnostics().getProbeId().getId(), - probeStatus.getDiagnostics().getStatus()); - allStatusEmitting.set( - statuses.size() == NB_PROBES - && statuses.values().stream() - .allMatch(status -> status == ProbeStatus.Status.EMITTING)); - }); + registerProbeStatusListener(probeStatus -> { + statuses.put( + probeStatus.getDiagnostics().getProbeId().getId(), + probeStatus.getDiagnostics().getStatus()); + allStatusEmitting.set( + statuses.size() == NB_PROBES + && statuses.values().stream() + .allMatch(status -> status == ProbeStatus.Status.EMITTING)); + }); processRequests( () -> allSnapshotReceived.get() && allStatusEmitting.get(), () -> @@ -368,15 +356,14 @@ void testLineProbe() throws Exception { setCurrentConfiguration(createConfig(probe)); targetProcess = createProcessBuilder(logFilePath, METHOD_NAME, EXPECTED_UPLOADS).start(); AtomicBoolean snapshotReceived = new AtomicBoolean(); - registerSnapshotListener( - snapshot -> { - assertEquals(LINE_PROBE_ID1.getId(), snapshot.getProbe().getId()); - CapturedContext capturedContext = snapshot.getCaptures().getLines().get(95); - assertFullMethodCaptureArgs(capturedContext); - assertNull(capturedContext.getLocals()); - assertNull(capturedContext.getCapturedThrowable()); - snapshotReceived.set(true); - }); + registerSnapshotListener(snapshot -> { + assertEquals(LINE_PROBE_ID1.getId(), snapshot.getProbe().getId()); + CapturedContext capturedContext = snapshot.getCaptures().getLines().get(95); + assertFullMethodCaptureArgs(capturedContext); + assertNull(capturedContext.getLocals()); + assertNull(capturedContext.getCapturedThrowable()); + snapshotReceived.set(true); + }); AtomicBoolean statusResult = registerCheckReceivedInstalledEmitting(LINE_PROBE_ID1); processRequests( () -> snapshotReceived.get() && statusResult.get(), @@ -433,10 +420,9 @@ private void doSamplingSnapshot(ProbeCondition probeCondition, MethodLocation ev logFilePath, "loopingFullMethod", EXPECTED_UPLOADS, String.valueOf(LOOP_COUNT)) .start(); AtomicInteger snapshotCount = new AtomicInteger(); - registerSnapshotListener( - snapshot -> { - snapshotCount.incrementAndGet(); - }); + registerSnapshotListener(snapshot -> { + snapshotCount.incrementAndGet(); + }); processRequests( () -> { LOG.info("snapshots={}", snapshotCount.get()); @@ -469,10 +455,9 @@ void testSamplingLogDefault() throws Exception { logFilePath, "loopingFullMethod", EXPECTED_UPLOADS, String.valueOf(LOOP_COUNT)) .start(); AtomicInteger snapshotCount = new AtomicInteger(); - registerSnapshotListener( - snapshot -> { - snapshotCount.incrementAndGet(); - }); + registerSnapshotListener(snapshot -> { + snapshotCount.incrementAndGet(); + }); processRequests( () -> { LOG.info("snapshots={}", snapshotCount.get()); @@ -504,10 +489,9 @@ void testSamplingLogCustom() throws Exception { logFilePath, "loopingFullMethod", EXPECTED_UPLOADS, String.valueOf(LOOP_COUNT)) .start(); AtomicInteger snapshotCount = new AtomicInteger(); - registerSnapshotListener( - snapshot -> { - snapshotCount.incrementAndGet(); - }); + registerSnapshotListener(snapshot -> { + snapshotCount.incrementAndGet(); + }); processRequests( () -> { LOG.info("snapshots={}", snapshotCount.get()); @@ -532,18 +516,17 @@ void testUncaughtException() throws Exception { targetProcess = createProcessBuilder(logFilePath, METHOD_NAME, EXPECTED_UPLOADS, "uncaught").start(); AtomicBoolean snapshotReceived = new AtomicBoolean(); - registerSnapshotListener( - snapshot -> { - assertEquals("123356536", snapshot.getProbe().getId()); - CapturedContext.CapturedThrowable throwable = - snapshot.getCaptures().getReturn().getCapturedThrowable(); - assertEquals("oops uncaught!", throwable.getMessage()); - assertTrue(throwable.getStacktrace().size() > 0); - assertEquals( - "datadog.smoketest.debugger.Main.exceptionMethod", - throwable.getStacktrace().get(0).getFunction()); - snapshotReceived.set(true); - }); + registerSnapshotListener(snapshot -> { + assertEquals("123356536", snapshot.getProbe().getId()); + CapturedContext.CapturedThrowable throwable = + snapshot.getCaptures().getReturn().getCapturedThrowable(); + assertEquals("oops uncaught!", throwable.getMessage()); + assertTrue(throwable.getStacktrace().size() > 0); + assertEquals( + "datadog.smoketest.debugger.Main.exceptionMethod", + throwable.getStacktrace().get(0).getFunction()); + snapshotReceived.set(true); + }); processRequests( snapshotReceived::get, () -> String.format("timeout snapshotReceived=%s", snapshotReceived.get())); @@ -565,18 +548,17 @@ void testCaughtException() throws Exception { targetProcess = createProcessBuilder(logFilePath, METHOD_NAME, EXPECTED_UPLOADS, "caught").start(); AtomicBoolean snapshotReceived = new AtomicBoolean(); - registerSnapshotListener( - snapshot -> { - assertEquals("123356536", snapshot.getProbe().getId()); - assertEquals(1, snapshot.getCaptures().getCaughtExceptions().size()); - CapturedContext.CapturedThrowable throwable = - snapshot.getCaptures().getCaughtExceptions().get(0); - assertEquals("oops caught!", throwable.getMessage()); - assertEquals( - "datadog.smoketest.debugger.Main.exceptionMethod", - throwable.getStacktrace().get(0).getFunction()); - snapshotReceived.set(true); - }); + registerSnapshotListener(snapshot -> { + assertEquals("123356536", snapshot.getProbe().getId()); + assertEquals(1, snapshot.getCaptures().getCaughtExceptions().size()); + CapturedContext.CapturedThrowable throwable = + snapshot.getCaptures().getCaughtExceptions().get(0); + assertEquals("oops caught!", throwable.getMessage()); + assertEquals( + "datadog.smoketest.debugger.Main.exceptionMethod", + throwable.getStacktrace().get(0).getFunction()); + snapshotReceived.set(true); + }); processRequests( snapshotReceived::get, () -> String.format("timeout snapshotReceived=%s", snapshotReceived.get())); @@ -601,14 +583,13 @@ void testConditionTimeout() throws Exception { setCurrentConfiguration(createConfig(probe)); targetProcess = createProcessBuilder(logFilePath, METHOD_NAME, EXPECTED_UPLOADS).start(); AtomicBoolean snapshotReceived = new AtomicBoolean(); - registerSnapshotListener( - snapshot -> { - if (snapshot.getProbe().getProbeId().equals(PROBE_ID)) { - assertEquals(1, snapshot.getEvaluationErrors().size()); - assertEquals("timeout (200ms)", snapshot.getEvaluationErrors().get(0).getMessage()); - snapshotReceived.set(true); - } - }); + registerSnapshotListener(snapshot -> { + if (snapshot.getProbe().getProbeId().equals(PROBE_ID)) { + assertEquals(1, snapshot.getEvaluationErrors().size()); + assertEquals("timeout (200ms)", snapshot.getEvaluationErrors().get(0).getMessage()); + snapshotReceived.set(true); + } + }); processRequests( snapshotReceived::get, () -> String.format("timeout snapshotReceived=%s", snapshotReceived.get())); @@ -637,14 +618,13 @@ void testTemplateTimeout() throws Exception { setCurrentConfiguration(createConfig(probe)); targetProcess = createProcessBuilder(logFilePath, METHOD_NAME, EXPECTED_UPLOADS).start(); AtomicBoolean snapshotReceived = new AtomicBoolean(); - registerSnapshotListener( - snapshot -> { - if (snapshot.getProbe().getProbeId().equals(PROBE_ID)) { - assertEquals(1, snapshot.getEvaluationErrors().size()); - assertEquals("timeout (200ms)", snapshot.getEvaluationErrors().get(0).getMessage()); - snapshotReceived.set(true); - } - }); + registerSnapshotListener(snapshot -> { + if (snapshot.getProbe().getProbeId().equals(PROBE_ID)) { + assertEquals(1, snapshot.getEvaluationErrors().size()); + assertEquals("timeout (200ms)", snapshot.getEvaluationErrors().get(0).getMessage()); + snapshotReceived.set(true); + } + }); processRequests( snapshotReceived::get, () -> String.format("timeout snapshotReceived=%s", snapshotReceived.get())); diff --git a/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/MetricProbesIntegrationTest.java b/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/MetricProbesIntegrationTest.java index 9b2ca7354bb..b312464c4bb 100644 --- a/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/MetricProbesIntegrationTest.java +++ b/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/MetricProbesIntegrationTest.java @@ -133,16 +133,15 @@ private void doMethodInvalidMetric( targetProcess = createProcessBuilder(logFilePath, METHOD_NAME, EXPECTED_UPLOADS).start(); AtomicBoolean received = new AtomicBoolean(); AtomicBoolean error = new AtomicBoolean(); - registerProbeStatusListener( - probeStatus -> { - if (probeStatus.getDiagnostics().getStatus() == ProbeStatus.Status.RECEIVED) { - received.set(true); - } - if (probeStatus.getDiagnostics().getStatus() == ProbeStatus.Status.ERROR) { - assertEquals(expectedMsg, probeStatus.getDiagnostics().getException().getMessage()); - error.set(true); - } - }); + registerProbeStatusListener(probeStatus -> { + if (probeStatus.getDiagnostics().getStatus() == ProbeStatus.Status.RECEIVED) { + received.set(true); + } + if (probeStatus.getDiagnostics().getStatus() == ProbeStatus.Status.ERROR) { + assertEquals(expectedMsg, probeStatus.getDiagnostics().getException().getMessage()); + error.set(true); + } + }); processRequests( () -> received.get() && error.get(), () -> String.format("timeout received=%s error=%s", received.get(), error.get())); diff --git a/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/ProbeFileIntegrationTest.java b/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/ProbeFileIntegrationTest.java index 12b1655baf5..9d31d5c4e3a 100644 --- a/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/ProbeFileIntegrationTest.java +++ b/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/ProbeFileIntegrationTest.java @@ -44,22 +44,20 @@ void testProbeFile() throws Exception { execute(appUrl, TRACED_METHOD_NAME); AtomicBoolean snapshotReceived = new AtomicBoolean(); AtomicBoolean traceReceived = new AtomicBoolean(); - registerSnapshotListener( - snapshot -> { - assertEquals(PROBE_ID.getId(), snapshot.getProbe().getId()); - assertEquals(5, snapshot.getCaptures().getReturn().getArguments().size()); - snapshotReceived.set(true); - }); - registerTraceListener( - decodedTrace -> { - for (DecodedSpan span : decodedTrace.getSpans()) { - if (isDynamicSpan(span)) { - assertEquals("foobar", span.getMeta().get("client")); - assertEquals(PROBE_ID2.getId(), span.getMeta().get("_dd.di.client.probe_id")); - traceReceived.set(true); - } - } - }); + registerSnapshotListener(snapshot -> { + assertEquals(PROBE_ID.getId(), snapshot.getProbe().getId()); + assertEquals(5, snapshot.getCaptures().getReturn().getArguments().size()); + snapshotReceived.set(true); + }); + registerTraceListener(decodedTrace -> { + for (DecodedSpan span : decodedTrace.getSpans()) { + if (isDynamicSpan(span)) { + assertEquals("foobar", span.getMeta().get("client")); + assertEquals(PROBE_ID2.getId(), span.getMeta().get("_dd.di.client.probe_id")); + traceReceived.set(true); + } + } + }); processRequests( () -> snapshotReceived.get() && traceReceived.get(), () -> diff --git a/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/ProbeStateIntegrationTest.java b/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/ProbeStateIntegrationTest.java index 36bd25b4dfa..9b6f0d7acd2 100644 --- a/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/ProbeStateIntegrationTest.java +++ b/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/ProbeStateIntegrationTest.java @@ -190,18 +190,17 @@ public void testProbeStatusError() throws Exception { addProbe(logProbe); AtomicBoolean received = new AtomicBoolean(); AtomicBoolean error = new AtomicBoolean(); - registerProbeStatusListener( - probeStatus -> { - if (probeStatus.getDiagnostics().getStatus() == ProbeStatus.Status.RECEIVED) { - received.set(true); - } - if (probeStatus.getDiagnostics().getStatus() == ProbeStatus.Status.ERROR) { - assertEquals( - "Cannot find method datadog/smoketest/debugger/ServerDebuggerTestApplication::unknownMethodName", - probeStatus.getDiagnostics().getException().getMessage()); - error.set(true); - } - }); + registerProbeStatusListener(probeStatus -> { + if (probeStatus.getDiagnostics().getStatus() == ProbeStatus.Status.RECEIVED) { + received.set(true); + } + if (probeStatus.getDiagnostics().getStatus() == ProbeStatus.Status.ERROR) { + assertEquals( + "Cannot find method datadog/smoketest/debugger/ServerDebuggerTestApplication::unknownMethodName", + probeStatus.getDiagnostics().getException().getMessage()); + error.set(true); + } + }); processRequests( () -> received.get() && error.get(), () -> String.format("timeout received=%s error=%s", received.get(), error.get())); diff --git a/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/ServerAppDebuggerIntegrationTest.java b/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/ServerAppDebuggerIntegrationTest.java index bc844599164..0ddab83325f 100644 --- a/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/ServerAppDebuggerIntegrationTest.java +++ b/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/ServerAppDebuggerIntegrationTest.java @@ -115,15 +115,14 @@ protected void waitForInstrumentation( if (waitOnProbeStatuses) { AtomicBoolean received = new AtomicBoolean(); AtomicBoolean installed = new AtomicBoolean(); - registerProbeStatusListener( - probeStatus -> { - if (probeStatus.getDiagnostics().getStatus() == ProbeStatus.Status.RECEIVED) { - received.set(true); - } - if (probeStatus.getDiagnostics().getStatus() == ProbeStatus.Status.INSTALLED) { - installed.set(true); - } - }); + registerProbeStatusListener(probeStatus -> { + if (probeStatus.getDiagnostics().getStatus() == ProbeStatus.Status.RECEIVED) { + received.set(true); + } + if (probeStatus.getDiagnostics().getStatus() == ProbeStatus.Status.INSTALLED) { + installed.set(true); + } + }); processRequests( () -> received.get() && installed.get(), () -> String.format("timeout received=%s installed=%s", received.get(), installed.get())); @@ -140,10 +139,9 @@ protected void waitForExceptionFingerprint() throws Exception { protected void waitForAProbeStatus(ProbeStatus.Status status) throws Exception { AtomicBoolean statusResult = new AtomicBoolean(); - registerProbeStatusListener( - probeStatus -> { - statusResult.set(probeStatus.getDiagnostics().getStatus() == status); - }); + registerProbeStatusListener(probeStatus -> { + statusResult.set(probeStatus.getDiagnostics().getStatus() == status); + }); processRequests( statusResult::get, () -> String.format("timeout statusResult=%s", statusResult.get())); } diff --git a/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/SpanDecorationProbesIntegrationTests.java b/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/SpanDecorationProbesIntegrationTests.java index 90c7d26bc4a..4fcc9c03095 100644 --- a/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/SpanDecorationProbesIntegrationTests.java +++ b/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/SpanDecorationProbesIntegrationTests.java @@ -60,16 +60,15 @@ void testMethodSimpleTagNoCondition() throws Exception { waitForInstrumentation(appUrl); execute(appUrl, TRACED_METHOD_NAME); AtomicBoolean traceReceived = new AtomicBoolean(); - registerTraceListener( - decodedTrace -> { - for (DecodedSpan span : decodedTrace.getSpans()) { - if (isTracedFullMethodSpan(span)) { - assertEquals("foobar", span.getMeta().get("tag1")); - assertEquals(PROBE_ID.getId(), span.getMeta().get("_dd.di.tag1.probe_id")); - traceReceived.set(true); - } - } - }); + registerTraceListener(decodedTrace -> { + for (DecodedSpan span : decodedTrace.getSpans()) { + if (isTracedFullMethodSpan(span)) { + assertEquals("foobar", span.getMeta().get("tag1")); + assertEquals(PROBE_ID.getId(), span.getMeta().get("_dd.di.tag1.probe_id")); + traceReceived.set(true); + } + } + }); processRequests( traceReceived::get, () -> String.format("timeout traceReceived=%s", traceReceived.get())); } @@ -107,18 +106,17 @@ void testMethodMultiTagsMultiConditions() throws Exception { waitForInstrumentation(appUrl); execute(appUrl, TRACED_METHOD_NAME); AtomicBoolean traceReceived = new AtomicBoolean(); - registerTraceListener( - decodedTrace -> { - for (DecodedSpan span : decodedTrace.getSpans()) { - if (isTracedFullMethodSpan(span)) { - assertEquals("foobar", span.getMeta().get("tag1")); - assertFalse(span.getMeta().containsKey("tag2")); - assertEquals("Above Pi: 3.42", span.getMeta().get("tag3")); - assertEquals("val2", span.getMeta().get("tag4")); - traceReceived.set(true); - } - } - }); + registerTraceListener(decodedTrace -> { + for (DecodedSpan span : decodedTrace.getSpans()) { + if (isTracedFullMethodSpan(span)) { + assertEquals("foobar", span.getMeta().get("tag1")); + assertFalse(span.getMeta().containsKey("tag2")); + assertEquals("Above Pi: 3.42", span.getMeta().get("tag3")); + assertEquals("val2", span.getMeta().get("tag4")); + traceReceived.set(true); + } + } + }); processRequests( traceReceived::get, () -> String.format("timeout traceReceived=%s", traceReceived.get())); } @@ -141,24 +139,21 @@ void testMethodSimpleTagValueError() throws Exception { execute(appUrl, TRACED_METHOD_NAME); AtomicBoolean snapshotTest = new AtomicBoolean(false); AtomicBoolean spanTest = new AtomicBoolean(false); - registerSnapshotListener( - snapshot -> { + registerSnapshotListener(snapshot -> { + assertEquals( + "Cannot find symbol: invalidArg", snapshot.getEvaluationErrors().get(0).getMessage()); + snapshotTest.set(true); + }); + registerTraceListener(decodedTrace -> { + for (DecodedSpan span : decodedTrace.getSpans()) { + if (isTracedFullMethodSpan(span)) { + assertFalse(span.getMeta().containsKey("tag1")); assertEquals( - "Cannot find symbol: invalidArg", snapshot.getEvaluationErrors().get(0).getMessage()); - snapshotTest.set(true); - }); - registerTraceListener( - decodedTrace -> { - for (DecodedSpan span : decodedTrace.getSpans()) { - if (isTracedFullMethodSpan(span)) { - assertFalse(span.getMeta().containsKey("tag1")); - assertEquals( - "Cannot find symbol: invalidArg", - span.getMeta().get("_dd.di.tag1.evaluation_error")); - spanTest.set(true); - } - } - }); + "Cannot find symbol: invalidArg", span.getMeta().get("_dd.di.tag1.evaluation_error")); + spanTest.set(true); + } + } + }); processRequests( () -> snapshotTest.get() && spanTest.get(), () -> @@ -189,21 +184,19 @@ void testMethodSimpleTagConditionError() throws Exception { execute(appUrl, TRACED_METHOD_NAME); AtomicBoolean snapshotTest = new AtomicBoolean(false); AtomicBoolean spanTest = new AtomicBoolean(false); - registerSnapshotListener( - snapshot -> { - assertEquals( - "Cannot find symbol: invalidArg", snapshot.getEvaluationErrors().get(0).getMessage()); - snapshotTest.set(true); - }); - registerTraceListener( - decodedTrace -> { - for (DecodedSpan span : decodedTrace.getSpans()) { - if (isTracedFullMethodSpan(span)) { - assertFalse(span.getMeta().containsKey("tag1")); - spanTest.set(true); - } - } - }); + registerSnapshotListener(snapshot -> { + assertEquals( + "Cannot find symbol: invalidArg", snapshot.getEvaluationErrors().get(0).getMessage()); + snapshotTest.set(true); + }); + registerTraceListener(decodedTrace -> { + for (DecodedSpan span : decodedTrace.getSpans()) { + if (isTracedFullMethodSpan(span)) { + assertFalse(span.getMeta().containsKey("tag1")); + spanTest.set(true); + } + } + }); processRequests( () -> snapshotTest.get() && spanTest.get(), () -> @@ -232,29 +225,26 @@ void testMethodMultiTagValueError() throws Exception { execute(appUrl, TRACED_METHOD_NAME); AtomicBoolean snapshotTest = new AtomicBoolean(false); AtomicBoolean spanTest = new AtomicBoolean(false); - registerSnapshotListener( - snapshot -> { - List evalErrors = snapshot.getEvaluationErrors(); - assertEquals("Cannot find symbol: invalidArg", evalErrors.get(0).getMessage()); - assertEquals("Cannot find symbol: invalidArg2", evalErrors.get(1).getMessage()); - snapshotTest.set(true); - }); - registerTraceListener( - decodedTrace -> { - for (DecodedSpan span : decodedTrace.getSpans()) { - if (isTracedFullMethodSpan(span)) { - assertFalse(span.getMeta().containsKey("tag1")); - assertFalse(span.getMeta().containsKey("tag2")); - assertEquals( - "Cannot find symbol: invalidArg", - span.getMeta().get("_dd.di.tag1.evaluation_error")); - assertEquals( - "Cannot find symbol: invalidArg2", - span.getMeta().get("_dd.di.tag2.evaluation_error")); - spanTest.set(true); - } - } - }); + registerSnapshotListener(snapshot -> { + List evalErrors = snapshot.getEvaluationErrors(); + assertEquals("Cannot find symbol: invalidArg", evalErrors.get(0).getMessage()); + assertEquals("Cannot find symbol: invalidArg2", evalErrors.get(1).getMessage()); + snapshotTest.set(true); + }); + registerTraceListener(decodedTrace -> { + for (DecodedSpan span : decodedTrace.getSpans()) { + if (isTracedFullMethodSpan(span)) { + assertFalse(span.getMeta().containsKey("tag1")); + assertFalse(span.getMeta().containsKey("tag2")); + assertEquals( + "Cannot find symbol: invalidArg", span.getMeta().get("_dd.di.tag1.evaluation_error")); + assertEquals( + "Cannot find symbol: invalidArg2", + span.getMeta().get("_dd.di.tag2.evaluation_error")); + spanTest.set(true); + } + } + }); processRequests( () -> snapshotTest.get() && spanTest.get(), () -> @@ -279,16 +269,15 @@ void testSamplingSpanDecoration() throws Exception { waitForInstrumentation(appUrl); execute(appUrl, "loopingTracedMethod", "100"); AtomicInteger count = new AtomicInteger(); - registerTraceListener( - decodedTrace -> { - for (DecodedSpan span : decodedTrace.getSpans()) { - if (isTracedFullMethodSpan(span)) { - if (span.getMeta().containsKey("tag1")) { - count.incrementAndGet(); - } - } + registerTraceListener(decodedTrace -> { + for (DecodedSpan span : decodedTrace.getSpans()) { + if (isTracedFullMethodSpan(span)) { + if (span.getMeta().containsKey("tag1")) { + count.incrementAndGet(); } - }); + } + } + }); processRequests(() -> count.get() >= 100, () -> String.format("timeout count=%d", count.get())); } diff --git a/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/SpanProbesIntegrationTest.java b/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/SpanProbesIntegrationTest.java index 3040d3cc878..1b92b4c197a 100644 --- a/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/SpanProbesIntegrationTest.java +++ b/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/SpanProbesIntegrationTest.java @@ -32,12 +32,11 @@ void testMethodSpan() throws Exception { AtomicBoolean statusResult = registerCheckReceivedInstalledEmitting(PROBE_ID); AtomicBoolean traceReceived = new AtomicBoolean(); - registerTraceListener( - decodedTrace -> { - DecodedSpan decodedSpan = decodedTrace.getSpans().get(0); - assertEquals("Main.fullMethod", decodedSpan.getResource()); - traceReceived.set(true); - }); + registerTraceListener(decodedTrace -> { + DecodedSpan decodedSpan = decodedTrace.getSpans().get(0); + assertEquals("Main.fullMethod", decodedSpan.getResource()); + traceReceived.set(true); + }); processRequests( () -> statusResult.get() && traceReceived.get(), () -> @@ -62,12 +61,11 @@ void testLineRangeSpan() throws Exception { targetProcess = createProcessBuilder(logFilePath, METHOD_NAME, EXPECTED_UPLOADS).start(); AtomicBoolean statusResult = registerCheckReceivedInstalledEmitting(PROBE_ID); AtomicBoolean traceReceived = new AtomicBoolean(); - registerTraceListener( - decodedTrace -> { - DecodedSpan decodedSpan = decodedTrace.getSpans().get(0); - assertEquals("Main.fullMethod:L95-104", decodedSpan.getResource()); - traceReceived.set(true); - }); + registerTraceListener(decodedTrace -> { + DecodedSpan decodedSpan = decodedTrace.getSpans().get(0); + assertEquals("Main.fullMethod:L95-104", decodedSpan.getResource()); + traceReceived.set(true); + }); processRequests( () -> statusResult.get() && traceReceived.get(), () -> @@ -94,18 +92,17 @@ void testSingleLineSpan() throws Exception { targetProcess = createProcessBuilder(logFilePath, METHOD_NAME, EXPECTED_UPLOADS).start(); AtomicBoolean received = new AtomicBoolean(false); AtomicBoolean error = new AtomicBoolean(false); - registerProbeStatusListener( - probeStatus -> { - if (probeStatus.getDiagnostics().getStatus() == ProbeStatus.Status.RECEIVED) { - received.set(true); - } - if (probeStatus.getDiagnostics().getStatus() == ProbeStatus.Status.ERROR) { - assertEquals( - "Single line span is not supported, you need to provide a range.", - probeStatus.getDiagnostics().getException().getMessage()); - error.set(true); - } - }); + registerProbeStatusListener(probeStatus -> { + if (probeStatus.getDiagnostics().getStatus() == ProbeStatus.Status.RECEIVED) { + received.set(true); + } + if (probeStatus.getDiagnostics().getStatus() == ProbeStatus.Status.ERROR) { + assertEquals( + "Single line span is not supported, you need to provide a range.", + probeStatus.getDiagnostics().getException().getMessage()); + error.set(true); + } + }); processRequests( () -> received.get() && error.get(), () -> String.format("timeout received=%s error=%s", received.get(), error.get())); diff --git a/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/SpringBasedIntegrationTest.java b/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/SpringBasedIntegrationTest.java index c0922361022..9354f761dbc 100644 --- a/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/SpringBasedIntegrationTest.java +++ b/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/SpringBasedIntegrationTest.java @@ -67,12 +67,11 @@ protected static void waitForSpecificLogLine( int i = 0; while (i < total && !result[0]) { try (Stream lines = Files.lines(logFilePath)) { - lines.forEach( - it -> { - if (it.contains(line)) { - result[0] = true; - } - }); + lines.forEach(it -> { + if (it.contains(line)) { + result[0] = true; + } + }); } LockSupport.parkNanos(sleep.toNanos()); i++; diff --git a/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/TracerDebuggerIntegrationTest.java b/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/TracerDebuggerIntegrationTest.java index d723a83c6ff..67241f2309d 100644 --- a/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/TracerDebuggerIntegrationTest.java +++ b/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/TracerDebuggerIntegrationTest.java @@ -53,23 +53,21 @@ void testTracer(boolean processTagsEnabled) throws Exception { .captureSnapshot(true) .build(); AtomicBoolean requestReceived = new AtomicBoolean(false); - registerIntakeRequestListener( - intakeRequest -> { - assertEquals( - PROBE_ID.getId(), intakeRequest.getDebugger().getSnapshot().getProbe().getId()); - assertTrue(Pattern.matches("[0-9a-f]+", intakeRequest.getTraceId())); - assertTrue(Pattern.matches("\\d+", intakeRequest.getSpanId())); - if (processTagsEnabled) { - assertNotNull(intakeRequest.getProcessTags()); - assertTrue( - intakeRequest - .getProcessTags() - .contains("entrypoint.name:" + TagsHelper.sanitize(DEBUGGER_TEST_APP_CLASS))); - } else { - assertNull(intakeRequest.getProcessTags()); - } - requestReceived.set(true); - }); + registerIntakeRequestListener(intakeRequest -> { + assertEquals(PROBE_ID.getId(), intakeRequest.getDebugger().getSnapshot().getProbe().getId()); + assertTrue(Pattern.matches("[0-9a-f]+", intakeRequest.getTraceId())); + assertTrue(Pattern.matches("\\d+", intakeRequest.getSpanId())); + if (processTagsEnabled) { + assertNotNull(intakeRequest.getProcessTags()); + assertTrue( + intakeRequest + .getProcessTags() + .contains("entrypoint.name:" + TagsHelper.sanitize(DEBUGGER_TEST_APP_CLASS))); + } else { + assertNull(intakeRequest.getProcessTags()); + } + requestReceived.set(true); + }); String httpPort = startSpringApp(singletonList(logProbe), processTagsEnabled); sendRequest(httpPort, "/greeting"); processRequests( @@ -94,17 +92,15 @@ void testTracerDynamicLog() throws Exception { .evaluateAt(MethodLocation.EXIT) .build(); AtomicBoolean requestReceived = new AtomicBoolean(false); - registerIntakeRequestListener( - intakeRequest -> { - Snapshot snapshot = intakeRequest.getDebugger().getSnapshot(); - assertEquals(PROBE_ID.getId(), snapshot.getProbe().getId()); - assertTrue(Pattern.matches("[0-9a-f]+", intakeRequest.getTraceId())); - assertTrue(Pattern.matches("\\d+", intakeRequest.getSpanId())); - assertFalse( - logHasErrors( - logFilePath, it -> it.contains("TypePool$Resolution$NoSuchTypeException"))); - requestReceived.set(true); - }); + registerIntakeRequestListener(intakeRequest -> { + Snapshot snapshot = intakeRequest.getDebugger().getSnapshot(); + assertEquals(PROBE_ID.getId(), snapshot.getProbe().getId()); + assertTrue(Pattern.matches("[0-9a-f]+", intakeRequest.getTraceId())); + assertTrue(Pattern.matches("\\d+", intakeRequest.getSpanId())); + assertFalse( + logHasErrors(logFilePath, it -> it.contains("TypePool$Resolution$NoSuchTypeException"))); + requestReceived.set(true); + }); String httpPort = startSpringApp(singletonList(logProbe)); sendRequest(httpPort, "/greeting"); processRequests( @@ -125,18 +121,16 @@ void testTracerSameMethod() throws Exception { .captureSnapshot(true) .build(); AtomicBoolean requestReceived = new AtomicBoolean(false); - registerIntakeRequestListener( - intakeRequest -> { - Snapshot snapshot = intakeRequest.getDebugger().getSnapshot(); - assertEquals(PROBE_ID.getId(), snapshot.getProbe().getId()); - assertEquals( - 42, snapshot.getCaptures().getEntry().getArguments().get("argInt").getValue()); - // no locals captured - assertNull(snapshot.getCaptures().getEntry().getLocals()); - assertTrue(Pattern.matches("[0-9a-f]+", intakeRequest.getTraceId())); - assertTrue(Pattern.matches("\\d+", intakeRequest.getSpanId())); - requestReceived.set(true); - }); + registerIntakeRequestListener(intakeRequest -> { + Snapshot snapshot = intakeRequest.getDebugger().getSnapshot(); + assertEquals(PROBE_ID.getId(), snapshot.getProbe().getId()); + assertEquals(42, snapshot.getCaptures().getEntry().getArguments().get("argInt").getValue()); + // no locals captured + assertNull(snapshot.getCaptures().getEntry().getLocals()); + assertTrue(Pattern.matches("[0-9a-f]+", intakeRequest.getTraceId())); + assertTrue(Pattern.matches("\\d+", intakeRequest.getSpanId())); + requestReceived.set(true); + }); String httpPort = startSpringApp(singletonList(logProbe)); sendRequest(httpPort, "/greeting"); processRequests( @@ -158,17 +152,15 @@ void testTracerLineSnapshotProbe() throws Exception { .captureSnapshot(true) .build(); AtomicBoolean requestReceived = new AtomicBoolean(false); - registerIntakeRequestListener( - intakeRequest -> { - Snapshot snapshot = intakeRequest.getDebugger().getSnapshot(); - assertEquals(PROBE_ID.getId(), snapshot.getProbe().getId()); - assertEquals( - 42, - snapshot.getCaptures().getLines().get(15).getArguments().get("argInt").getValue()); - assertTrue(Pattern.matches("[0-9a-f]+", intakeRequest.getTraceId())); - assertTrue(Pattern.matches("\\d+", intakeRequest.getSpanId())); - requestReceived.set(true); - }); + registerIntakeRequestListener(intakeRequest -> { + Snapshot snapshot = intakeRequest.getDebugger().getSnapshot(); + assertEquals(PROBE_ID.getId(), snapshot.getProbe().getId()); + assertEquals( + 42, snapshot.getCaptures().getLines().get(15).getArguments().get("argInt").getValue()); + assertTrue(Pattern.matches("[0-9a-f]+", intakeRequest.getTraceId())); + assertTrue(Pattern.matches("\\d+", intakeRequest.getSpanId())); + requestReceived.set(true); + }); String httpPort = startSpringApp(singletonList(logProbe)); sendRequest(httpPort, "/greeting"); processRequests( @@ -192,15 +184,14 @@ void testTracerLineDynamicLogProbe() throws Exception { .captureSnapshot(false) .build(); AtomicBoolean requestReceived = new AtomicBoolean(false); - registerIntakeRequestListener( - intakeRequest -> { - Snapshot snapshot = intakeRequest.getDebugger().getSnapshot(); - assertEquals(PROBE_ID.getId(), snapshot.getProbe().getId()); - assertEquals("processWithArg 42", intakeRequest.getMessage()); - assertTrue(Pattern.matches("[0-9a-f]+", intakeRequest.getTraceId())); - assertTrue(Pattern.matches("\\d+", intakeRequest.getSpanId())); - requestReceived.set(true); - }); + registerIntakeRequestListener(intakeRequest -> { + Snapshot snapshot = intakeRequest.getDebugger().getSnapshot(); + assertEquals(PROBE_ID.getId(), snapshot.getProbe().getId()); + assertEquals("processWithArg 42", intakeRequest.getMessage()); + assertTrue(Pattern.matches("[0-9a-f]+", intakeRequest.getTraceId())); + assertTrue(Pattern.matches("\\d+", intakeRequest.getSpanId())); + requestReceived.set(true); + }); String httpPort = startSpringApp(singletonList(logProbe)); sendRequest(httpPort, "/greeting"); processRequests( diff --git a/dd-smoke-tests/gradle/src/test/java/datadog/smoketest/AbstractGradleTest.java b/dd-smoke-tests/gradle/src/test/java/datadog/smoketest/AbstractGradleTest.java index 6daf45348e2..fb08b5d05b2 100644 --- a/dd-smoke-tests/gradle/src/test/java/datadog/smoketest/AbstractGradleTest.java +++ b/dd-smoke-tests/gradle/src/test/java/datadog/smoketest/AbstractGradleTest.java @@ -107,30 +107,28 @@ protected static void killGradleDaemonsIn(Path testKitDir) { try (Stream files = Files.walk(testKitDir)) { files .filter(Files::isRegularFile) - .forEach( - file -> { - String name = file.getFileName().toString(); - if (!name.startsWith("daemon-") || !name.endsWith(".out.log")) { - return; - } - String pid = - name.substring("daemon-".length(), name.length() - ".out.log".length()); - if (!pid.matches("\\d+")) { - // skip the UUID fallback Gradle uses when the PID is unavailable - return; - } - ProcessBuilder kill = - windows - ? new ProcessBuilder("taskkill", "/F", "/PID", pid) - : new ProcessBuilder("kill", pid); - try { - kill.redirectErrorStream(true).start().waitFor(5, TimeUnit.SECONDS); - } catch (InterruptedException e) { - Thread.currentThread().interrupt(); - } catch (Exception e) { - // best effort — the daemon may already be stopped - } - }); + .forEach(file -> { + String name = file.getFileName().toString(); + if (!name.startsWith("daemon-") || !name.endsWith(".out.log")) { + return; + } + String pid = name.substring("daemon-".length(), name.length() - ".out.log".length()); + if (!pid.matches("\\d+")) { + // skip the UUID fallback Gradle uses when the PID is unavailable + return; + } + ProcessBuilder kill = + windows + ? new ProcessBuilder("taskkill", "/F", "/PID", pid) + : new ProcessBuilder("kill", pid); + try { + kill.redirectErrorStream(true).start().waitFor(5, TimeUnit.SECONDS); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } catch (Exception e) { + // best effort — the daemon may already be stopped + } + }); } catch (Exception e) { // best effort — failing to enumerate daemon logs must not fail the test run } diff --git a/dd-smoke-tests/grpc-1.5/src/main/java/datadog/smoketest/grpc/App.java b/dd-smoke-tests/grpc-1.5/src/main/java/datadog/smoketest/grpc/App.java index 74137b6fe0c..5cb5b3ef865 100644 --- a/dd-smoke-tests/grpc-1.5/src/main/java/datadog/smoketest/grpc/App.java +++ b/dd-smoke-tests/grpc-1.5/src/main/java/datadog/smoketest/grpc/App.java @@ -26,16 +26,15 @@ private void start() throws IOException { logger.info("Server started, listening on " + port); Runtime.getRuntime() .addShutdownHook( - new Thread( - () -> { - System.err.println("*** shutting down gRPC server since JVM is shutting down"); - try { - App.this.stop(); - } catch (InterruptedException e) { - e.printStackTrace(System.err); - } - System.err.println("*** server shut down"); - })); + new Thread(() -> { + System.err.println("*** shutting down gRPC server since JVM is shutting down"); + try { + App.this.stop(); + } catch (InterruptedException e) { + e.printStackTrace(System.err); + } + System.err.println("*** server shut down"); + })); } private void stop() throws InterruptedException { diff --git a/dd-smoke-tests/jersey-3/src/main/java/smoketest/MainApp.java b/dd-smoke-tests/jersey-3/src/main/java/smoketest/MainApp.java index 292a233b6eb..de3b4f8efbd 100644 --- a/dd-smoke-tests/jersey-3/src/main/java/smoketest/MainApp.java +++ b/dd-smoke-tests/jersey-3/src/main/java/smoketest/MainApp.java @@ -58,18 +58,17 @@ public static void main(String[] args) { // add jvm shutdown hook Runtime.getRuntime() .addShutdownHook( - new Thread( - () -> { - try { - System.out.println("Shutting down the application..."); - - httpServer.shutdownNow(); - - System.out.println("Done, exit."); - } catch (Exception e) { - Logger.getLogger(MainApp.class.getName()).log(Level.SEVERE, null, e); - } - })); + new Thread(() -> { + try { + System.out.println("Shutting down the application..."); + + httpServer.shutdownNow(); + + System.out.println("Done, exit."); + } catch (Exception e) { + Logger.getLogger(MainApp.class.getName()).log(Level.SEVERE, null, e); + } + })); System.out.println("Application started."); System.out.println("Stop the application using CTRL+C"); diff --git a/dd-smoke-tests/openfeature-legacy/src/test/java/datadog/smoketest/openfeature/legacy/AbstractLegacyProviderSmokeTest.java b/dd-smoke-tests/openfeature-legacy/src/test/java/datadog/smoketest/openfeature/legacy/AbstractLegacyProviderSmokeTest.java index 59ddfdf0cd7..809bdf1d01f 100644 --- a/dd-smoke-tests/openfeature-legacy/src/test/java/datadog/smoketest/openfeature/legacy/AbstractLegacyProviderSmokeTest.java +++ b/dd-smoke-tests/openfeature-legacy/src/test/java/datadog/smoketest/openfeature/legacy/AbstractLegacyProviderSmokeTest.java @@ -37,10 +37,9 @@ void returnsTheCallerDefaults() { + " default=true reason=ERROR error=PROVIDER_NOT_READY variant=null"); } assertTrue( - app.waitForLogLine( - line -> - line.contains("WARN datadog.trace.api.openfeature.Provider") - && line.contains("incompatible with the Datadog Java agent")), + app.waitForLogLine(line -> + line.contains("WARN datadog.trace.api.openfeature.Provider") + && line.contains("incompatible with the Datadog Java agent")), "the agent warns to upgrade the provider"); } diff --git a/dd-smoke-tests/openfeature/application/src/main/java/datadog/smoketest/springboot/openfeature/OpenFeatureController.java b/dd-smoke-tests/openfeature/application/src/main/java/datadog/smoketest/springboot/openfeature/OpenFeatureController.java index 9599854cbbf..c8dd1c2b087 100644 --- a/dd-smoke-tests/openfeature/application/src/main/java/datadog/smoketest/springboot/openfeature/OpenFeatureController.java +++ b/dd-smoke-tests/openfeature/application/src/main/java/datadog/smoketest/springboot/openfeature/OpenFeatureController.java @@ -102,24 +102,23 @@ private static EvaluationContext context(final EvaluateRequest request) { final MutableContext context = new MutableContext(); context.setTargetingKey(request.getTargetingKey()); if (request.attributes != null) { - request.attributes.forEach( - (key, value) -> { - if (value instanceof Boolean) { - context.add(key, (Boolean) value); - } else if (value instanceof Integer) { - context.add(key, (Integer) value); - } else if (value instanceof Double) { - context.add(key, (Double) value); - } else if (value instanceof String) { - context.add(key, (String) value); - } else if (value instanceof Map) { - context.add(key, Value.objectToValue(value).asStructure()); - } else if (value instanceof List) { - context.add(key, Value.objectToValue(value).asList()); - } else { - context.add(key, (Structure) null); - } - }); + request.attributes.forEach((key, value) -> { + if (value instanceof Boolean) { + context.add(key, (Boolean) value); + } else if (value instanceof Integer) { + context.add(key, (Integer) value); + } else if (value instanceof Double) { + context.add(key, (Double) value); + } else if (value instanceof String) { + context.add(key, (String) value); + } else if (value instanceof Map) { + context.add(key, Value.objectToValue(value).asStructure()); + } else if (value instanceof List) { + context.add(key, Value.objectToValue(value).asList()); + } else { + context.add(key, (Structure) null); + } + }); } return context; } diff --git a/dd-smoke-tests/profiling-integration-tests/src/main/java/datadog/smoketest/profiling/ProfilingTestApplication.java b/dd-smoke-tests/profiling-integration-tests/src/main/java/datadog/smoketest/profiling/ProfilingTestApplication.java index 5db03d485a2..1c45e9e700c 100644 --- a/dd-smoke-tests/profiling-integration-tests/src/main/java/datadog/smoketest/profiling/ProfilingTestApplication.java +++ b/dd-smoke-tests/profiling-integration-tests/src/main/java/datadog/smoketest/profiling/ProfilingTestApplication.java @@ -95,28 +95,26 @@ private static void submitWorkToExecutor(ExecutorService executorService) AtomicInteger it = new AtomicInteger(); for (int i = 0; i < 100; i++) { executorService - .submit( - () -> { - try { - Thread.sleep(10); - it.incrementAndGet(); - } catch (InterruptedException e) { - } - }) + .submit(() -> { + try { + Thread.sleep(10); + it.incrementAndGet(); + } catch (InterruptedException e) { + } + }) .get(); } List> runnables = IntStream.range(0, 100) - .mapToObj( - i -> - (Callable) - () -> { - try { - Thread.sleep(10); - } catch (InterruptedException e) { - } - return it.getAndIncrement(); - }) + .mapToObj(i -> + (Callable) + () -> { + try { + Thread.sleep(10); + } catch (InterruptedException e) { + } + return it.getAndIncrement(); + }) .collect(Collectors.toList()); for (Future f : executorService.invokeAll(runnables)) { f.get(); diff --git a/dd-smoke-tests/profiling-integration-tests/src/main/java/datadog/smoketest/profiling/QueueProcessing.java b/dd-smoke-tests/profiling-integration-tests/src/main/java/datadog/smoketest/profiling/QueueProcessing.java index 4efc4ffd29e..f7bf4a984f5 100644 --- a/dd-smoke-tests/profiling-integration-tests/src/main/java/datadog/smoketest/profiling/QueueProcessing.java +++ b/dd-smoke-tests/profiling-integration-tests/src/main/java/datadog/smoketest/profiling/QueueProcessing.java @@ -22,21 +22,20 @@ final class QueueProcessing { return t; }); for (int i = 0; i < workers; i++) { - executor.submit( - () -> { - ExponentialDistribution distribution = new ExponentialDistribution(meanServiceTimeNs); - while (!Thread.currentThread().isInterrupted()) { - try { - Consumer item = workQueue.take(); - long sample = (long) distribution.sample(); - System.out.println("=== service time: " + sample + "ns"); - item.accept(sample); - System.out.println("=== submitted"); - } catch (InterruptedException ignored) { - Thread.currentThread().interrupt(); - } - } - }); + executor.submit(() -> { + ExponentialDistribution distribution = new ExponentialDistribution(meanServiceTimeNs); + while (!Thread.currentThread().isInterrupted()) { + try { + Consumer item = workQueue.take(); + long sample = (long) distribution.sample(); + System.out.println("=== service time: " + sample + "ns"); + item.accept(sample); + System.out.println("=== submitted"); + } catch (InterruptedException ignored) { + Thread.currentThread().interrupt(); + } + } + }); } } diff --git a/dd-smoke-tests/profiling-integration-tests/src/test/java/datadog/smoketest/CodeHotspotsTest.java b/dd-smoke-tests/profiling-integration-tests/src/test/java/datadog/smoketest/CodeHotspotsTest.java index e74c92847ad..e651a80110e 100644 --- a/dd-smoke-tests/profiling-integration-tests/src/test/java/datadog/smoketest/CodeHotspotsTest.java +++ b/dd-smoke-tests/profiling-integration-tests/src/test/java/datadog/smoketest/CodeHotspotsTest.java @@ -357,12 +357,11 @@ private static void validateStats(IItemCollection events, double idleness, doubl } spanSampleCnt.values().stream() .map(AtomicLong::get) - .forEach( - v -> { - summaryStats.addValue(v); - p99.increment(v); - p50.increment(v); - }); + .forEach(v -> { + summaryStats.addValue(v); + p99.increment(v); + p50.increment(v); + }); /* Qualified samples are scaled according to 'idleness' - diff --git a/dd-smoke-tests/profiling-integration-tests/src/test/java/datadog/smoketest/JFRBasedProfilingIntegrationTest.java b/dd-smoke-tests/profiling-integration-tests/src/test/java/datadog/smoketest/JFRBasedProfilingIntegrationTest.java index 452cea370d8..3c927150ac2 100644 --- a/dd-smoke-tests/profiling-integration-tests/src/test/java/datadog/smoketest/JFRBasedProfilingIntegrationTest.java +++ b/dd-smoke-tests/profiling-integration-tests/src/test/java/datadog/smoketest/JFRBasedProfilingIntegrationTest.java @@ -411,12 +411,11 @@ private Instant convertFromQuantity(final IQuantity instant) { private Pair getRangeStartAndEnd(final IItemCollection events) { return events.getUnfilteredTimeRanges().stream() - .map( - range -> { - final Instant convertedStart = convertFromQuantity(range.getStart()); - final Instant convertedEnd = convertFromQuantity(range.getEnd()); - return Pair.of(convertedStart, convertedEnd); - }) + .map(range -> { + final Instant convertedStart = convertFromQuantity(range.getStart()); + final Instant convertedEnd = convertFromQuantity(range.getEnd()); + return Pair.of(convertedStart, convertedEnd); + }) .reduce( Pair.of(null, null), (send, newSend) -> { @@ -965,13 +964,12 @@ private static boolean checkLogLines(final Path logFilePath, final Predicate { - if (it.contains("ERROR") || it.contains("ASSERTION FAILED")) { - System.out.println(it); - logHasErrors[0] = true; - } - }); + .forEach(it -> { + if (it.contains("ERROR") || it.contains("ASSERTION FAILED")) { + System.out.println(it); + logHasErrors[0] = true; + } + }); if (logHasErrors[0]) { System.out.println( "Test application log is containing errors. See full run logs in " + logFilePath); diff --git a/dd-smoke-tests/ratpack-1.5/src/main/java/datadog/smoketest/ratpack/RatpackApp.java b/dd-smoke-tests/ratpack-1.5/src/main/java/datadog/smoketest/ratpack/RatpackApp.java index c9ca8527a75..9f088b971cc 100644 --- a/dd-smoke-tests/ratpack-1.5/src/main/java/datadog/smoketest/ratpack/RatpackApp.java +++ b/dd-smoke-tests/ratpack-1.5/src/main/java/datadog/smoketest/ratpack/RatpackApp.java @@ -9,33 +9,28 @@ public class RatpackApp { public static void main(String[] args) throws Exception { int port = Integer.parseInt(System.getProperty("ratpack.http.port", "8080")); - RatpackServer.start( - server -> - server - .serverConfig(config -> config.port(port)) - .handlers( - chain -> - chain - .path( - "api_security/sampling/:status_code", - ctx -> { - ctx.getResponse() - .status( - Integer.parseInt(ctx.getPathTokens().get("status_code"))) - .send("EXECUTED"); - }) - .path( - "api_security/response", - ctx -> - ctx.parse(JsonNode.class) - .then( - node -> { - ctx.getResponse().status(200); - ctx.render(json(node)); - })) - .all( - ctx -> { - ctx.getResponse().status(404).send("Not Found"); - }))); + RatpackServer.start(server -> + server + .serverConfig(config -> config.port(port)) + .handlers(chain -> + chain + .path( + "api_security/sampling/:status_code", + ctx -> { + ctx.getResponse() + .status(Integer.parseInt(ctx.getPathTokens().get("status_code"))) + .send("EXECUTED"); + }) + .path( + "api_security/response", + ctx -> + ctx.parse(JsonNode.class) + .then(node -> { + ctx.getResponse().status(200); + ctx.render(json(node)); + })) + .all(ctx -> { + ctx.getResponse().status(404).send("Not Found"); + }))); } } diff --git a/dd-smoke-tests/spring-security/src/main/java/com/example/jwt/SecurityConfig.java b/dd-smoke-tests/spring-security/src/main/java/com/example/jwt/SecurityConfig.java index 240daddf529..b25f7d1ac76 100644 --- a/dd-smoke-tests/spring-security/src/main/java/com/example/jwt/SecurityConfig.java +++ b/dd-smoke-tests/spring-security/src/main/java/com/example/jwt/SecurityConfig.java @@ -32,13 +32,12 @@ public class SecurityConfig { @Bean public SecurityFilterChain filterChain(HttpSecurity httpSecurity) throws Exception { return httpSecurity - .authorizeHttpRequests( - authorize -> - authorize - .mvcMatchers("/read/**") - .hasAuthority("SCOPE_read") - .anyRequest() - .authenticated()) + .authorizeHttpRequests(authorize -> + authorize + .mvcMatchers("/read/**") + .hasAuthority("SCOPE_read") + .anyRequest() + .authenticated()) .oauth2ResourceServer(OAuth2ResourceServerConfigurer::jwt) .build(); } diff --git a/dd-smoke-tests/springboot-freemarker/application/src/main/java/datadog/smoketest/springboot/XssController.java b/dd-smoke-tests/springboot-freemarker/application/src/main/java/datadog/smoketest/springboot/XssController.java index 4ddb2ae7915..8fbf285a982 100644 --- a/dd-smoke-tests/springboot-freemarker/application/src/main/java/datadog/smoketest/springboot/XssController.java +++ b/dd-smoke-tests/springboot-freemarker/application/src/main/java/datadog/smoketest/springboot/XssController.java @@ -13,7 +13,7 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; -@Controller() +@Controller @RequestMapping("/xss") public class XssController { diff --git a/dd-smoke-tests/springboot-jpa/application/src/main/java/datadog/smoketest/springboot/service/LibraryService.java b/dd-smoke-tests/springboot-jpa/application/src/main/java/datadog/smoketest/springboot/service/LibraryService.java index 1f211db1753..3cace30ffbd 100644 --- a/dd-smoke-tests/springboot-jpa/application/src/main/java/datadog/smoketest/springboot/service/LibraryService.java +++ b/dd-smoke-tests/springboot-jpa/application/src/main/java/datadog/smoketest/springboot/service/LibraryService.java @@ -25,11 +25,10 @@ public Library update(Library library) { library.getBooks().stream() .map(Book::getId) .map(this::findBookById) - .forEach( - book -> { - book.getAuthors().forEach(Author::increaseUpdateCount); - book.getOwner().increaseUpdateCount(); - }); + .forEach(book -> { + book.getAuthors().forEach(Author::increaseUpdateCount); + book.getOwner().increaseUpdateCount(); + }); return em.merge(library); } diff --git a/dd-smoke-tests/springboot/src/main/java/datadog/smoketest/springboot/jwt/JwtSecurityConfigurerAdapter.java b/dd-smoke-tests/springboot/src/main/java/datadog/smoketest/springboot/jwt/JwtSecurityConfigurerAdapter.java index 4e442b1507e..8896f9b3b4f 100644 --- a/dd-smoke-tests/springboot/src/main/java/datadog/smoketest/springboot/jwt/JwtSecurityConfigurerAdapter.java +++ b/dd-smoke-tests/springboot/src/main/java/datadog/smoketest/springboot/jwt/JwtSecurityConfigurerAdapter.java @@ -31,14 +31,12 @@ protected void configure(HttpSecurity http) throws Exception { .httpBasic() .disable() .exceptionHandling() - .authenticationEntryPoint( - (request, response, authException) -> { - response.sendError(401, authException.getMessage()); - }) - .accessDeniedHandler( - (request, response, accessDeniedException) -> { - response.sendError(403, "Access Denied."); - }) + .authenticationEntryPoint((request, response, authException) -> { + response.sendError(401, authException.getMessage()); + }) + .accessDeniedHandler((request, response, accessDeniedException) -> { + response.sendError(403, "Access Denied."); + }) .and() .headers() .disable(); diff --git a/dd-smoke-tests/src/main/java/datadog/smoketest/backend/MockAgentBackend.java b/dd-smoke-tests/src/main/java/datadog/smoketest/backend/MockAgentBackend.java index 72b415ad789..1a60b4c1a03 100644 --- a/dd-smoke-tests/src/main/java/datadog/smoketest/backend/MockAgentBackend.java +++ b/dd-smoke-tests/src/main/java/datadog/smoketest/backend/MockAgentBackend.java @@ -59,19 +59,18 @@ public void start() { } private void serverSpecs(JavaTestHttpServer server) { - server.handlers( - h -> { - // Trace endpoints are method-agnostic prefix handlers: the tracer submits - // traces with PUT (DDAgentApi), not POST. - h.prefix("/info", this::sendInfo); - h.prefix("/v1.0/traces", api -> collectTraces(api, TraceFormat.V1)); - h.prefix("/v0.5/traces", api -> collectTraces(api, TraceFormat.V05)); - h.prefix("/v0.4/traces", api -> collectTraces(api, TraceFormat.V04)); - h.prefix("/v0.7/config", this::serveRemoteConfig); - h.prefix("/telemetry/proxy", this::collectTelemetry); - // Everything else just succeeds. - h.all(api -> api.getResponse().status(200).send()); - }); + server.handlers(h -> { + // Trace endpoints are method-agnostic prefix handlers: the tracer submits + // traces with PUT (DDAgentApi), not POST. + h.prefix("/info", this::sendInfo); + h.prefix("/v1.0/traces", api -> collectTraces(api, TraceFormat.V1)); + h.prefix("/v0.5/traces", api -> collectTraces(api, TraceFormat.V05)); + h.prefix("/v0.4/traces", api -> collectTraces(api, TraceFormat.V04)); + h.prefix("/v0.7/config", this::serveRemoteConfig); + h.prefix("/telemetry/proxy", this::collectTelemetry); + // Everything else just succeeds. + h.all(api -> api.getResponse().status(200).send()); + }); } private void sendInfo(HandlerApi api) { diff --git a/dd-smoke-tests/src/main/java/datadog/smoketest/backend/RemoteConfig.java b/dd-smoke-tests/src/main/java/datadog/smoketest/backend/RemoteConfig.java index 55a54fb516b..6b44b254d26 100644 --- a/dd-smoke-tests/src/main/java/datadog/smoketest/backend/RemoteConfig.java +++ b/dd-smoke-tests/src/main/java/datadog/smoketest/backend/RemoteConfig.java @@ -71,16 +71,15 @@ public Map waitForRequest( Predicate> predicate, double timeoutSeconds) { AtomicReference> match = new AtomicReference<>(); new PollingConditions(timeoutSeconds) - .eventually( - () -> { - for (Map request : requests()) { - if (predicate.test(request)) { - match.set(request); - return; - } - } - throw new AssertionError("No remote-config poll request matched yet"); - }); + .eventually(() -> { + for (Map request : requests()) { + if (predicate.test(request)) { + match.set(request); + return; + } + } + throw new AssertionError("No remote-config poll request matched yet"); + }); return match.get(); } diff --git a/dd-smoke-tests/src/main/java/datadog/smoketest/backend/Telemetry.java b/dd-smoke-tests/src/main/java/datadog/smoketest/backend/Telemetry.java index 6d9c9529f57..d7d489b4d53 100644 --- a/dd-smoke-tests/src/main/java/datadog/smoketest/backend/Telemetry.java +++ b/dd-smoke-tests/src/main/java/datadog/smoketest/backend/Telemetry.java @@ -72,14 +72,13 @@ public void waitForCount(int count) { */ public void waitForCount(int count, double timeoutSeconds) { new PollingConditions(timeoutSeconds) - .eventually( - () -> { - int actual = getMessages().size(); - if (actual < count) { - throw new AssertionError( - "Expected at least " + count + " telemetry message(s) but got " + actual); - } - }); + .eventually(() -> { + int actual = getMessages().size(); + if (actual < count) { + throw new AssertionError( + "Expected at least " + count + " telemetry message(s) but got " + actual); + } + }); } /** @@ -102,11 +101,10 @@ public void waitForFlat(Predicate> predicate) { */ public void waitForFlat(Predicate> predicate, double timeoutSeconds) { new PollingConditions(timeoutSeconds) - .eventually( - () -> { - if (getFlatMessages().stream().noneMatch(predicate)) { - throw new AssertionError("No telemetry event matched; received: " + getMessages()); - } - }); + .eventually(() -> { + if (getFlatMessages().stream().noneMatch(predicate)) { + throw new AssertionError("No telemetry event matched; received: " + getMessages()); + } + }); } } diff --git a/dd-smoke-tests/src/main/java/datadog/smoketest/backend/Traces.java b/dd-smoke-tests/src/main/java/datadog/smoketest/backend/Traces.java index 57ebcdabdfe..97c93f1b725 100644 --- a/dd-smoke-tests/src/main/java/datadog/smoketest/backend/Traces.java +++ b/dd-smoke-tests/src/main/java/datadog/smoketest/backend/Traces.java @@ -50,14 +50,12 @@ public void waitForTraceCount(int count) { */ public void waitForTraceCount(int count, double timeoutSeconds) { new PollingConditions(timeoutSeconds) - .eventually( - () -> { - int actual = getTraces().size(); - if (actual < count) { - throw new AssertionError( - "Expected at least " + count + " trace(s) but got " + actual); - } - }); + .eventually(() -> { + int actual = getTraces().size(); + if (actual < count) { + throw new AssertionError("Expected at least " + count + " trace(s) but got " + actual); + } + }); } /** diff --git a/dd-smoke-tests/src/test/java/datadog/smoketest/ScopeDiagnosticsTestApp.java b/dd-smoke-tests/src/test/java/datadog/smoketest/ScopeDiagnosticsTestApp.java index be82224257c..30f2cab0a3c 100644 --- a/dd-smoke-tests/src/test/java/datadog/smoketest/ScopeDiagnosticsTestApp.java +++ b/dd-smoke-tests/src/test/java/datadog/smoketest/ScopeDiagnosticsTestApp.java @@ -65,14 +65,13 @@ private static void exercise(String action) throws Exception { span.finish(); if (action.startsWith("resume-retained")) { FutureTask resume = - new FutureTask<>( - () -> { - ContextScope scope = retained.resume(); - if (!"resume-retained-unclosed".equals(action)) { - scope.close(); - } - return null; - }); + new FutureTask<>(() -> { + ContextScope scope = retained.resume(); + if (!"resume-retained-unclosed".equals(action)) { + scope.close(); + } + return null; + }); new Thread(resume, "retained-continuation-worker").start(); resume.get(10, TimeUnit.SECONDS); } else if ("release-retained".equals(action)) { diff --git a/dd-smoke-tests/src/test/java/datadog/smoketest/backend/TestAgentBackendTest.java b/dd-smoke-tests/src/test/java/datadog/smoketest/backend/TestAgentBackendTest.java index d3b52e4ba76..a3b010b9cd2 100644 --- a/dd-smoke-tests/src/test/java/datadog/smoketest/backend/TestAgentBackendTest.java +++ b/dd-smoke-tests/src/test/java/datadog/smoketest/backend/TestAgentBackendTest.java @@ -110,18 +110,16 @@ void setRemoteConfigPostsPathAndConfigToTheSession() { // the agent builds the signed RC envelope; capture that request against a stub agent. AtomicReference captured = new AtomicReference<>(); try (JavaTestHttpServer agent = - JavaTestHttpServer.httpServer( - server -> - server.handlers( - handlers -> { - handlers.prefix( - "/test/session/responses/config/path", - api -> { - captured.set(new String(api.getRequest().getBody(), UTF_8)); - api.getResponse().status(202).send(); - }); - handlers.all(api -> api.getResponse().status(200).send()); - }))) { + JavaTestHttpServer.httpServer(server -> + server.handlers(handlers -> { + handlers.prefix( + "/test/session/responses/config/path", + api -> { + captured.set(new String(api.getRequest().getBody(), UTF_8)); + api.getResponse().status(202).send(); + }); + handlers.all(api -> api.getResponse().status(200).send()); + }))) { TestAgentBackend backend = AgentBackend.testAgentBuilder() .external(agent.getAddress().getHost(), agent.getAddress().getPort()) @@ -155,15 +153,13 @@ void readsAndDecodesRemoteConfigPollRequests() { + encoded + "\"},{\"url\":\"http://agent/v0.6/stats\",\"method\":\"POST\",\"body\":\"\"}]"; try (JavaTestHttpServer agent = - JavaTestHttpServer.httpServer( - server -> - server.handlers( - handlers -> { - handlers.prefix( - "/test/session/requests", - api -> api.getResponse().status(200).send(requestsJson)); - handlers.all(api -> api.getResponse().status(200).send()); - }))) { + JavaTestHttpServer.httpServer(server -> + server.handlers(handlers -> { + handlers.prefix( + "/test/session/requests", + api -> api.getResponse().status(200).send(requestsJson)); + handlers.all(api -> api.getResponse().status(200).send()); + }))) { TestAgentBackend backend = AgentBackend.testAgentBuilder() .external(agent.getAddress().getHost(), agent.getAddress().getPort()) @@ -191,25 +187,23 @@ void clearResetsRemoteConfigBeforeOpeningTheSession() { AtomicReference captured = new AtomicReference<>(); List calls = new CopyOnWriteArrayList<>(); try (JavaTestHttpServer agent = - JavaTestHttpServer.httpServer( - server -> - server.handlers( - handlers -> { - handlers.prefix( - "/test/session/responses/config", - api -> { - captured.set(new String(api.getRequest().getBody(), UTF_8)); - calls.add("reset"); - api.getResponse().status(202).send(); - }); - handlers.prefix( - "/test/session/start", - api -> { - calls.add("start"); - api.getResponse().status(200).send(); - }); - handlers.all(api -> api.getResponse().status(200).send()); - }))) { + JavaTestHttpServer.httpServer(server -> + server.handlers(handlers -> { + handlers.prefix( + "/test/session/responses/config", + api -> { + captured.set(new String(api.getRequest().getBody(), UTF_8)); + calls.add("reset"); + api.getResponse().status(202).send(); + }); + handlers.prefix( + "/test/session/start", + api -> { + calls.add("start"); + api.getResponse().status(200).send(); + }); + handlers.all(api -> api.getResponse().status(200).send()); + }))) { TestAgentBackend backend = AgentBackend.testAgentBuilder() .external(agent.getAddress().getHost(), agent.getAddress().getPort()) @@ -226,22 +220,19 @@ void clearResetsRemoteConfigBeforeOpeningTheSession() { /** A stub test agent: 200 on {@code /test/session/start}, {@code failuresStatus} on failures. */ private static JavaTestHttpServer stubAgent(int failuresStatus, String failuresBody) { - return JavaTestHttpServer.httpServer( - server -> - server.handlers( - handlers -> { - handlers.prefix( - "/test/session/start", api -> api.getResponse().status(200).send()); - handlers.prefix( - "/test/trace_check/failures", - api -> { - if (failuresBody.isEmpty()) { - api.getResponse().status(failuresStatus).send(); - } else { - api.getResponse().status(failuresStatus).send(failuresBody); - } - }); - handlers.all(api -> api.getResponse().status(200).send()); - })); + return JavaTestHttpServer.httpServer(server -> + server.handlers(handlers -> { + handlers.prefix("/test/session/start", api -> api.getResponse().status(200).send()); + handlers.prefix( + "/test/trace_check/failures", + api -> { + if (failuresBody.isEmpty()) { + api.getResponse().status(failuresStatus).send(); + } else { + api.getResponse().status(failuresStatus).send(failuresBody); + } + }); + handlers.all(api -> api.getResponse().status(200).send()); + })); } } diff --git a/dd-smoke-tests/src/test/java/datadog/smoketest/trace/SmokeMatcherTest.java b/dd-smoke-tests/src/test/java/datadog/smoketest/trace/SmokeMatcherTest.java index dff60d4e32c..815d3efd3cc 100644 --- a/dd-smoke-tests/src/test/java/datadog/smoketest/trace/SmokeMatcherTest.java +++ b/dd-smoke-tests/src/test/java/datadog/smoketest/trace/SmokeMatcherTest.java @@ -199,10 +199,8 @@ void metaStructMismatchFails() { .root() .metaStruct( "_dd.stack", - validates( - v -> - ((List) ((Map) v).get("vulnerability")).size() - == 99))))); + validates(v -> + ((List) ((Map) v).get("vulnerability")).size() == 99))))); } @Test diff --git a/dd-smoke-tests/vertx-3.4/application/src/main/java/datadog/vertx_3_4/IastVerticle.java b/dd-smoke-tests/vertx-3.4/application/src/main/java/datadog/vertx_3_4/IastVerticle.java index 4edfa41a5d0..00ae52d9f82 100644 --- a/dd-smoke-tests/vertx-3.4/application/src/main/java/datadog/vertx_3_4/IastVerticle.java +++ b/dd-smoke-tests/vertx-3.4/application/src/main/java/datadog/vertx_3_4/IastVerticle.java @@ -29,11 +29,10 @@ public void start(final Future startPromise) { router.route().handler(BodyHandler.create()); router.route().handler(CookieHandler.create()); Arrays.stream(IastHandler.values()) - .forEach( - handler -> { - handler.init(vertx); - router.route(handler.path).handler(handler); - }); + .forEach(handler -> { + handler.init(vertx); + router.route(handler.path).handler(handler); + }); vertx .createHttpServer(new HttpServerOptions().setHandle100ContinueAutomatically(true)) .requestHandler(router::accept) diff --git a/dd-smoke-tests/vertx-3.4/application/src/main/java/datadog/vertx_3_4/MainVerticle.java b/dd-smoke-tests/vertx-3.4/application/src/main/java/datadog/vertx_3_4/MainVerticle.java index 3b0b4d04761..0f28cb75fdd 100644 --- a/dd-smoke-tests/vertx-3.4/application/src/main/java/datadog/vertx_3_4/MainVerticle.java +++ b/dd-smoke-tests/vertx-3.4/application/src/main/java/datadog/vertx_3_4/MainVerticle.java @@ -36,32 +36,29 @@ public void start(Future startPromise) throws Exception { Router router = Router.router(vertx); router .route("/routes") - .handler( - ctx -> - ctx.response() - .setStatusCode(200) - .putHeader("content-type", "text/plain") - .end(randomFactorial().toString())); + .handler(ctx -> + ctx.response() + .setStatusCode(200) + .putHeader("content-type", "text/plain") + .end(randomFactorial().toString())); router .route("/api_security/sampling/:status_code") - .handler( - ctx -> - ctx.response() - .setStatusCode(Integer.parseInt(ctx.request().getParam("status_code"))) - .end("EXECUTED")); + .handler(ctx -> + ctx.response() + .setStatusCode(Integer.parseInt(ctx.request().getParam("status_code"))) + .end("EXECUTED")); vertx .createHttpServer(new HttpServerOptions().setHandle100ContinueAutomatically(true)) - .requestHandler( - req -> { - if (req.path().startsWith("/routes") || req.path().startsWith("/api_security")) { - router.accept(req); - } else { - req.response() - .putHeader("content-type", "text/plain") - .end(randomFactorial().toString()); - } - }) + .requestHandler(req -> { + if (req.path().startsWith("/routes") || req.path().startsWith("/api_security")) { + router.accept(req); + } else { + req.response() + .putHeader("content-type", "text/plain") + .end(randomFactorial().toString()); + } + }) .listen( Integer.getInteger("vertx.http.port", 8080), http -> { diff --git a/dd-smoke-tests/vertx-3.9/application/src/main/java/datadog/vertx_3_9/IastVerticle.java b/dd-smoke-tests/vertx-3.9/application/src/main/java/datadog/vertx_3_9/IastVerticle.java index 2942c43e07d..f2648dc57c7 100644 --- a/dd-smoke-tests/vertx-3.9/application/src/main/java/datadog/vertx_3_9/IastVerticle.java +++ b/dd-smoke-tests/vertx-3.9/application/src/main/java/datadog/vertx_3_9/IastVerticle.java @@ -27,11 +27,10 @@ public void start(final Promise startPromise) { final Router router = Router.router(vertx); router.route().handler(BodyHandler.create()); Arrays.stream(IastHandler.values()) - .forEach( - handler -> { - handler.init(vertx); - router.route(handler.path).handler(handler); - }); + .forEach(handler -> { + handler.init(vertx); + router.route(handler.path).handler(handler); + }); vertx .createHttpServer(new HttpServerOptions().setHandle100ContinueAutomatically(true)) .requestHandler(router) diff --git a/dd-smoke-tests/vertx-3.9/application/src/main/java/datadog/vertx_3_9/MainVerticle.java b/dd-smoke-tests/vertx-3.9/application/src/main/java/datadog/vertx_3_9/MainVerticle.java index fcc3ca02653..ad9455c66e4 100644 --- a/dd-smoke-tests/vertx-3.9/application/src/main/java/datadog/vertx_3_9/MainVerticle.java +++ b/dd-smoke-tests/vertx-3.9/application/src/main/java/datadog/vertx_3_9/MainVerticle.java @@ -36,25 +36,23 @@ public void start(Promise startPromise) throws Exception { Router router = Router.router(vertx); router .route("/routes") - .handler( - ctx -> - ctx.response() - .setStatusCode(200) - .putHeader("content-type", "text/plain") - .end(randomFactorial().toString())); + .handler(ctx -> + ctx.response() + .setStatusCode(200) + .putHeader("content-type", "text/plain") + .end(randomFactorial().toString())); vertx .createHttpServer(new HttpServerOptions().setHandle100ContinueAutomatically(true)) - .requestHandler( - req -> { - if (req.path().startsWith("/routes")) { - router.handle(req); - } else { - req.response() - .putHeader("content-type", "text/plain") - .end(randomFactorial().toString()); - } - }) + .requestHandler(req -> { + if (req.path().startsWith("/routes")) { + router.handle(req); + } else { + req.response() + .putHeader("content-type", "text/plain") + .end(randomFactorial().toString()); + } + }) .listen( Integer.getInteger("vertx.http.port", 8080), http -> { diff --git a/dd-smoke-tests/vertx-4.2/application/src/main/java/datadog/vertx_4_2/IastVerticle.java b/dd-smoke-tests/vertx-4.2/application/src/main/java/datadog/vertx_4_2/IastVerticle.java index 1527bd08f67..2c7f839df61 100644 --- a/dd-smoke-tests/vertx-4.2/application/src/main/java/datadog/vertx_4_2/IastVerticle.java +++ b/dd-smoke-tests/vertx-4.2/application/src/main/java/datadog/vertx_4_2/IastVerticle.java @@ -27,11 +27,10 @@ public void start(final Promise startPromise) { final Router router = Router.router(vertx); router.route().handler(BodyHandler.create()); Arrays.stream(IastHandler.values()) - .forEach( - handler -> { - handler.init(vertx); - router.route(handler.path).handler(handler); - }); + .forEach(handler -> { + handler.init(vertx); + router.route(handler.path).handler(handler); + }); vertx .createHttpServer(new HttpServerOptions().setHandle100ContinueAutomatically(true)) .requestHandler(router) diff --git a/dd-smoke-tests/vertx-4.2/application/src/main/java/datadog/vertx_4_2/MainVerticle.java b/dd-smoke-tests/vertx-4.2/application/src/main/java/datadog/vertx_4_2/MainVerticle.java index 391a743f08f..c511ee5063a 100644 --- a/dd-smoke-tests/vertx-4.2/application/src/main/java/datadog/vertx_4_2/MainVerticle.java +++ b/dd-smoke-tests/vertx-4.2/application/src/main/java/datadog/vertx_4_2/MainVerticle.java @@ -37,42 +37,38 @@ public void start(Promise startPromise) throws Exception { Router router = Router.router(vertx); router .route("/routes") - .handler( - ctx -> - ctx.response() - .setStatusCode(200) - .putHeader("content-type", "text/plain") - .end(randomFactorial().toString())); + .handler(ctx -> + ctx.response() + .setStatusCode(200) + .putHeader("content-type", "text/plain") + .end(randomFactorial().toString())); router .route("/api_security/sampling/:status_code") - .handler( - ctx -> - ctx.response() - .setStatusCode(Integer.parseInt(ctx.request().getParam("status_code"))) - .end("EXECUTED")); + .handler(ctx -> + ctx.response() + .setStatusCode(Integer.parseInt(ctx.request().getParam("status_code"))) + .end("EXECUTED")); router.route("/api_security/response").handler(BodyHandler.create()); router .route("/api_security/response") - .handler( - ctx -> { - ctx.response().setStatusCode(200); - ctx.json(ctx.getBodyAsJson()); - }); + .handler(ctx -> { + ctx.response().setStatusCode(200); + ctx.json(ctx.getBodyAsJson()); + }); vertx .createHttpServer(new HttpServerOptions().setHandle100ContinueAutomatically(true)) - .requestHandler( - req -> { - if (req.path().startsWith("/routes") || req.path().startsWith("/api_security")) { - router.handle(req); - } else { - req.response() - .putHeader("content-type", "text/plain") - .end(randomFactorial().toString()); - } - }) + .requestHandler(req -> { + if (req.path().startsWith("/routes") || req.path().startsWith("/api_security")) { + router.handle(req); + } else { + req.response() + .putHeader("content-type", "text/plain") + .end(randomFactorial().toString()); + } + }) .listen( Integer.getInteger("vertx.http.port", 8080), http -> { diff --git a/dd-smoke-tests/wildfly/spring-ear/war/src/main/java/com/example/hello/HelloController.java b/dd-smoke-tests/wildfly/spring-ear/war/src/main/java/com/example/hello/HelloController.java index e10f9a39982..2b0f7b5ce31 100644 --- a/dd-smoke-tests/wildfly/spring-ear/war/src/main/java/com/example/hello/HelloController.java +++ b/dd-smoke-tests/wildfly/spring-ear/war/src/main/java/com/example/hello/HelloController.java @@ -18,18 +18,17 @@ public String hello() { @RequestMapping("/enableScheduling") public CompletableFuture> enableScheduling() { TRACE_REQUEST_PENDING.set(true); - return CompletableFuture.supplyAsync( - () -> { - // Wait until the scheduled task picks up the request. - while (TRACE_REQUEST_PENDING.get()) { - try { - Thread.sleep(200); - } catch (InterruptedException e) { - Thread.currentThread().interrupt(); - break; - } - } - return ResponseEntity.ok().build(); - }); + return CompletableFuture.supplyAsync(() -> { + // Wait until the scheduled task picks up the request. + while (TRACE_REQUEST_PENDING.get()) { + try { + Thread.sleep(200); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + break; + } + } + return ResponseEntity.ok().build(); + }); } } diff --git a/dd-trace-api/src/test/java/datadog/trace/api/llmobs/LLMObsFeedbackTest.java b/dd-trace-api/src/test/java/datadog/trace/api/llmobs/LLMObsFeedbackTest.java index b55cf7abd5f..584391af510 100644 --- a/dd-trace-api/src/test/java/datadog/trace/api/llmobs/LLMObsFeedbackTest.java +++ b/dd-trace-api/src/test/java/datadog/trace/api/llmobs/LLMObsFeedbackTest.java @@ -462,11 +462,10 @@ void testNullTagsAreAccepted() { @Test void testDefaultNoOpFeedbackProcessorBehavior() { - assertDoesNotThrow( - () -> { - LLMObs.submitFeedback(validBuilder().build()); - LLMObs.submitFeedback(null); - }); + assertDoesNotThrow(() -> { + LLMObs.submitFeedback(validBuilder().build()); + LLMObs.submitFeedback(null); + }); } @Test diff --git a/dd-trace-api/src/test/java/datadog/trace/api/llmobs/LLMObsTest.java b/dd-trace-api/src/test/java/datadog/trace/api/llmobs/LLMObsTest.java index 286a5e5c071..a655472a168 100644 --- a/dd-trace-api/src/test/java/datadog/trace/api/llmobs/LLMObsTest.java +++ b/dd-trace-api/src/test/java/datadog/trace/api/llmobs/LLMObsTest.java @@ -370,14 +370,13 @@ void testSpanCreationWithNullOptionalParameters() { @Test void testDefaultNoOpEvaluationProcessorBehavior() { - assertDoesNotThrow( - () -> { - Map emptyTags = new HashMap<>(); - LLMObs.SubmitEvaluation(NoOpLLMObsSpan.INSTANCE, "label", 0.5, emptyTags); - LLMObs.SubmitEvaluation(NoOpLLMObsSpan.INSTANCE, "label", 0.5, "app", emptyTags); - LLMObs.SubmitEvaluation(NoOpLLMObsSpan.INSTANCE, "label", "value", emptyTags); - LLMObs.SubmitEvaluation(NoOpLLMObsSpan.INSTANCE, "label", "value", "app", emptyTags); - }); + assertDoesNotThrow(() -> { + Map emptyTags = new HashMap<>(); + LLMObs.SubmitEvaluation(NoOpLLMObsSpan.INSTANCE, "label", 0.5, emptyTags); + LLMObs.SubmitEvaluation(NoOpLLMObsSpan.INSTANCE, "label", 0.5, "app", emptyTags); + LLMObs.SubmitEvaluation(NoOpLLMObsSpan.INSTANCE, "label", "value", emptyTags); + LLMObs.SubmitEvaluation(NoOpLLMObsSpan.INSTANCE, "label", "value", "app", emptyTags); + }); } @Test @@ -387,13 +386,12 @@ void testEvaluationSubmissionWithVariousScoreValues() { tags.put("category", "test"); tags.put("version", "1.0"); - assertDoesNotThrow( - () -> { - LLMObs.SubmitEvaluation(span, "accuracy", 0.0, tags); - LLMObs.SubmitEvaluation(span, "precision", 1.0, tags); - LLMObs.SubmitEvaluation(span, "recall", 0.85, tags); - LLMObs.SubmitEvaluation(span, "f1_score", 0.92, "myapp", tags); - }); + assertDoesNotThrow(() -> { + LLMObs.SubmitEvaluation(span, "accuracy", 0.0, tags); + LLMObs.SubmitEvaluation(span, "precision", 1.0, tags); + LLMObs.SubmitEvaluation(span, "recall", 0.85, tags); + LLMObs.SubmitEvaluation(span, "f1_score", 0.92, "myapp", tags); + }); } @Test @@ -403,12 +401,11 @@ void testEvaluationSubmissionWithCategoricalValues() { tags.put("evaluator", "human"); tags.put("context", "production"); - assertDoesNotThrow( - () -> { - LLMObs.SubmitEvaluation(span, "quality", "excellent", tags); - LLMObs.SubmitEvaluation(span, "relevance", "poor", tags); - LLMObs.SubmitEvaluation(span, "toxicity", "safe", "content-app", tags); - }); + assertDoesNotThrow(() -> { + LLMObs.SubmitEvaluation(span, "quality", "excellent", tags); + LLMObs.SubmitEvaluation(span, "relevance", "poor", tags); + LLMObs.SubmitEvaluation(span, "toxicity", "safe", "content-app", tags); + }); } @Test @@ -416,11 +413,10 @@ void testEvaluationSubmissionWithEmptyTags() { LLMObsSpan span = NoOpLLMObsSpan.INSTANCE; Map emptyTags = new HashMap<>(); - assertDoesNotThrow( - () -> { - LLMObs.SubmitEvaluation(span, "score", 0.75, emptyTags); - LLMObs.SubmitEvaluation(span, "category", "good", emptyTags); - }); + assertDoesNotThrow(() -> { + LLMObs.SubmitEvaluation(span, "score", 0.75, emptyTags); + LLMObs.SubmitEvaluation(span, "category", "good", emptyTags); + }); } @Test diff --git a/dd-trace-core/src/jmh/java/datadog/context/ContextManagerBenchmark.java b/dd-trace-core/src/jmh/java/datadog/context/ContextManagerBenchmark.java index 0128535a9d0..82b15ce62b0 100644 --- a/dd-trace-core/src/jmh/java/datadog/context/ContextManagerBenchmark.java +++ b/dd-trace-core/src/jmh/java/datadog/context/ContextManagerBenchmark.java @@ -334,14 +334,13 @@ public void captureAndFanOutToVirtualThreads(ThreadState thread) throws Exceptio ContextContinuation cont = manager.capture(ctx).hold(); Semaphore barrier = thread.fanOutBarrier; for (int i = 0; i < FAN_OUT; i++) { - thread.virtualExecutor.execute( - () -> { - try (ContextScope resumed = cont.resume()) { - // each virtual thread sees the same captured context - } finally { - barrier.release(); - } - }); + thread.virtualExecutor.execute(() -> { + try (ContextScope resumed = cont.resume()) { + // each virtual thread sees the same captured context + } finally { + barrier.release(); + } + }); } try { if (!barrier.tryAcquire(FAN_OUT, 10, SECONDS)) { diff --git a/dd-trace-core/src/main/java/datadog/trace/common/metrics/AggregateEntry.java b/dd-trace-core/src/main/java/datadog/trace/common/metrics/AggregateEntry.java index 1214b246470..021b3bb4e25 100644 --- a/dd-trace-core/src/main/java/datadog/trace/common/metrics/AggregateEntry.java +++ b/dd-trace-core/src/main/java/datadog/trace/common/metrics/AggregateEntry.java @@ -484,8 +484,8 @@ private void populateAdditionalTags(@Nullable String[] values) { * *

Field order is cardinality-tuned: resource / service / operationName first because they * vary most across collisions, then the remaining UTF8 fields, then the peer-tag list - * comparison (slowest), then the primitives. All UTF8 fields are non-null by the EMPTY- - * sentinel invariant (see field comments above), so direct {@code a.equals(b)} is safe. + * comparison (slowest), then the primitives. All UTF8 fields are non-null by the EMPTY-sentinel + * invariant (see field comments above), so direct {@code a.equals(b)} is safe. */ boolean matches(AggregateEntry e) { return resource.equals(e.resource) diff --git a/dd-trace-core/src/main/java/datadog/trace/common/metrics/AggregateTable.java b/dd-trace-core/src/main/java/datadog/trace/common/metrics/AggregateTable.java index b120cb8b915..bacbe78650f 100644 --- a/dd-trace-core/src/main/java/datadog/trace/common/metrics/AggregateTable.java +++ b/dd-trace-core/src/main/java/datadog/trace/common/metrics/AggregateTable.java @@ -19,9 +19,9 @@ *

Not thread-safe. The aggregator thread is the sole writer of both this table and its * contained {@link AggregateEntry} state. Any cross-thread request that needs to mutate -- e.g. * {@link ClientStatsAggregator#disable()} -- must funnel onto the aggregator thread via the inbox - * (see the {@code ClearSignal} routing in {@link Aggregator}). The invariant is convention- - * enforced; nothing here checks the calling thread at runtime, so a wrong-thread call would corrupt - * bucket chains silently. + * (see the {@code ClearSignal} routing in {@link Aggregator}). The invariant is + * convention-enforced; nothing here checks the calling thread at runtime, so a wrong-thread call + * would corrupt bucket chains silently. */ final class AggregateTable { diff --git a/dd-trace-core/src/main/java/datadog/trace/core/CoreTracer.java b/dd-trace-core/src/main/java/datadog/trace/core/CoreTracer.java index 2f10cceba4b..19d86f1a510 100644 --- a/dd-trace-core/src/main/java/datadog/trace/core/CoreTracer.java +++ b/dd-trace-core/src/main/java/datadog/trace/core/CoreTracer.java @@ -841,14 +841,12 @@ private CoreTracer( final SharedCommunicationObjects sco = sharedCommunicationObjects; // asynchronously create these aggregator/export components to avoid triggering // expensive classloading during the tracer initialisation. - sharedCommunicationObjects.whenReady( - () -> - AgentTaskScheduler.get() - .execute( - () -> { - startMetricsAggregation(config, sco); - maybeStartLogsExport(config); - })); + sharedCommunicationObjects.whenReady(() -> + AgentTaskScheduler.get() + .execute(() -> { + startMetricsAggregation(config, sco); + maybeStartLogsExport(config); + })); if (dataStreamsMonitoring == null) { // Avoid DSM in bazel hermetic mode @@ -2274,7 +2272,6 @@ protected static final DDSpanContext buildSpanContext( if (serviceName == null) { final Pair serviceNameAndSource = traceConfig.getPreferredServiceNameAndSource(); - ; if (serviceNameAndSource != null && serviceNameAndSource.hasLeft()) { serviceName = serviceNameAndSource.getLeft(); serviceNameSource = serviceNameAndSource.getRight(); diff --git a/dd-trace-core/src/main/java/datadog/trace/core/MetadataConsumer.java b/dd-trace-core/src/main/java/datadog/trace/core/MetadataConsumer.java index 0166348bc0b..2c9f41ac744 100644 --- a/dd-trace-core/src/main/java/datadog/trace/core/MetadataConsumer.java +++ b/dd-trace-core/src/main/java/datadog/trace/core/MetadataConsumer.java @@ -5,7 +5,7 @@ @FunctionalInterface public interface MetadataConsumer extends Consumer { - MetadataConsumer NO_OP = (md) -> {}; + MetadataConsumer NO_OP = md -> {}; void accept(Metadata metadata); } diff --git a/dd-trace-core/src/main/java/datadog/trace/core/otlp/common/OtlpResourceAttributes.java b/dd-trace-core/src/main/java/datadog/trace/core/otlp/common/OtlpResourceAttributes.java index 9b8f5518f1d..760fcd377ac 100644 --- a/dd-trace-core/src/main/java/datadog/trace/core/otlp/common/OtlpResourceAttributes.java +++ b/dd-trace-core/src/main/java/datadog/trace/core/otlp/common/OtlpResourceAttributes.java @@ -79,13 +79,12 @@ static void visitResourceAttributes( if (globalTags instanceof TagMap) { boolean otelSemantics = config.isTraceOtelSemanticsEnabled(); ((TagMap) globalTags) - .forEach( - entry -> - visitGlobalTag( - otelSemantics ? entry.openTelemetryTag() : entry.tag(), - entry.stringValue(), - extraAttributes, - visitor)); + .forEach(entry -> + visitGlobalTag( + otelSemantics ? entry.openTelemetryTag() : entry.tag(), + entry.stringValue(), + extraAttributes, + visitor)); } else if (globalTags != null) { globalTags.forEach( (key, value) -> visitGlobalTag(key, String.valueOf(value), extraAttributes, visitor)); diff --git a/dd-trace-core/src/main/java/datadog/trace/core/otlp/trace/OtlpTraceProto.java b/dd-trace-core/src/main/java/datadog/trace/core/otlp/trace/OtlpTraceProto.java index fd1f593c4db..8fd07a7fac2 100644 --- a/dd-trace-core/src/main/java/datadog/trace/core/otlp/trace/OtlpTraceProto.java +++ b/dd-trace-core/src/main/java/datadog/trace/core/otlp/trace/OtlpTraceProto.java @@ -191,11 +191,10 @@ public static int recordSpanLinkMessage( spanLink .attributes() .asMap() - .forEach( - (key, value) -> { - writeTag(buf, 4, LEN_WIRE_TYPE); - writeAttribute(buf, STRING_ATTRIBUTE, key, value); - }); + .forEach((key, value) -> { + writeTag(buf, 4, LEN_WIRE_TYPE); + writeAttribute(buf, STRING_ATTRIBUTE, key, value); + }); writeTag(buf, 6, I32_WIRE_TYPE); writeI32(buf, spanLink.traceFlags() & 0xff); diff --git a/dd-trace-core/src/main/java/datadog/trace/core/util/StackTraces.java b/dd-trace-core/src/main/java/datadog/trace/core/util/StackTraces.java index 47299f034f6..472ff6c4c25 100644 --- a/dd-trace-core/src/main/java/datadog/trace/core/util/StackTraces.java +++ b/dd-trace-core/src/main/java/datadog/trace/core/util/StackTraces.java @@ -123,16 +123,15 @@ private static String abbreviatePackageNames(String trace) { StringBuilder sb = new StringBuilder(trace.length()); new BufferedReader(new StringReader(trace)) .lines() - .forEach( - line -> { - Matcher m = FRAME.matcher(line); - if (m.matches()) { - sb.append("\tat ").append(abbreviatePackageName(m.group(1))).append(m.group(2)); - } else { - sb.append(line); - } - sb.append(System.lineSeparator()); - }); + .forEach(line -> { + Matcher m = FRAME.matcher(line); + if (m.matches()) { + sb.append("\tat ").append(abbreviatePackageName(m.group(1))).append(m.group(2)); + } else { + sb.append(line); + } + sb.append(System.lineSeparator()); + }); return sb.toString(); } diff --git a/dd-trace-core/src/test/java/datadog/trace/common/metrics/ClientStatsAggregatorBootstrapTest.java b/dd-trace-core/src/test/java/datadog/trace/common/metrics/ClientStatsAggregatorBootstrapTest.java index 758f5db9910..775f0f28cb1 100644 --- a/dd-trace-core/src/test/java/datadog/trace/common/metrics/ClientStatsAggregatorBootstrapTest.java +++ b/dd-trace-core/src/test/java/datadog/trace/common/metrics/ClientStatsAggregatorBootstrapTest.java @@ -114,11 +114,10 @@ void reconcileSkipsDeepCompareWhenStateMatches() throws Exception { cycle1.countDown(); return null; }) - .doAnswer( - invocation -> { - cycle2.countDown(); - return null; - }) + .doAnswer(invocation -> { + cycle2.countDown(); + return null; + }) .when(writer) .finishBucket(); @@ -181,11 +180,10 @@ void reconcileSurvivesStateChangeWhenTagsUnchanged() throws Exception { cycle1.countDown(); return null; }) - .doAnswer( - invocation -> { - cycle2.countDown(); - return null; - }) + .doAnswer(invocation -> { + cycle2.countDown(); + return null; + }) .when(writer) .finishBucket(); @@ -254,11 +252,10 @@ void reconcileSwapsSchemaWhenTagSetChanges() throws Exception { cycle1.countDown(); return null; }) - .doAnswer( - invocation -> { - cycle2.countDown(); - return null; - }) + .doAnswer(invocation -> { + cycle2.countDown(); + return null; + }) .when(writer) .finishBucket(); diff --git a/dd-trace-core/src/test/java/datadog/trace/common/metrics/ClientStatsAggregatorTest.java b/dd-trace-core/src/test/java/datadog/trace/common/metrics/ClientStatsAggregatorTest.java index 7269bbbf580..6b85ef01032 100644 --- a/dd-trace-core/src/test/java/datadog/trace/common/metrics/ClientStatsAggregatorTest.java +++ b/dd-trace-core/src/test/java/datadog/trace/common/metrics/ClientStatsAggregatorTest.java @@ -886,11 +886,10 @@ void aggregateSpansWithSameHttpEndpointTogetherSeparateDifferentEndpoints() thro latch.countDown(); return null; }) - .doAnswer( - invocation -> { - latch2.countDown(); - return null; - }) + .doAnswer(invocation -> { + latch2.countDown(); + return null; + }) .when(writer) .finishBucket(); @@ -2053,14 +2052,13 @@ void forceFlushShouldWaitForAggregatorToStart() throws Exception { // call forceReport before start CompletableFuture async = - CompletableFuture.supplyAsync( - () -> { - try { - return aggregator.forceReport().get(); - } catch (Exception e) { - throw new RuntimeException(e); - } - }); + CompletableFuture.supplyAsync(() -> { + try { + return aggregator.forceReport().get(); + } catch (Exception e) { + throw new RuntimeException(e); + } + }); assertThrows(TimeoutException.class, () -> async.get(3, SECONDS)); diff --git a/dd-trace-core/src/test/java/datadog/trace/common/metrics/MetricsReliabilityTest.java b/dd-trace-core/src/test/java/datadog/trace/common/metrics/MetricsReliabilityTest.java index cb204fdb426..ea37385ee07 100644 --- a/dd-trace-core/src/test/java/datadog/trace/common/metrics/MetricsReliabilityTest.java +++ b/dd-trace-core/src/test/java/datadog/trace/common/metrics/MetricsReliabilityTest.java @@ -137,44 +137,37 @@ void metricsShouldReliablyHandleMomentaryDowngrades() throws Exception { } private static JavaTestHttpServer newAgent(State state) { - return JavaTestHttpServer.httpServer( - server -> - server.handlers( - h -> { - h.get( - "/info", - api -> { - String res = - "{\"version\":\"7.65.0\",\"endpoints\":[" - + (state.agentMetricsAvailable ? "\"/v0.6/stats\", " : "") - + "\"/v0.4/traces\"], \"client_drop_p0s\" : true}"; - try { - state.hash = Strings.sha256(res); - } catch (NoSuchAlgorithmException e) { - throw new RuntimeException(e); - } - api.getResponse().status(200).send(res); - state.latch.countDown(); - }); - h.post( - "/v0.6/stats", - api -> { - state.receivedStats = true; - api.getResponse().status(state.statsResponseCode).send(); - }); - h.put( - "/v0.4/traces", - api -> { - state.receivedClientComputedHeader = - "true" - .equals( - api.getRequest().getHeader("Datadog-Client-Computed-Stats")); - api.getResponse() - .status(200) - .addHeader("Datadog-Agent-State", state.hash) - .send(); - }); - })); + return JavaTestHttpServer.httpServer(server -> + server.handlers(h -> { + h.get( + "/info", + api -> { + String res = + "{\"version\":\"7.65.0\",\"endpoints\":[" + + (state.agentMetricsAvailable ? "\"/v0.6/stats\", " : "") + + "\"/v0.4/traces\"], \"client_drop_p0s\" : true}"; + try { + state.hash = Strings.sha256(res); + } catch (NoSuchAlgorithmException e) { + throw new RuntimeException(e); + } + api.getResponse().status(200).send(res); + state.latch.countDown(); + }); + h.post( + "/v0.6/stats", + api -> { + state.receivedStats = true; + api.getResponse().status(state.statsResponseCode).send(); + }); + h.put( + "/v0.4/traces", + api -> { + state.receivedClientComputedHeader = + "true".equals(api.getRequest().getHeader("Datadog-Client-Computed-Stats")); + api.getResponse().status(200).addHeader("Datadog-Agent-State", state.hash).send(); + }); + })); } private static void assertMetrics( diff --git a/dd-trace-core/src/test/java/datadog/trace/common/sampling/SamplerTest.java b/dd-trace-core/src/test/java/datadog/trace/common/sampling/SamplerTest.java index 3f7c9d3739c..7bf18c4084e 100644 --- a/dd-trace-core/src/test/java/datadog/trace/common/sampling/SamplerTest.java +++ b/dd-trace-core/src/test/java/datadog/trace/common/sampling/SamplerTest.java @@ -153,11 +153,10 @@ void apmTracesKeptOncePerMinuteWhenAppSecIsActivatedAtRuntime() { assertInstanceOf(ApmTracingDisabledSampler.class, sampler); // the trickle is one per minute, so only the first of the two traces is kept - withAppSecActive( - () -> - assertEquals( - asList((int) SAMPLER_KEEP, (int) SAMPLER_DROP), - samplingPrioritiesOfTraces(sampler, 2))); + withAppSecActive(() -> + assertEquals( + asList((int) SAMPLER_KEEP, (int) SAMPLER_DROP), + samplingPrioritiesOfTraces(sampler, 2))); } /** Deactivating AppSec at runtime puts the drop back. */ @@ -166,10 +165,8 @@ void apmTracesKeptOncePerMinuteWhenAppSecIsActivatedAtRuntime() { void apmTracesDroppedWhenAppSecIsDeactivatedAtRuntime() { Sampler sampler = Sampler.Builder.forConfig(Config.get(), null); - withAppSecActive( - () -> - assertEquals( - singletonList((int) SAMPLER_KEEP), samplingPrioritiesOfTraces(sampler, 1))); + withAppSecActive(() -> + assertEquals(singletonList((int) SAMPLER_KEEP), samplingPrioritiesOfTraces(sampler, 1))); assertEquals(singletonList((int) SAMPLER_DROP), samplingPrioritiesOfTraces(sampler, 1)); } diff --git a/dd-trace-core/src/test/java/datadog/trace/common/writer/DDAgentApiTest.java b/dd-trace-core/src/test/java/datadog/trace/common/writer/DDAgentApiTest.java index 66b50ff1dde..d5e493b334c 100644 --- a/dd-trace-core/src/test/java/datadog/trace/common/writer/DDAgentApiTest.java +++ b/dd-trace-core/src/test/java/datadog/trace/common/writer/DDAgentApiTest.java @@ -76,23 +76,21 @@ public class DDAgentApiTest extends DDCoreJavaSpecification { // --- Helper: create a minimal agent server responding 200 to PUT latestVersion --- static JavaTestHttpServer newAgent(String latestVersion) { - return JavaTestHttpServer.httpServer( - s -> - s.handlers( - h -> - h.put( - latestVersion, - api -> { - if (!"application/msgpack".equals(api.getRequest().getContentType())) { - api.getResponse() - .status(400) - .send("wrong type: " + api.getRequest().getContentType()); - } else if (api.getRequest().getContentLength() <= 0) { - api.getResponse().status(400).send("no content"); - } else { - api.getResponse().status(200).send(); - } - }))); + return JavaTestHttpServer.httpServer(s -> + s.handlers(h -> + h.put( + latestVersion, + api -> { + if (!"application/msgpack".equals(api.getRequest().getContentType())) { + api.getResponse() + .status(400) + .send("wrong type: " + api.getRequest().getContentType()); + } else if (api.getRequest().getContentLength() <= 0) { + api.getResponse().status(400).send("no content"); + } else { + api.getResponse().status(200).send(); + } + }))); } // --- Tests --- @@ -123,13 +121,9 @@ void testSendingAnEmptyListOfTracesReturnsNoErrors( @Test void testResponseBodyPropagatedInCaseOfNon200Response() { JavaTestHttpServer agent = - JavaTestHttpServer.httpServer( - s -> - s.handlers( - h -> - h.put( - "v0.4/traces", - api -> api.getResponse().status(400).send("Test error")))); + JavaTestHttpServer.httpServer(s -> + s.handlers(h -> + h.put("v0.4/traces", api -> api.getResponse().status(400).send("Test error")))); try { DDAgentApi client = createAgentApi(agent.getAddress().toString()).api; Payload payload = prepareTraces("v0.4/traces", emptyList()); @@ -146,13 +140,11 @@ void testResponseBodyPropagatedInCaseOfNon200Response() { @Test void testNon200Response() { JavaTestHttpServer agent = - JavaTestHttpServer.httpServer( - s -> - s.handlers( - h -> { - h.put("v0.4/traces", api -> api.getResponse().status(404).send()); - h.put("v0.3/traces", api -> api.getResponse().status(404).send()); - })); + JavaTestHttpServer.httpServer(s -> + s.handlers(h -> { + h.put("v0.4/traces", api -> api.getResponse().status(404).send()); + h.put("v0.3/traces", api -> api.getResponse().status(404).send()); + })); try { DDAgentApi client = createAgentApi(agent.getAddress().toString()).api; Payload payload = prepareTraces("v0.3/traces", emptyList()); @@ -371,16 +363,14 @@ void testApiResponseListenersSee200Responses(String agentVersion) { (endpoint, responseJson) -> agentResponse.set(responseJson); JavaTestHttpServer agent = - JavaTestHttpServer.httpServer( - s -> - s.handlers( - h -> - h.put( - agentVersion, - api -> { - int status = api.getRequest().getContentLength() > 0 ? 200 : 500; - api.getResponse().status(status).send("{\"hello\":{}}"); - }))); + JavaTestHttpServer.httpServer(s -> + s.handlers(h -> + h.put( + agentVersion, + api -> { + int status = api.getRequest().getContentLength() > 0 ? 200 : 500; + api.getResponse().status(status).send("{\"hello\":{}}"); + }))); try { DDAgentApi client = createAgentApi(agent.getAddress().toString()).api; client.addResponseListener(responseListener); @@ -415,16 +405,14 @@ void testApiResponseListenersSee200Responses(String agentVersion) { @Test void testApiDowngradesToV3IfV04NotAvailable() { JavaTestHttpServer v3Agent = - JavaTestHttpServer.httpServer( - s -> - s.handlers( - h -> - h.put( - "v0.3/traces", - api -> { - int status = api.getRequest().getContentLength() > 0 ? 200 : 500; - api.getResponse().status(status).send(); - }))); + JavaTestHttpServer.httpServer(s -> + s.handlers(h -> + h.put( + "v0.3/traces", + api -> { + int status = api.getRequest().getContentLength() > 0 ? 200 : 500; + api.getResponse().status(status).send(); + }))); try { DDAgentApi client = createAgentApi(v3Agent.getAddress().toString()).api; Payload payload = prepareTraces("v0.4/traces", emptyList()); @@ -445,30 +433,28 @@ void testApiDowngradesToV3IfV04NotAvailable() { void testApiDowngradesToV3IfTimeoutExceeded( String endpointVersion, int delayTrace, boolean badPort) { JavaTestHttpServer agent = - JavaTestHttpServer.httpServer( - s -> - s.handlers( - h -> { - h.put( - "v0.3/traces", - api -> { - int status = api.getRequest().getContentLength() > 0 ? 200 : 500; - api.getResponse().status(status).send(); - }); - h.put( - "v0.4/traces", - api -> { - if (delayTrace > 0) { - try { - Thread.sleep(delayTrace); - } catch (InterruptedException e) { - Thread.currentThread().interrupt(); - } - } - int status = api.getRequest().getContentLength() > 0 ? 200 : 500; - api.getResponse().status(status).send(); - }); - })); + JavaTestHttpServer.httpServer(s -> + s.handlers(h -> { + h.put( + "v0.3/traces", + api -> { + int status = api.getRequest().getContentLength() > 0 ? 200 : 500; + api.getResponse().status(status).send(); + }); + h.put( + "v0.4/traces", + api -> { + if (delayTrace > 0) { + try { + Thread.sleep(delayTrace); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } + } + int status = api.getRequest().getContentLength() > 0 ? 200 : 500; + api.getResponse().status(status).send(); + }); + })); try { int port = badPort ? 999 : agent.getAddress().getPort(); String url = "http://" + agent.getAddress().getHost() + ":" + port; @@ -507,16 +493,14 @@ void testVerifyContentLength(String agentVersion, long expectedLength, int trace List> traces = generateEmptyTraces(traceCount); AtomicLong receivedContentLength = new AtomicLong(); JavaTestHttpServer agent = - JavaTestHttpServer.httpServer( - s -> - s.handlers( - h -> - h.put( - agentVersion, - api -> { - receivedContentLength.set(api.getRequest().getContentLength()); - api.getResponse().status(200).send(); - }))); + JavaTestHttpServer.httpServer(s -> + s.handlers(h -> + h.put( + agentVersion, + api -> { + receivedContentLength.set(api.getRequest().getContentLength()); + api.getResponse().status(200).send(); + }))); try { DDAgentApi client = createAgentApi(agent.getAddress().toString()).api; Payload payload = prepareTraces(agentVersion, traces); @@ -587,9 +571,8 @@ void testDatadogClientComputedStatsHeaderSetWhenEitherStatsPipelineIsEnabled( OtlpConfig.OTEL_TRACES_SPAN_METRICS_ENABLED, String.valueOf(otlpSpanMetrics)); JavaTestHttpServer agent = - JavaTestHttpServer.httpServer( - s -> - s.handlers(h -> h.put("v0.4/traces", api -> api.getResponse().status(200).send()))); + JavaTestHttpServer.httpServer(s -> + s.handlers(h -> h.put("v0.4/traces", api -> api.getResponse().status(200).send()))); try { HttpUrl agentUrl = HttpUrl.get(agent.getAddress().toString()); diff --git a/dd-trace-core/src/test/java/datadog/trace/common/writer/DDAgentWriterCombinedTest.java b/dd-trace-core/src/test/java/datadog/trace/common/writer/DDAgentWriterCombinedTest.java index 8f3a8c40add..92853e9b5b2 100644 --- a/dd-trace-core/src/test/java/datadog/trace/common/writer/DDAgentWriterCombinedTest.java +++ b/dd-trace-core/src/test/java/datadog/trace/common/writer/DDAgentWriterCombinedTest.java @@ -357,10 +357,9 @@ void monitorHappyPath(String agentVersion) { // DQH -- need to set-up a dummy agent for the final send callback to work try (JavaTestHttpServer agent = - JavaTestHttpServer.httpServer( - server -> - server.handlers( - h -> h.put(agentVersion, api -> api.getResponse().status(200).send())))) { + JavaTestHttpServer.httpServer(server -> + server.handlers( + h -> h.put(agentVersion, api -> api.getResponse().status(200).send())))) { HttpUrl agentUrl = HttpUrl.get(agent.getAddress()); okhttp3.OkHttpClient client = OkHttpUtils.buildHttpClient(agentUrl, 1000); DDAgentFeaturesDiscovery discovery = @@ -390,11 +389,10 @@ void monitorHappyPath(String agentVersion) { .onSend( anyInt(), anyInt(), - argThat( - response -> - response.success() - && response.status().isPresent() - && response.status().getAsInt() == 200)); + argThat(response -> + response.success() + && response.status().isPresent() + && response.status().getAsInt() == 200)); writer.close(); @@ -414,10 +412,9 @@ void monitorAgentReturnsError(String agentVersion) { // DQH -- need to set-up a dummy agent for the final send callback to work try (JavaTestHttpServer agent = - JavaTestHttpServer.httpServer( - server -> - server.handlers( - h -> h.put(agentVersion, api -> api.getResponse().status(500).send())))) { + JavaTestHttpServer.httpServer(server -> + server.handlers( + h -> h.put(agentVersion, api -> api.getResponse().status(500).send())))) { HttpUrl agentUrl = HttpUrl.get(agent.getAddress()); okhttp3.OkHttpClient client = OkHttpUtils.buildHttpClient(agentUrl, 1000); DDAgentFeaturesDiscovery discovery = @@ -447,11 +444,10 @@ void monitorAgentReturnsError(String agentVersion) { .onFailedSend( anyInt(), anyInt(), - argThat( - response -> - !response.success() - && response.status().isPresent() - && response.status().getAsInt() == 500)); + argThat(response -> + !response.success() + && response.status().isPresent() + && response.status().getAsInt() == 500)); writer.close(); @@ -601,20 +597,18 @@ void slowResponseTest(String agentVersion) throws Exception { // Need to set-up a dummy agent for the final send callback to work JavaTestHttpServer agent = - JavaTestHttpServer.httpServer( - server -> - server.handlers( - h -> - h.put( - agentVersion, - api -> { - responseSemaphore.acquire(); - try { - api.getResponse().status(200).send(); - } finally { - responseSemaphore.release(); - } - }))); + JavaTestHttpServer.httpServer(server -> + server.handlers(h -> + h.put( + agentVersion, + api -> { + responseSemaphore.acquire(); + try { + api.getResponse().status(200).send(); + } finally { + responseSemaphore.release(); + } + }))); // This test focuses just on failed publish, so not verifying every callback HealthMetrics healthMetrics = mock(HealthMetrics.class); @@ -729,10 +723,8 @@ void multiThreaded(String agentVersion) throws Exception { // Need to set-up a dummy agent for the final send callback to work JavaTestHttpServer agent = - JavaTestHttpServer.httpServer( - server -> - server.handlers( - h -> h.put(agentVersion, api -> api.getResponse().status(200).send()))); + JavaTestHttpServer.httpServer(server -> + server.handlers(h -> h.put(agentVersion, api -> api.getResponse().status(200).send()))); // This test focuses just on failed publish, so not verifying every callback HealthMetrics healthMetrics = mock(HealthMetrics.class); @@ -819,10 +811,8 @@ void statsdSuccess(String agentVersion) { // Need to set-up a dummy agent for the final send callback to work JavaTestHttpServer agent = - JavaTestHttpServer.httpServer( - server -> - server.handlers( - h -> h.put(agentVersion, api -> api.getResponse().status(200).send()))); + JavaTestHttpServer.httpServer(server -> + server.handlers(h -> h.put(agentVersion, api -> api.getResponse().status(200).send()))); HealthMetrics healthMetrics = mock(HealthMetrics.class); doAnswer( diff --git a/dd-trace-core/src/test/java/datadog/trace/common/writer/DDIntakeWriterCombinedTest.java b/dd-trace-core/src/test/java/datadog/trace/common/writer/DDIntakeWriterCombinedTest.java index bd63f037cec..4e2a7221023 100644 --- a/dd-trace-core/src/test/java/datadog/trace/common/writer/DDIntakeWriterCombinedTest.java +++ b/dd-trace-core/src/test/java/datadog/trace/common/writer/DDIntakeWriterCombinedTest.java @@ -330,9 +330,8 @@ void monitorHappyPath() { String path = buildIntakePath(trackType, apiVersion); JavaTestHttpServer intake = - JavaTestHttpServer.httpServer( - server -> - server.handlers(h -> h.post(path, api -> api.getResponse().status(200).send()))); + JavaTestHttpServer.httpServer(server -> + server.handlers(h -> h.post(path, api -> api.getResponse().status(200).send()))); try { HttpUrl hostUrl = HttpUrl.get(intake.getAddress()); OkHttpClient httpClient = OkHttpUtils.buildHttpClient(hostUrl, 1000); @@ -367,11 +366,10 @@ void monitorHappyPath() { .onSend( anyInt(), anyInt(), - argThat( - response -> - response.success() - && response.status().isPresent() - && response.status().getAsInt() == 200)); + argThat(response -> + response.success() + && response.status().isPresent() + && response.status().getAsInt() == 200)); writer.close(); @@ -390,9 +388,8 @@ void monitorIntakeReturnsError() { String path = buildIntakePath(trackType, apiVersion); JavaTestHttpServer intake = - JavaTestHttpServer.httpServer( - server -> - server.handlers(h -> h.post(path, api -> api.getResponse().status(500).send()))); + JavaTestHttpServer.httpServer(server -> + server.handlers(h -> h.post(path, api -> api.getResponse().status(500).send()))); try { HttpUrl hostUrl = HttpUrl.get(intake.getAddress()); okhttp3.OkHttpClient httpClient = OkHttpUtils.buildHttpClient(hostUrl, 1000); @@ -427,11 +424,10 @@ void monitorIntakeReturnsError() { .onFailedSend( anyInt(), anyInt(), - argThat( - response -> - !response.success() - && response.status().isPresent() - && response.status().getAsInt() == 500)); + argThat(response -> + !response.success() + && response.status().isPresent() + && response.status().getAsInt() == 500)); writer.close(); @@ -498,20 +494,18 @@ void slowResponseTest() throws Exception { String path = buildIntakePath(trackType, apiVersion); JavaTestHttpServer intake = - JavaTestHttpServer.httpServer( - server -> - server.handlers( - h -> - h.post( - path, - api -> { - responseSemaphore.acquire(); - try { - api.getResponse().status(200).send(); - } finally { - responseSemaphore.release(); - } - }))); + JavaTestHttpServer.httpServer(server -> + server.handlers(h -> + h.post( + path, + api -> { + responseSemaphore.acquire(); + try { + api.getResponse().status(200).send(); + } finally { + responseSemaphore.release(); + } + }))); // This test focuses just on failed publish, so not verifying every callback HealthMetrics healthMetrics = mock(HealthMetrics.class); @@ -629,9 +623,8 @@ void multiThreaded() throws Exception { String path = buildIntakePath(trackType, apiVersion); JavaTestHttpServer intake = - JavaTestHttpServer.httpServer( - server -> - server.handlers(h -> h.post(path, api -> api.getResponse().status(200).send()))); + JavaTestHttpServer.httpServer(server -> + server.handlers(h -> h.post(path, api -> api.getResponse().status(200).send()))); // This test focuses just on failed publish, so not verifying every callback HealthMetrics healthMetrics = mock(HealthMetrics.class); @@ -724,9 +717,8 @@ void statsdSuccess() { String path = buildIntakePath(trackType, apiVersion); JavaTestHttpServer intake = - JavaTestHttpServer.httpServer( - server -> - server.handlers(h -> h.post(path, api -> api.getResponse().status(200).send()))); + JavaTestHttpServer.httpServer(server -> + server.handlers(h -> h.post(path, api -> api.getResponse().status(200).send()))); HealthMetrics healthMetrics = mock(HealthMetrics.class); doAnswer( diff --git a/dd-trace-core/src/test/java/datadog/trace/common/writer/OtlpWriterTest.java b/dd-trace-core/src/test/java/datadog/trace/common/writer/OtlpWriterTest.java index df86d4384e3..fcf3fc631f6 100644 --- a/dd-trace-core/src/test/java/datadog/trace/common/writer/OtlpWriterTest.java +++ b/dd-trace-core/src/test/java/datadog/trace/common/writer/OtlpWriterTest.java @@ -56,12 +56,11 @@ void buildWithDefaultsDoesNotThrow() { // Exercises the default-path sender construction (real OtlpHttpSender) without // actually sending anything — start/close only. Guards against a default config // that would otherwise fail at construction time. - assertDoesNotThrow( - () -> { - OtlpWriter writer = OtlpWriter.builder().build(); - writer.start(); - writer.close(); - }); + assertDoesNotThrow(() -> { + OtlpWriter writer = OtlpWriter.builder().build(); + writer.start(); + writer.close(); + }); } @Test diff --git a/dd-trace-core/src/test/java/datadog/trace/common/writer/PayloadDispatcherImplTest.java b/dd-trace-core/src/test/java/datadog/trace/common/writer/PayloadDispatcherImplTest.java index 67360144ad1..4df18fd54aa 100644 --- a/dd-trace-core/src/test/java/datadog/trace/common/writer/PayloadDispatcherImplTest.java +++ b/dd-trace-core/src/test/java/datadog/trace/common/writer/PayloadDispatcherImplTest.java @@ -58,11 +58,10 @@ void testFlushAutomaticallyWhenDataLimitIsBreached(String traceEndpoint) throws when(discovery.getTraceEndpoint()).thenReturn(traceEndpoint); DDAgentApi api = mock(DDAgentApi.class); when(api.sendSerializedTraces(any())) - .thenAnswer( - inv -> { - flushed.set(true); - return RemoteApi.Response.success(200); - }); + .thenAnswer(inv -> { + flushed.set(true); + return RemoteApi.Response.success(200); + }); PayloadDispatcherImpl dispatcher = new PayloadDispatcherImpl( new DDAgentMapperDiscovery(discovery), api, healthMetrics, monitoring); diff --git a/dd-trace-core/src/test/java/datadog/trace/common/writer/WriterFactoryTest.java b/dd-trace-core/src/test/java/datadog/trace/common/writer/WriterFactoryTest.java index 9a7c8bdc946..18899be310e 100644 --- a/dd-trace-core/src/test/java/datadog/trace/common/writer/WriterFactoryTest.java +++ b/dd-trace-core/src/test/java/datadog/trace/common/writer/WriterFactoryTest.java @@ -99,12 +99,11 @@ void testWriterCreationForCiVisibility( Call mockCall = mock(Call.class); OkHttpClient mockHttpClient = mock(OkHttpClient.class); when(mockCall.execute()) - .thenAnswer( - inv -> { - // Add a delay - Thread.sleep(400); - return response; - }); + .thenAnswer(inv -> { + // Add a delay + Thread.sleep(400); + return response; + }); when(mockHttpClient.newCall(any(Request.class))).thenReturn(mockCall); // Create SharedCommunicationObjects with mocked HTTP client @@ -180,12 +179,11 @@ void testWriterCreationForLlmObservability( Call mockCall = mock(Call.class); OkHttpClient mockHttpClient = mock(OkHttpClient.class); when(mockCall.execute()) - .thenAnswer( - inv -> { - // Add a delay - Thread.sleep(400); - return response; - }); + .thenAnswer(inv -> { + // Add a delay + Thread.sleep(400); + return response; + }); when(mockHttpClient.newCall(any(Request.class))).thenReturn(mockCall); // Create SharedCommunicationObjects with mocked HTTP client @@ -201,16 +199,15 @@ void testWriterCreationForLlmObservability( List> llmObsApiClasses = ((RemoteWriter) writer) .getApis().stream() - .filter( - api -> { - try { - Field trackTypeField = api.getClass().getDeclaredField("trackType"); - trackTypeField.setAccessible(true); - return trackTypeField.get(api) == TrackType.LLMOBS; - } catch (Exception e) { - return false; - } - }) + .filter(api -> { + try { + Field trackTypeField = api.getClass().getDeclaredField("trackType"); + trackTypeField.setAccessible(true); + return trackTypeField.get(api) == TrackType.LLMOBS; + } catch (Exception e) { + return false; + } + }) .map(Object::getClass) .collect(Collectors.toList()); @@ -308,13 +305,9 @@ void skipsResponseListenerRegistrationWhenNoAgentSampler() throws Exception { } private static JavaTestHttpServer tracesAgent() { - return JavaTestHttpServer.httpServer( - s -> - s.handlers( - h -> - h.put( - "v0.4/traces", - api -> api.getResponse().status(200).send("{\"hello\":{}}")))); + return JavaTestHttpServer.httpServer(s -> + s.handlers(h -> + h.put("v0.4/traces", api -> api.getResponse().status(200).send("{\"hello\":{}}")))); } private static Writer createDDAgentWriter(JavaTestHttpServer agent, Sampler sampler) diff --git a/dd-trace-core/src/test/java/datadog/trace/common/writer/ddintake/DDEvpProxyApiTest.java b/dd-trace-core/src/test/java/datadog/trace/common/writer/ddintake/DDEvpProxyApiTest.java index c3464d47d36..96fef675a81 100644 --- a/dd-trace-core/src/test/java/datadog/trace/common/writer/ddintake/DDEvpProxyApiTest.java +++ b/dd-trace-core/src/test/java/datadog/trace/common/writer/ddintake/DDEvpProxyApiTest.java @@ -71,22 +71,19 @@ void testSendingAnEmptyListOfTracesReturnsNoErrors() { String evpProxyEndpoint = V2_EVP_PROXY_ENDPOINT; String path = buildAgentEvpProxyPath(evpProxyEndpoint, trackType, apiVersion); JavaTestHttpServer agentEvpProxy = - JavaTestHttpServer.httpServer( - s -> - s.handlers( - h -> - h.post( - path, - api -> { - if (!"application/msgpack" - .equals(api.getRequest().getContentType())) { - api.getResponse() - .status(400) - .send("wrong type: " + api.getRequest().getContentType()); - } else { - api.getResponse().status(200).send(); - } - }))); + JavaTestHttpServer.httpServer(s -> + s.handlers(h -> + h.post( + path, + api -> { + if (!"application/msgpack".equals(api.getRequest().getContentType())) { + api.getResponse() + .status(400) + .send("wrong type: " + api.getRequest().getContentType()); + } else { + api.getResponse().status(200).send(); + } + }))); DDEvpProxyApi client = createEvpProxyApi( agentEvpProxy.getAddress().toString(), evpProxyEndpoint, trackType, false); @@ -113,20 +110,18 @@ void testRetriesWhenBackendReturns5xx() { String path = buildAgentEvpProxyPath(evpProxyEndpoint, trackType, apiVersion); int[] retry = {1}; JavaTestHttpServer agentEvpProxy = - JavaTestHttpServer.httpServer( - s -> - s.handlers( - h -> - h.post( - path, - api -> { - if (retry[0] < 5) { - api.getResponse().status(503).send(); - retry[0]++; - } else { - api.getResponse().status(200).send(); - } - }))); + JavaTestHttpServer.httpServer(s -> + s.handlers(h -> + h.post( + path, + api -> { + if (retry[0] < 5) { + api.getResponse().status(503).send(); + retry[0]++; + } else { + api.getResponse().status(200).send(); + } + }))); DDEvpProxyApi client = createEvpProxyApi( agentEvpProxy.getAddress().toString(), evpProxyEndpoint, trackType, false); diff --git a/dd-trace-core/src/test/java/datadog/trace/common/writer/ddintake/DDIntakeApiTest.java b/dd-trace-core/src/test/java/datadog/trace/common/writer/ddintake/DDIntakeApiTest.java index c00f322d9da..56043ab3b4a 100644 --- a/dd-trace-core/src/test/java/datadog/trace/common/writer/ddintake/DDIntakeApiTest.java +++ b/dd-trace-core/src/test/java/datadog/trace/common/writer/ddintake/DDIntakeApiTest.java @@ -66,22 +66,19 @@ void testSendingAnEmptyListOfTracesReturnsNoErrors() { String apiVersion = "v2"; String path = buildIntakePath(trackType, apiVersion); JavaTestHttpServer intake = - JavaTestHttpServer.httpServer( - s -> - s.handlers( - h -> - h.post( - path, - api -> { - if (!"application/msgpack" - .equals(api.getRequest().getContentType())) { - api.getResponse() - .status(400) - .send("wrong type: " + api.getRequest().getContentType()); - } else { - api.getResponse().status(200).send(); - } - }))); + JavaTestHttpServer.httpServer(s -> + s.handlers(h -> + h.post( + path, + api -> { + if (!"application/msgpack".equals(api.getRequest().getContentType())) { + api.getResponse() + .status(400) + .send("wrong type: " + api.getRequest().getContentType()); + } else { + api.getResponse().status(200).send(); + } + }))); DDIntakeApi client = createIntakeApi(intake.getAddress().toString(), trackType); Payload payload = prepareTraces(trackType, Collections.emptyList()); @@ -103,20 +100,18 @@ void testRetriesWhenBackendReturns5xx() { String path = buildIntakePath(trackType, apiVersion); int[] retry = {1}; JavaTestHttpServer intake = - JavaTestHttpServer.httpServer( - s -> - s.handlers( - h -> - h.post( - path, - api -> { - if (retry[0] < 5) { - api.getResponse().status(503).send(); - retry[0]++; - } else { - api.getResponse().status(200).send(); - } - }))); + JavaTestHttpServer.httpServer(s -> + s.handlers(h -> + h.post( + path, + api -> { + if (retry[0] < 5) { + api.getResponse().status(503).send(); + retry[0]++; + } else { + api.getResponse().status(200).send(); + } + }))); DDIntakeApi client = createIntakeApi(intake.getAddress().toString(), trackType); Payload payload = prepareTraces(trackType, Collections.emptyList()); @@ -138,23 +133,18 @@ void testRetriesWhenBackendReturns429TooManyRequests() { String path = buildIntakePath(trackType, apiVersion); int[] retry = {0}; try (JavaTestHttpServer intake = - JavaTestHttpServer.httpServer( - s -> - s.handlers( - h -> - h.post( - path, - api -> { - if (retry[0] < 1) { - api.getResponse() - .status(429) - .addHeader("x-ratelimit-reset", "0") - .send(); - retry[0]++; - } else { - api.getResponse().status(200).send(); - } - })))) { + JavaTestHttpServer.httpServer(s -> + s.handlers(h -> + h.post( + path, + api -> { + if (retry[0] < 1) { + api.getResponse().status(429).addHeader("x-ratelimit-reset", "0").send(); + retry[0]++; + } else { + api.getResponse().status(200).send(); + } + })))) { DDIntakeApi client = createIntakeApi(intake.getAddress().toString(), trackType); Payload payload = prepareTraces(trackType, Collections.emptyList()); diff --git a/dd-trace-core/src/test/java/datadog/trace/core/CoreTracerTest2.java b/dd-trace-core/src/test/java/datadog/trace/core/CoreTracerTest2.java index 7e6ddaf8d71..49ddaf69bd4 100644 --- a/dd-trace-core/src/test/java/datadog/trace/core/CoreTracerTest2.java +++ b/dd-trace-core/src/test/java/datadog/trace/core/CoreTracerTest2.java @@ -198,7 +198,7 @@ public void interceptNoInterceptors() { @Test public void interceptEmptyList() { DDSpan span = (DDSpan) TRACER.startSpan("foo", "foo"); - TraceInterceptors interceptors = interceptors((list) -> SpanList.of(span)); + TraceInterceptors interceptors = interceptors(list -> SpanList.of(span)); SpanList list = new SpanList(0); // not using EMPTY deliberately List interceptedList = CoreTracer.interceptCompleteTrace(interceptors, list); @@ -207,7 +207,7 @@ public void interceptEmptyList() { @Test public void interceptUnchanged() { - TraceInterceptors interceptors = interceptors((list) -> list, (list) -> list); + TraceInterceptors interceptors = interceptors(list -> list, list -> list); DDSpan span = (DDSpan) TRACER.startSpan("foo", "foo"); SpanList list = SpanList.of(span); @@ -219,7 +219,7 @@ public void interceptUnchanged() { public void interceptNewList() { DDSpan substituteSpan = (DDSpan) TRACER.startSpan("sub", "sub"); SpanList substituteList = SpanList.of(substituteSpan); - TraceInterceptors interceptors = interceptors((list) -> list, (list) -> substituteList); + TraceInterceptors interceptors = interceptors(list -> list, list -> substituteList); DDSpan span = (DDSpan) TRACER.startSpan("foo", "foo"); SpanList list = SpanList.of(span); @@ -235,8 +235,8 @@ public void interceptAlteredList() { DDSpan substituteSpan = (DDSpan) TRACER.startSpan("sub", "sub"); TraceInterceptors interceptors = interceptors( - (list) -> list, - (list) -> { + list -> list, + list -> { List erasedList = (List) list; erasedList.clear(); erasedList.add(substituteSpan); diff --git a/dd-trace-core/src/test/java/datadog/trace/core/OtelSamplingDecisionTest.java b/dd-trace-core/src/test/java/datadog/trace/core/OtelSamplingDecisionTest.java index 84662abd620..48ff09411a0 100644 --- a/dd-trace-core/src/test/java/datadog/trace/core/OtelSamplingDecisionTest.java +++ b/dd-trace-core/src/test/java/datadog/trace/core/OtelSamplingDecisionTest.java @@ -37,43 +37,40 @@ class OtelSamplingDecisionTest extends DDCoreJavaSpecification { @Test void initialAgentRateEstablishesDefaultProbabilityState() { RateByServiceTraceSampler sampler = new RateByServiceTraceSampler(); - withRootSpan( - span -> { - sampler.setSamplingPriority(span); - - String header = w3cHeader(span); - assertTrue(header.contains(OTEL_RANDOM_VALUE_PREFIX)); - assertTrue(header.contains(";th:0")); - }); + withRootSpan(span -> { + sampler.setSamplingPriority(span); + + String header = w3cHeader(span); + assertTrue(header.contains(OTEL_RANDOM_VALUE_PREFIX)); + assertTrue(header.contains(";th:0")); + }); } @Test void loadedAgentRateEstablishesProbabilityState() { RateByServiceTraceSampler sampler = new RateByServiceTraceSampler(); sampler.onResponse(AGENT_RATE_ENDPOINT, agentRates(HALF_RATE)); - withRootSpan( - span -> { - sampler.setSamplingPriority(span); - - String header = w3cHeader(span); - assertTrue(header.contains(OTEL_RANDOM_VALUE_PREFIX)); - assertTrue(header.contains(HALF_THRESHOLD)); - }); + withRootSpan(span -> { + sampler.setSamplingPriority(span); + + String header = w3cHeader(span); + assertTrue(header.contains(OTEL_RANDOM_VALUE_PREFIX)); + assertTrue(header.contains(HALF_THRESHOLD)); + }); } @Test void zeroAgentRateUsesDropConsistentMaximumThreshold() { RateByServiceTraceSampler sampler = new RateByServiceTraceSampler(); sampler.onResponse(AGENT_RATE_ENDPOINT, agentRates(0)); - withRootSpan( - span -> { - sampler.setSamplingPriority(span); - - String header = w3cHeader(span); - assertTrue(header.contains(OTEL_RANDOM_VALUE_PREFIX)); - assertFalse(header.contains("ot=rv:ffffffffffffff")); - assertTrue(header.contains(MAX_THRESHOLD)); - }); + withRootSpan(span -> { + sampler.setSamplingPriority(span); + + String header = w3cHeader(span); + assertTrue(header.contains(OTEL_RANDOM_VALUE_PREFIX)); + assertFalse(header.contains("ot=rv:ffffffffffffff")); + assertTrue(header.contains(MAX_THRESHOLD)); + }); } @ParameterizedTest @@ -85,14 +82,13 @@ void configuredRulesEstablishProbabilityState(boolean traceRule) { traceRule ? HALF_RATE_RULE : String.valueOf(HALF_RATE)); properties.setProperty(TRACE_RATE_LIMIT, "10000000"); PrioritySampler sampler = (PrioritySampler) Sampler.Builder.forConfig(properties); - withRootSpan( - span -> { - sampler.setSamplingPriority(span); - - String header = w3cHeader(span); - assertTrue(header.contains(OTEL_RANDOM_VALUE_PREFIX)); - assertTrue(header.contains(HALF_THRESHOLD)); - }); + withRootSpan(span -> { + sampler.setSamplingPriority(span); + + String header = w3cHeader(span); + assertTrue(header.contains(OTEL_RANDOM_VALUE_PREFIX)); + assertTrue(header.contains(HALF_THRESHOLD)); + }); } @Test @@ -119,15 +115,14 @@ void limiterRejectionDoesNotFabricateProbabilityState() { @Test void manualOverrideRemovesLocallyGeneratedProbabilityState() { - withRootSpan( - span -> { - span.setSamplingPriority(USER_KEEP, SAMPLING_RULE_RATE, HALF_RATE, LOCAL_USER_RULE); - assertTrue(w3cHeader(span).contains(OTEL_RANDOM_VALUE_PREFIX)); + withRootSpan(span -> { + span.setSamplingPriority(USER_KEEP, SAMPLING_RULE_RATE, HALF_RATE, LOCAL_USER_RULE); + assertTrue(w3cHeader(span).contains(OTEL_RANDOM_VALUE_PREFIX)); - span.spanContext().forceKeep(); + span.spanContext().forceKeep(); - assertFalse(w3cHeader(span).contains(OTEL_MEMBER)); - }); + assertFalse(w3cHeader(span).contains(OTEL_MEMBER)); + }); } private void withRootSpan(java.util.function.Consumer test) { diff --git a/dd-trace-core/src/test/java/datadog/trace/core/PendingTraceBufferTest.java b/dd-trace-core/src/test/java/datadog/trace/core/PendingTraceBufferTest.java index e72e5fa3a7c..63ee19a2d97 100644 --- a/dd-trace-core/src/test/java/datadog/trace/core/PendingTraceBufferTest.java +++ b/dd-trace-core/src/test/java/datadog/trace/core/PendingTraceBufferTest.java @@ -301,11 +301,10 @@ void lateArrivalSpanRequeuesPendingTrace() throws InterruptedException { parentLatch.countDown(); return null; }) - .doAnswer( - invocation -> { - childLatch.countDown(); - return null; - }) + .doAnswer(invocation -> { + childLatch.countDown(); + return null; + }) .when(tracer) .write(any()); diff --git a/dd-trace-core/src/test/java/datadog/trace/core/PendingTraceTestBase.java b/dd-trace-core/src/test/java/datadog/trace/core/PendingTraceTestBase.java index aa986faa0e4..72d18ab856c 100644 --- a/dd-trace-core/src/test/java/datadog/trace/core/PendingTraceTestBase.java +++ b/dd-trace-core/src/test/java/datadog/trace/core/PendingTraceTestBase.java @@ -246,22 +246,20 @@ void partialFlushConcurrencyTest(int threadCount, int spanCount) List threads = new ArrayList<>(threadCount); for (int t = 0; t < threadCount; t++) { Thread thread = - new Thread( - () -> { - try { - latch.await(); - List spans = new ArrayList<>(spanCount); - for (int s = 0; s < spanCount; s++) { - spans.add( - (DDSpan) tracer.startSpan("test", "child", localRoot.spanContext())); - } - for (DDSpan span : spans) { - span.finish(); - } - } catch (Throwable ex) { - exceptions.add(ex); - } - }); + new Thread(() -> { + try { + latch.await(); + List spans = new ArrayList<>(spanCount); + for (int s = 0; s < spanCount; s++) { + spans.add((DDSpan) tracer.startSpan("test", "child", localRoot.spanContext())); + } + for (DDSpan span : spans) { + span.finish(); + } + } catch (Throwable ex) { + exceptions.add(ex); + } + }); thread.start(); threads.add(thread); } diff --git a/dd-trace-core/src/test/java/datadog/trace/core/TagStoreTest.java b/dd-trace-core/src/test/java/datadog/trace/core/TagStoreTest.java index fd6e413f4e8..b3524ae1631 100644 --- a/dd-trace-core/src/test/java/datadog/trace/core/TagStoreTest.java +++ b/dd-trace-core/src/test/java/datadog/trace/core/TagStoreTest.java @@ -31,47 +31,43 @@ void cleanup() { @Test void storedByIdLoadsByName() { - forEachTagStore( - tags -> { - tags.store(HTTP_ROUTE_ID, "/users/{id}"); + forEachTagStore(tags -> { + tags.store(HTTP_ROUTE_ID, "/users/{id}"); - assertEquals("/users/{id}", tags.load(HTTP_ROUTE)); - assertEquals("/users/{id}", tags.load(HTTP_ROUTE_ID)); - }); + assertEquals("/users/{id}", tags.load(HTTP_ROUTE)); + assertEquals("/users/{id}", tags.load(HTTP_ROUTE_ID)); + }); } @Test void storedByNameLoadsById() { - forEachTagStore( - tags -> { - tags.store(HTTP_ROUTE, "/users/{id}"); + forEachTagStore(tags -> { + tags.store(HTTP_ROUTE, "/users/{id}"); - assertEquals("/users/{id}", tags.load(HTTP_ROUTE_ID)); - }); + assertEquals("/users/{id}", tags.load(HTTP_ROUTE_ID)); + }); } @Test void loadStringByIdConverts() { - forEachTagStore( - tags -> { - tags.store(HTTP_STATUS_CODE_ID, 404); + forEachTagStore(tags -> { + tags.store(HTTP_STATUS_CODE_ID, 404); - assertEquals("404", tags.loadString(HTTP_STATUS_CODE_ID)); - assertEquals("404", tags.loadString(HTTP_STATUS)); - }); + assertEquals("404", tags.loadString(HTTP_STATUS_CODE_ID)); + assertEquals("404", tags.loadString(HTTP_STATUS)); + }); } @Test void nullStoredByIdRemoves() { - forEachTagStore( - tags -> { - tags.store(HTTP_ROUTE, "/users/{id}"); + forEachTagStore(tags -> { + tags.store(HTTP_ROUTE, "/users/{id}"); - tags.store(HTTP_ROUTE_ID, null); + tags.store(HTTP_ROUTE_ID, null); - assertNull(tags.load(HTTP_ROUTE)); - assertNull(tags.loadString(HTTP_ROUTE_ID)); - }); + assertNull(tags.load(HTTP_ROUTE)); + assertNull(tags.loadString(HTTP_ROUTE_ID)); + }); } private void forEachTagStore(Consumer check) { diff --git a/dd-trace-core/src/test/java/datadog/trace/core/datastreams/DataStreamsWritingTest.java b/dd-trace-core/src/test/java/datadog/trace/core/datastreams/DataStreamsWritingTest.java index 9b989a69ef3..76c3db05a0a 100644 --- a/dd-trace-core/src/test/java/datadog/trace/core/datastreams/DataStreamsWritingTest.java +++ b/dd-trace-core/src/test/java/datadog/trace/core/datastreams/DataStreamsWritingTest.java @@ -61,16 +61,14 @@ static void startServer() { defaultBucketDurationNanos = Config.get().getDataStreamsBucketDurationNanoseconds(); requestBodies = new CopyOnWriteArrayList<>(); server = - JavaTestHttpServer.httpServer( - s -> - s.handlers( - h -> - h.post( - DDAgentFeaturesDiscovery.V01_DATASTREAMS_ENDPOINT, - api -> { - requestBodies.add(api.getRequest().getBody()); - api.getResponse().status(200).send(); - }))); + JavaTestHttpServer.httpServer(s -> + s.handlers(h -> + h.post( + DDAgentFeaturesDiscovery.V01_DATASTREAMS_ENDPOINT, + api -> { + requestBodies.add(api.getRequest().getBody()); + api.getResponse().status(200).send(); + }))); serverAddress = HttpUrl.get(server.getAddress()); } diff --git a/dd-trace-core/src/test/java/datadog/trace/core/otlp/metrics/OtlpMetricsJsonCollectorTest.java b/dd-trace-core/src/test/java/datadog/trace/core/otlp/metrics/OtlpMetricsJsonCollectorTest.java index a3cbf6a0637..9f4c8ba4d4f 100644 --- a/dd-trace-core/src/test/java/datadog/trace/core/otlp/metrics/OtlpMetricsJsonCollectorTest.java +++ b/dd-trace-core/src/test/java/datadog/trace/core/otlp/metrics/OtlpMetricsJsonCollectorTest.java @@ -51,12 +51,11 @@ void metricWithNoDataPointsContributesNothing() throws IOException { new OtelInstrumentDescriptor("unused", COUNTER, true, null, null); OtlpPayload payload = - collect( - visitor -> { - OtlpScopedMetricsVisitor scoped = - visitor.visitScopedMetrics(new OtelInstrumentationScope("io.test", null, null)); - scoped.visitMetric(descriptor); // never visited with an attribute or data point - }); + collect(visitor -> { + OtlpScopedMetricsVisitor scoped = + visitor.visitScopedMetrics(new OtelInstrumentationScope("io.test", null, null)); + scoped.visitMetric(descriptor); // never visited with an attribute or data point + }); assertEquals(OtlpPayload.EMPTY, payload); } @@ -67,19 +66,18 @@ void scopeWithNoDataPointsContributesNothingWhenAnotherScopeHasData() throws IOE new OtelInstrumentDescriptor("unused", COUNTER, true, null, null); OtlpPayload payload = - collect( - visitor -> { - OtlpScopedMetricsVisitor emptyScope = - visitor.visitScopedMetrics(new OtelInstrumentationScope("io.empty", null, null)); - emptyScope.visitMetric(emptyDescriptor); // never visited with a data point - - OtlpScopedMetricsVisitor dataScope = - visitor.visitScopedMetrics(new OtelInstrumentationScope("io.data", null, null)); - OtlpMetricVisitor mv = - dataScope.visitMetric( - new OtelInstrumentDescriptor("requests", COUNTER, true, null, null)); - mv.visitDataPoint(new OtlpLongPoint(1L)); - }); + collect(visitor -> { + OtlpScopedMetricsVisitor emptyScope = + visitor.visitScopedMetrics(new OtelInstrumentationScope("io.empty", null, null)); + emptyScope.visitMetric(emptyDescriptor); // never visited with a data point + + OtlpScopedMetricsVisitor dataScope = + visitor.visitScopedMetrics(new OtelInstrumentationScope("io.data", null, null)); + OtlpMetricVisitor mv = + dataScope.visitMetric( + new OtelInstrumentDescriptor("requests", COUNTER, true, null, null)); + mv.visitDataPoint(new OtlpLongPoint(1L)); + }); List scopeMetrics = onlyScopeMetrics(payload); assertEquals(1, scopeMetrics.size(), "the empty scope must not appear in the payload"); @@ -93,16 +91,14 @@ void scopeWithNoDataPointsContributesNothingWhenAnotherScopeHasData() throws IOE void gaugeHasNoStartTimeOrTemporality() throws IOException { Map metric = onlyMetric( - collect( - visitor -> { - OtlpScopedMetricsVisitor scoped = - visitor.visitScopedMetrics( - new OtelInstrumentationScope("io.gauge", null, null)); - OtlpMetricVisitor mv = - scoped.visitMetric( - new OtelInstrumentDescriptor("connections", GAUGE, false, null, null)); - mv.visitDataPoint(new OtlpDoublePoint(5.0)); - })); + collect(visitor -> { + OtlpScopedMetricsVisitor scoped = + visitor.visitScopedMetrics(new OtelInstrumentationScope("io.gauge", null, null)); + OtlpMetricVisitor mv = + scoped.visitMetric( + new OtelInstrumentDescriptor("connections", GAUGE, false, null, null)); + mv.visitDataPoint(new OtlpDoublePoint(5.0)); + })); assertEquals("connections", metric.get("name")); Map gauge = (Map) metric.get("gauge"); @@ -118,17 +114,15 @@ void gaugeHasNoStartTimeOrTemporality() throws IOException { void counterIsMonotonicSumWithIntegerTemporalityAndDecimalStringValue() throws IOException { Map metric = onlyMetric( - collect( - visitor -> { - OtlpScopedMetricsVisitor scoped = - visitor.visitScopedMetrics( - new OtelInstrumentationScope("io.test", null, null)); - OtlpMetricVisitor mv = - scoped.visitMetric( - new OtelInstrumentDescriptor("requests", COUNTER, true, null, null)); - mv.visitAttribute(STRING_ATTRIBUTE, "method", "GET"); - mv.visitDataPoint(new OtlpLongPoint(42L)); - })); + collect(visitor -> { + OtlpScopedMetricsVisitor scoped = + visitor.visitScopedMetrics(new OtelInstrumentationScope("io.test", null, null)); + OtlpMetricVisitor mv = + scoped.visitMetric( + new OtelInstrumentDescriptor("requests", COUNTER, true, null, null)); + mv.visitAttribute(STRING_ATTRIBUTE, "method", "GET"); + mv.visitDataPoint(new OtlpLongPoint(42L)); + })); Map sum = (Map) metric.get("sum"); assertTrue(((Number) sum.get("aggregationTemporality")).intValue() >= 1); @@ -149,24 +143,21 @@ void counterIsMonotonicSumWithIntegerTemporalityAndDecimalStringValue() throws I void histogramWithOverflowBoundaryOmitsInfinityAndAppendsNoExtraZero() throws IOException { Map metric = onlyMetric( - collect( - visitor -> { - OtlpScopedMetricsVisitor scoped = - visitor.visitScopedMetrics( - new OtelInstrumentationScope("io.hist", null, null)); - OtlpMetricVisitor mv = - scoped.visitMetric( - new OtelInstrumentDescriptor( - "request.size", HISTOGRAM, false, null, null)); - mv.visitDataPoint( - new OtlpHistogramPoint( - 5.0, - Arrays.asList(100.0, Double.POSITIVE_INFINITY), - Arrays.asList(4.0, 1.0), - 280.0, - 20.0, - 200.0)); - })); + collect(visitor -> { + OtlpScopedMetricsVisitor scoped = + visitor.visitScopedMetrics(new OtelInstrumentationScope("io.hist", null, null)); + OtlpMetricVisitor mv = + scoped.visitMetric( + new OtelInstrumentDescriptor("request.size", HISTOGRAM, false, null, null)); + mv.visitDataPoint( + new OtlpHistogramPoint( + 5.0, + Arrays.asList(100.0, Double.POSITIVE_INFINITY), + Arrays.asList(4.0, 1.0), + 280.0, + 20.0, + 200.0)); + })); Map histogram = (Map) metric.get("histogram"); List dataPoints = (List) histogram.get("dataPoints"); @@ -188,23 +179,16 @@ void histogramWithOverflowBoundaryOmitsInfinityAndAppendsNoExtraZero() throws IO void histogramWithoutOverflowBoundaryAppendsExtraZeroCount() throws IOException { Map metric = onlyMetric( - collect( - visitor -> { - OtlpScopedMetricsVisitor scoped = - visitor.visitScopedMetrics( - new OtelInstrumentationScope("io.hist", null, null)); - OtlpMetricVisitor mv = - scoped.visitMetric( - new OtelInstrumentDescriptor("queue.size", HISTOGRAM, false, null, null)); - mv.visitDataPoint( - new OtlpHistogramPoint( - 8.0, - Arrays.asList(50.0, 100.0), - Arrays.asList(3.0, 5.0), - 750.0, - 10.0, - 95.0)); - })); + collect(visitor -> { + OtlpScopedMetricsVisitor scoped = + visitor.visitScopedMetrics(new OtelInstrumentationScope("io.hist", null, null)); + OtlpMetricVisitor mv = + scoped.visitMetric( + new OtelInstrumentDescriptor("queue.size", HISTOGRAM, false, null, null)); + mv.visitDataPoint( + new OtlpHistogramPoint( + 8.0, Arrays.asList(50.0, 100.0), Arrays.asList(3.0, 5.0), 750.0, 10.0, 95.0)); + })); Map histogram = (Map) metric.get("histogram"); Map point = diff --git a/dd-trace-core/src/test/java/datadog/trace/core/otlp/metrics/OtlpMetricsProtoTest.java b/dd-trace-core/src/test/java/datadog/trace/core/otlp/metrics/OtlpMetricsProtoTest.java index 8cc2ac4ea81..9fbcabae6ea 100644 --- a/dd-trace-core/src/test/java/datadog/trace/core/otlp/metrics/OtlpMetricsProtoTest.java +++ b/dd-trace-core/src/test/java/datadog/trace/core/otlp/metrics/OtlpMetricsProtoTest.java @@ -542,19 +542,18 @@ void testCollectMetrics(String caseName, List expectedScopes) throws OtlpMetricsProtoCollector collector = new OtlpMetricsProtoCollector(timeSource); timeSource.set(END_EPOCH_NS); // captured during collection OtlpPayload payload = - collector.collectMetrics( - visitor -> { - for (ScopeSpec scope : expectedScopes) { - OtlpScopedMetricsVisitor sv = visitor.visitScopedMetrics(scope.toScope()); - for (MetricSpec metric : scope.metrics) { - OtlpMetricVisitor mv = sv.visitMetric(metric.toDescriptor()); - for (AttrSpec attr : metric.attrs) { - mv.visitAttribute(attr.type, attr.key, attr.value); - } - mv.visitDataPoint(metric.point); - } + collector.collectMetrics(visitor -> { + for (ScopeSpec scope : expectedScopes) { + OtlpScopedMetricsVisitor sv = visitor.visitScopedMetrics(scope.toScope()); + for (MetricSpec metric : scope.metrics) { + OtlpMetricVisitor mv = sv.visitMetric(metric.toDescriptor()); + for (AttrSpec attr : metric.attrs) { + mv.visitAttribute(attr.type, attr.key, attr.value); } - }); + mv.visitDataPoint(metric.point); + } + } + }); // Scopes with no metrics produce no wire output — filter them for verification List nonEmptyScopes = new ArrayList<>(); diff --git a/dd-trace-core/src/test/java/datadog/trace/core/otlp/metrics/OtlpMetricsServiceTest.java b/dd-trace-core/src/test/java/datadog/trace/core/otlp/metrics/OtlpMetricsServiceTest.java index 0120634b6e0..462609dbfa2 100644 --- a/dd-trace-core/src/test/java/datadog/trace/core/otlp/metrics/OtlpMetricsServiceTest.java +++ b/dd-trace-core/src/test/java/datadog/trace/core/otlp/metrics/OtlpMetricsServiceTest.java @@ -145,15 +145,14 @@ void concurrentFlushesAreSerialized() throws Exception { CountDownLatch firstEntered = new CountDownLatch(1); CountDownLatch release = new CountDownLatch(1); when(test.collector.collectMetrics()) - .thenAnswer( - ignored -> { - int count = active.incrementAndGet(); - maximum.accumulateAndGet(count, Math::max); - firstEntered.countDown(); - assertTrue(release.await(5, SECONDS)); - active.decrementAndGet(); - return PAYLOAD; - }); + .thenAnswer(ignored -> { + int count = active.incrementAndGet(); + maximum.accumulateAndGet(count, Math::max); + firstEntered.countDown(); + assertTrue(release.await(5, SECONDS)); + active.decrementAndGet(); + return PAYLOAD; + }); when(test.sender.send(PAYLOAD)).thenReturn(success(200)); test.service.flush(); @@ -255,12 +254,11 @@ void exportThenShutdownWaitsForInflightFlush() throws Exception { private TestService blockingService() { TestService test = service(PAYLOAD); when(test.sender.send(PAYLOAD)) - .thenAnswer( - ignored -> { - test.sendEntered.countDown(); - assertTrue(test.releaseSend.await(5, SECONDS)); - return success(200); - }); + .thenAnswer(ignored -> { + test.sendEntered.countDown(); + assertTrue(test.releaseSend.await(5, SECONDS)); + return success(200); + }); return test; } diff --git a/dd-trace-core/src/test/java/datadog/trace/core/otlp/trace/OtlpTraceProtoTest.java b/dd-trace-core/src/test/java/datadog/trace/core/otlp/trace/OtlpTraceProtoTest.java index e3fd159c0ef..69d9b0e8443 100644 --- a/dd-trace-core/src/test/java/datadog/trace/core/otlp/trace/OtlpTraceProtoTest.java +++ b/dd-trace-core/src/test/java/datadog/trace/core/otlp/trace/OtlpTraceProtoTest.java @@ -477,15 +477,14 @@ static Stream cases() { @SuppressWarnings("unchecked") static Stream casesWithOtelSemantics() { return cases() - .flatMap( - args -> { - Object[] raw = args.get(); - String caseName = (String) raw[0]; - List specs = (List) raw[1]; - return Stream.of( - Arguments.of(caseName + " [otel semantics enabled]", specs, true), - Arguments.of(caseName + " [otel semantics disabled]", specs, false)); - }); + .flatMap(args -> { + Object[] raw = args.get(); + String caseName = (String) raw[0]; + List specs = (List) raw[1]; + return Stream.of( + Arguments.of(caseName + " [otel semantics enabled]", specs, true), + Arguments.of(caseName + " [otel semantics disabled]", specs, false)); + }); } // ── parameterized test ──────────────────────────────────────────────────── @@ -1270,13 +1269,12 @@ private static List buildSpans(List specs) { agentSpan.setHttpStatusCode(spec.httpStatusCode); } - spec.extraTags.forEach( - (key, value) -> { - if (value instanceof String) agentSpan.setTag(key, (String) value); - else if (value instanceof Long) agentSpan.setTag(key, (long) (Long) value); - else if (value instanceof Boolean) agentSpan.setTag(key, (boolean) (Boolean) value); - else if (value instanceof Double) agentSpan.setTag(key, (double) (Double) value); - }); + spec.extraTags.forEach((key, value) -> { + if (value instanceof String) agentSpan.setTag(key, (String) value); + else if (value instanceof Long) agentSpan.setTag(key, (long) (Long) value); + else if (value instanceof Boolean) agentSpan.setTag(key, (boolean) (Boolean) value); + else if (value instanceof Double) agentSpan.setTag(key, (double) (Double) value); + }); for (LinkSpec link : spec.links) { agentSpan.addLink( diff --git a/dd-trace-core/src/test/java/datadog/trace/core/propagation/ConsumedHeaderTagMappingTest.java b/dd-trace-core/src/test/java/datadog/trace/core/propagation/ConsumedHeaderTagMappingTest.java index ccaa756be71..9ec52ee2d73 100644 --- a/dd-trace-core/src/test/java/datadog/trace/core/propagation/ConsumedHeaderTagMappingTest.java +++ b/dd-trace-core/src/test/java/datadog/trace/core/propagation/ConsumedHeaderTagMappingTest.java @@ -149,12 +149,11 @@ void honoursHeaderTagsMappedOntoConsumedHeaders(Style style) { assertNotNull(context); // The header tag mapped onto each consumed header must be honoured (APMS-20654). - consumed.forEach( - (header, value) -> - assertEquals( - value, - context.getTags().getString(tagFor(header)), - "header tag mapped onto '" + header + "' should be honoured")); + consumed.forEach((header, value) -> + assertEquals( + value, + context.getTags().getString(tagFor(header)), + "header tag mapped onto '" + header + "' should be honoured")); // The semantic capture of each header must be preserved. assertEquals("test-agent", context.getUserAgent()); diff --git a/dd-trace-core/src/test/java/datadog/trace/core/propagation/W3CHttpInjectorTest.java b/dd-trace-core/src/test/java/datadog/trace/core/propagation/W3CHttpInjectorTest.java index c5439e2eeb4..635d5b2a745 100644 --- a/dd-trace-core/src/test/java/datadog/trace/core/propagation/W3CHttpInjectorTest.java +++ b/dd-trace-core/src/test/java/datadog/trace/core/propagation/W3CHttpInjectorTest.java @@ -145,19 +145,18 @@ void injectUsesSingleSamplingStateAcrossHeaders() throws InterruptedException { CountDownLatch samplingUpdated = new CountDownLatch(1); AtomicReference failure = new AtomicReference<>(); Thread updater = - new Thread( - () -> { - try { - assertTrue(traceparentWritten.await(5, TimeUnit.SECONDS)); - assertTrue( - tags.tryUpdateProbabilitySamplingDecision( - SAMPLER_DROP, AGENT_RATE, 0.0, false, 1L, true)); - } catch (Throwable throwable) { - failure.set(throwable); - } finally { - samplingUpdated.countDown(); - } - }); + new Thread(() -> { + try { + assertTrue(traceparentWritten.await(5, TimeUnit.SECONDS)); + assertTrue( + tags.tryUpdateProbabilitySamplingDecision( + SAMPLER_DROP, AGENT_RATE, 0.0, false, 1L, true)); + } catch (Throwable throwable) { + failure.set(throwable); + } finally { + samplingUpdated.countDown(); + } + }); updater.start(); injector.inject( diff --git a/dd-trace-core/src/test/java/datadog/trace/core/propagation/ptags/KnuthSamplingRateCacheTest.java b/dd-trace-core/src/test/java/datadog/trace/core/propagation/ptags/KnuthSamplingRateCacheTest.java index c150e574648..9735cf408cb 100644 --- a/dd-trace-core/src/test/java/datadog/trace/core/propagation/ptags/KnuthSamplingRateCacheTest.java +++ b/dd-trace-core/src/test/java/datadog/trace/core/propagation/ptags/KnuthSamplingRateCacheTest.java @@ -41,18 +41,17 @@ void concurrentDecisionsWithDifferentRatesDontMix() throws InterruptedException for (int t = 0; t < THREADS; ++t) { int offset = t; threads[t] = - new Thread( - () -> { - awaitQuietly(start); - for (int i = 0; i < DECISIONS_PER_THREAD && mismatch.get() == null; ++i) { - double rate = RATES[(i + offset) % RATES.length]; - String expected = PTagsFactory.PTags.formatKnuthSamplingRate(rate); - String actual = knuthSamplingRate(rate); - if (!expected.equals(actual)) { - mismatch.compareAndSet(null, "rate " + rate + " got _dd.p.ksr=" + actual); - } - } - }); + new Thread(() -> { + awaitQuietly(start); + for (int i = 0; i < DECISIONS_PER_THREAD && mismatch.get() == null; ++i) { + double rate = RATES[(i + offset) % RATES.length]; + String expected = PTagsFactory.PTags.formatKnuthSamplingRate(rate); + String actual = knuthSamplingRate(rate); + if (!expected.equals(actual)) { + mismatch.compareAndSet(null, "rate " + rate + " got _dd.p.ksr=" + actual); + } + } + }); threads[t].start(); } start.countDown(); diff --git a/dd-trace-core/src/test/java/datadog/trace/core/propagation/ptags/ProbabilitySamplingStateTest.java b/dd-trace-core/src/test/java/datadog/trace/core/propagation/ptags/ProbabilitySamplingStateTest.java index b5e0e81f381..2cdfc03e09f 100644 --- a/dd-trace-core/src/test/java/datadog/trace/core/propagation/ptags/ProbabilitySamplingStateTest.java +++ b/dd-trace-core/src/test/java/datadog/trace/core/propagation/ptags/ProbabilitySamplingStateTest.java @@ -72,16 +72,15 @@ void racingReadsReturnOneInstance() throws InterruptedException { for (int i = 0; i < readers; i++) { int reader = i; threads[i] = - new Thread( - () -> { - try { - start.await(); - } catch (InterruptedException e) { - Thread.currentThread().interrupt(); - return; - } - seen[reader] = state.getOtelTraceState(); - }); + new Thread(() -> { + try { + start.await(); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + return; + } + seen[reader] = state.getOtelTraceState(); + }); threads[i].start(); } start.countDown(); diff --git a/dd-trace-core/src/test/java/datadog/trace/core/scopemanager/ScopeManagerForkedTest.java b/dd-trace-core/src/test/java/datadog/trace/core/scopemanager/ScopeManagerForkedTest.java index 4a1eda54ac2..a6e833a215e 100644 --- a/dd-trace-core/src/test/java/datadog/trace/core/scopemanager/ScopeManagerForkedTest.java +++ b/dd-trace-core/src/test/java/datadog/trace/core/scopemanager/ScopeManagerForkedTest.java @@ -885,19 +885,18 @@ void contextThreadListenerNotifiedWhenScopeActivatedOnThreadForTheFirstTime() th for (int i = 0; i < numTasks; i++) { final int taskIndex = i; futures[i] = - executor.submit( - () -> { - ContextScope scope = tracer.activateSpan(span); - AgentSpan child = tracer.buildSpan("test", "foo" + taskIndex).start(); - ContextScope childScope = tracer.activateSpan(child); - try { - Thread.sleep(100); - } catch (InterruptedException ignored) { - Thread.currentThread().interrupt(); - } - childScope.close(); - scope.close(); - }); + executor.submit(() -> { + ContextScope scope = tracer.activateSpan(span); + AgentSpan child = tracer.buildSpan("test", "foo" + taskIndex).start(); + ContextScope childScope = tracer.activateSpan(child); + try { + Thread.sleep(100); + } catch (InterruptedException ignored) { + Thread.currentThread().interrupt(); + } + childScope.close(); + scope.close(); + }); } for (Future future : futures) { future.get(); @@ -1162,13 +1161,12 @@ void continuationReleaseIsSameAsCancel() throws Exception { void captureContextWithoutSpanUsesNoopTraceCollector() { ContextKey key = ContextKey.named("test-key"); Context ctx = Context.root().with(key, "value"); - assertDoesNotThrow( - () -> { - // NoopAgentTraceCollector handles capture/release without throwing - try (ContextScope scope = ctx.attach()) { - Context.current().capture().release(); - } - }); + assertDoesNotThrow(() -> { + // NoopAgentTraceCollector handles capture/release without throwing + try (ContextScope scope = ctx.attach()) { + Context.current().capture().release(); + } + }); } private boolean spanFinished(AgentSpan span) { diff --git a/dd-trace-core/src/test/java/datadog/trace/lambda/LambdaAppSecHandlerTest.java b/dd-trace-core/src/test/java/datadog/trace/lambda/LambdaAppSecHandlerTest.java index cce4e9e237c..a461c371d3e 100644 --- a/dd-trace-core/src/test/java/datadog/trace/lambda/LambdaAppSecHandlerTest.java +++ b/dd-trace-core/src/test/java/datadog/trace/lambda/LambdaAppSecHandlerTest.java @@ -339,17 +339,15 @@ void extractsApiGatewayV1RestDataCorrectly() { setupMockCallbacks( new Callbacks() - .onMethodUri( - (method, uri) -> { - capturedMethod[0] = method; - capturedPath[0] = uri.path(); - }) + .onMethodUri((method, uri) -> { + capturedMethod[0] = method; + capturedPath[0] = uri.path(); + }) .onHeader(capturedHeaders::put) - .onSocketAddress( - (ip, port) -> { - capturedSourceIp[0] = ip; - capturedSourcePort[0] = port; - }) + .onSocketAddress((ip, port) -> { + capturedSourceIp[0] = ip; + capturedSourcePort[0] = port; + }) .onPathParams(params -> capturedPathParams[0] = params) .onBody(body -> capturedBody[0] = body)); @@ -396,17 +394,15 @@ void extractsApiGatewayV2HttpDataCorrectly() { setupMockCallbacks( new Callbacks() - .onMethodUri( - (method, uri) -> { - capturedMethod[0] = method; - capturedPath[0] = uri.path(); - }) + .onMethodUri((method, uri) -> { + capturedMethod[0] = method; + capturedPath[0] = uri.path(); + }) .onHeader(capturedHeaders::put) - .onSocketAddress( - (ip, port) -> { - capturedSourceIp[0] = ip; - capturedSourcePort[0] = port; - }) + .onSocketAddress((ip, port) -> { + capturedSourceIp[0] = ip; + capturedSourcePort[0] = port; + }) .onPathParams(params -> capturedPathParams[0] = params)); AgentSpanContext result = LambdaAppSecHandler.processRequestStart(event); @@ -441,11 +437,10 @@ void extractsLambdaFunctionUrlDataCorrectly() { setupMockCallbacks( new Callbacks() - .onMethodUri( - (method, uri) -> { - capturedMethod[0] = method; - capturedPath[0] = uri.path(); - })); + .onMethodUri((method, uri) -> { + capturedMethod[0] = method; + capturedPath[0] = uri.path(); + })); AgentSpanContext result = LambdaAppSecHandler.processRequestStart(event); @@ -473,11 +468,10 @@ void extractsAlbDataCorrectly() { setupMockCallbacks( new Callbacks() - .onMethodUri( - (method, uri) -> { - capturedMethod[0] = method; - capturedPath[0] = uri.path(); - }) + .onMethodUri((method, uri) -> { + capturedMethod[0] = method; + capturedPath[0] = uri.path(); + }) .onSocketAddress((ip, port) -> capturedSourceIp[0] = ip)); AgentSpanContext result = LambdaAppSecHandler.processRequestStart(event); @@ -723,10 +717,9 @@ void albMultiValueQueryParamsHandlesListValues() { setupMockCallbacks( new Callbacks() - .onMethodUri( - (method, uri) -> { - capturedQuery[0] = uri.query(); - })); + .onMethodUri((method, uri) -> { + capturedQuery[0] = uri.query(); + })); AgentSpanContext result = LambdaAppSecHandler.processRequestStart(event); @@ -786,10 +779,9 @@ void albMultiValueQueryParamsHandlesNonListValue() { setupMockCallbacks( new Callbacks() - .onMethodUri( - (method, uri) -> { - capturedQuery[0] = uri.query(); - })); + .onMethodUri((method, uri) -> { + capturedQuery[0] = uri.query(); + })); AgentSpanContext result = LambdaAppSecHandler.processRequestStart(event); @@ -838,11 +830,10 @@ void extractsWebSocketDataCorrectly() { setupMockCallbacks( new Callbacks() - .onMethodUri( - (method, uri) -> { - capturedMethod[0] = method; - capturedPath[0] = uri.path(); - }) + .onMethodUri((method, uri) -> { + capturedMethod[0] = method; + capturedPath[0] = uri.path(); + }) .onSocketAddress((ip, port) -> capturedSourceIp[0] = ip)); AgentSpanContext result = LambdaAppSecHandler.processRequestStart(event); @@ -1001,11 +992,10 @@ void handlesPathWithQueryStringCorrectly() { setupMockCallbacks( new Callbacks() - .onMethodUri( - (method, uri) -> { - capturedPath[0] = uri.path(); - capturedQuery[0] = uri.query(); - })); + .onMethodUri((method, uri) -> { + capturedPath[0] = uri.path(); + capturedQuery[0] = uri.query(); + })); AgentSpanContext result = LambdaAppSecHandler.processRequestStart(event); @@ -1033,15 +1023,14 @@ void extractsQueryStringParametersAndBuildsFullUri() { setupMockCallbacks( new Callbacks() - .onMethodUri( - (method, uri) -> { - capturedPath[0] = uri.path(); - capturedQuery[0] = uri.query(); - capturedRawPath[0] = uri.rawPath(); - capturedRawQuery[0] = uri.rawQuery(); - capturedHost[0] = uri.host(); - capturedFragment[0] = uri.fragment(); - })); + .onMethodUri((method, uri) -> { + capturedPath[0] = uri.path(); + capturedQuery[0] = uri.query(); + capturedRawPath[0] = uri.rawPath(); + capturedRawQuery[0] = uri.rawQuery(); + capturedHost[0] = uri.host(); + capturedFragment[0] = uri.fragment(); + })); AgentSpanContext result = LambdaAppSecHandler.processRequestStart(event); @@ -1070,10 +1059,9 @@ void extractQueryParametersFiltersNullEntries() { setupMockCallbacks( new Callbacks() - .onMethodUri( - (method, uri) -> { - capturedQuery[0] = uri.query(); - })); + .onMethodUri((method, uri) -> { + capturedQuery[0] = uri.query(); + })); AgentSpanContext result = LambdaAppSecHandler.processRequestStart(event); @@ -1099,10 +1087,9 @@ void buildFullPathEncodesSpecialCharactersInQueryParams() { setupMockCallbacks( new Callbacks() - .onMethodUri( - (method, uri) -> { - capturedQuery[0] = uri.query(); - })); + .onMethodUri((method, uri) -> { + capturedQuery[0] = uri.query(); + })); AgentSpanContext result = LambdaAppSecHandler.processRequestStart(event); @@ -1134,11 +1121,10 @@ void handlesInvalidXForwardedPortGracefully() { setupMockCallbacks( new Callbacks() - .onMethodUri( - (method, uri) -> { - capturedScheme[0] = uri.scheme(); - capturedPort[0] = uri.port(); - })); + .onMethodUri((method, uri) -> { + capturedScheme[0] = uri.scheme(); + capturedPort[0] = uri.port(); + })); AgentSpanContext result = LambdaAppSecHandler.processRequestStart(event); @@ -1231,11 +1217,10 @@ void extractsDataFromLambdaUrlWithHttpInRequestContext() { setupMockCallbacks( new Callbacks() - .onMethodUri( - (method, uri) -> { - capturedMethod[0] = method; - capturedPath[0] = uri.path(); - }) + .onMethodUri((method, uri) -> { + capturedMethod[0] = method; + capturedPath[0] = uri.path(); + }) .onSocketAddress((ip, port) -> capturedSourceIp[0] = ip)); AgentSpanContext result = LambdaAppSecHandler.processRequestStart(event); @@ -1257,11 +1242,10 @@ void extractsHttpMethodFromRequestContextOfApiGatewayV1Payload() { setupMockCallbacks( new Callbacks() - .onMethodUri( - (method, uri) -> { - capturedMethod[0] = method; - capturedPath[0] = uri.path(); - })); + .onMethodUri((method, uri) -> { + capturedMethod[0] = method; + capturedPath[0] = uri.path(); + })); AgentSpanContext result = LambdaAppSecHandler.processRequestStart(event); @@ -3046,13 +3030,12 @@ private void setupMockCallbacks(Callbacks callbacks) { Function> headerDoneCallback = mock(Function.class); when(headerDoneCallback.apply(any())) - .thenAnswer( - inv -> { - if (callbacks.onHeadersDone != null) { - callbacks.onHeadersDone.run(); - } - return Flow.ResultFlow.empty(); - }); + .thenAnswer(inv -> { + if (callbacks.onHeadersDone != null) { + callbacks.onHeadersDone.run(); + } + return Flow.ResultFlow.empty(); + }); BiFunction, Flow> pathParamsCallback = null; if (callbacks.onPathParams != null) { diff --git a/dd-trace-core/src/test/java/datadog/trace/lambda/LambdaHandlerTest.java b/dd-trace-core/src/test/java/datadog/trace/lambda/LambdaHandlerTest.java index 6eeefd1d19a..31a291eb286 100644 --- a/dd-trace-core/src/test/java/datadog/trace/lambda/LambdaHandlerTest.java +++ b/dd-trace-core/src/test/java/datadog/trace/lambda/LambdaHandlerTest.java @@ -48,18 +48,16 @@ void testStartInvocationSuccess() { CoreTracer ct = tracerBuilder().build(); JavaTestHttpServer server = - JavaTestHttpServer.httpServer( - s -> - s.handlers( - h -> - h.post( - "/lambda/start-invocation", - api -> - api.getResponse() - .status(200) - .addHeader("x-datadog-trace-id", "1234") - .addHeader("x-datadog-sampling-priority", "2") - .send()))); + JavaTestHttpServer.httpServer(s -> + s.handlers(h -> + h.post( + "/lambda/start-invocation", + api -> + api.getResponse() + .status(200) + .addHeader("x-datadog-trace-id", "1234") + .addHeader("x-datadog-sampling-priority", "2") + .send()))); LambdaHandler.setExtensionBaseUrl(server.getAddress().toString()); AgentSpanContext objTest = @@ -79,19 +77,17 @@ void testStartInvocationWith128BitTraceId() { CoreTracer ct = tracerBuilder().build(); JavaTestHttpServer server = - JavaTestHttpServer.httpServer( - s -> - s.handlers( - h -> - h.post( - "/lambda/start-invocation", - api -> - api.getResponse() - .status(200) - .addHeader("x-datadog-trace-id", "5744042798732701615") - .addHeader("x-datadog-sampling-priority", "2") - .addHeader("x-datadog-tags", "_dd.p.tid=1914fe7789eb32be") - .send()))); + JavaTestHttpServer.httpServer(s -> + s.handlers(h -> + h.post( + "/lambda/start-invocation", + api -> + api.getResponse() + .status(200) + .addHeader("x-datadog-trace-id", "5744042798732701615") + .addHeader("x-datadog-sampling-priority", "2") + .addHeader("x-datadog-tags", "_dd.p.tid=1914fe7789eb32be") + .send()))); LambdaHandler.setExtensionBaseUrl(server.getAddress().toString()); AgentSpanContext objTest = @@ -111,13 +107,9 @@ void testStartInvocationFailure() { CoreTracer ct = tracerBuilder().build(); JavaTestHttpServer server = - JavaTestHttpServer.httpServer( - s -> - s.handlers( - h -> - h.post( - "/lambda/start-invocation", - api -> api.getResponse().status(500).send()))); + JavaTestHttpServer.httpServer(s -> + s.handlers(h -> + h.post("/lambda/start-invocation", api -> api.getResponse().status(500).send()))); LambdaHandler.setExtensionBaseUrl(server.getAddress().toString()); AgentSpanContext objTest = @@ -147,13 +139,9 @@ void testEndInvocationSuccess( boolean boolValue, String lambdaReqIdHeaderValue) { JavaTestHttpServer server = - JavaTestHttpServer.httpServer( - s -> - s.handlers( - h -> - h.post( - "/lambda/end-invocation", - api -> api.getResponse().status(200).send()))); + JavaTestHttpServer.httpServer(s -> + s.handlers(h -> + h.post("/lambda/end-invocation", api -> api.getResponse().status(200).send()))); LambdaHandler.setExtensionBaseUrl(server.getAddress().toString()); DDSpan span = mock(DDSpan.class); @@ -188,13 +176,9 @@ void testEndInvocationFailure( boolean boolValue, String lambdaReqIdHeaderValue) { JavaTestHttpServer server = - JavaTestHttpServer.httpServer( - s -> - s.handlers( - h -> - h.post( - "/lambda/end-invocation", - api -> api.getResponse().status(500).send()))); + JavaTestHttpServer.httpServer(s -> + s.handlers(h -> + h.post("/lambda/end-invocation", api -> api.getResponse().status(500).send()))); LambdaHandler.setExtensionBaseUrl(server.getAddress().toString()); DDSpan span = mock(DDSpan.class); @@ -216,13 +200,9 @@ void testEndInvocationFailure( @Test void testEndInvocationSuccessWithErrorMetadata() { JavaTestHttpServer server = - JavaTestHttpServer.httpServer( - s -> - s.handlers( - h -> - h.post( - "/lambda/end-invocation", - api -> api.getResponse().status(200).send()))); + JavaTestHttpServer.httpServer(s -> + s.handlers(h -> + h.post("/lambda/end-invocation", api -> api.getResponse().status(200).send()))); LambdaHandler.setExtensionBaseUrl(server.getAddress().toString()); DDSpan span = mock(DDSpan.class); diff --git a/dd-trace-core/src/test/java/datadog/trace/llmobs/writer/ddintake/LLMObsSpanMapperTest.java b/dd-trace-core/src/test/java/datadog/trace/llmobs/writer/ddintake/LLMObsSpanMapperTest.java index e523ff9ac5a..5162d042218 100644 --- a/dd-trace-core/src/test/java/datadog/trace/llmobs/writer/ddintake/LLMObsSpanMapperTest.java +++ b/dd-trace-core/src/test/java/datadog/trace/llmobs/writer/ddintake/LLMObsSpanMapperTest.java @@ -456,15 +456,14 @@ void testLLMObsSpanMapperOmitsTopLevelSessionIdWhenNotSet() throws Exception { @Test void testLLMObsSpanProcessorModifiesInputAndOutput() throws Exception { - LLMObs.registerProcessor( - span -> { - assertEquals(Tags.LLMOBS_LLM_SPAN_KIND, span.getKind()); - assertEquals("true", span.getTag("redact")); - assertEquals("secret input", span.getInput().get(0).getContent()); - span.setInput(Collections.singletonList(LLMObs.LLMMessage.from("user", "[REDACTED]"))); - span.setOutput(Collections.emptyList()); - return span; - }); + LLMObs.registerProcessor(span -> { + assertEquals(Tags.LLMOBS_LLM_SPAN_KIND, span.getKind()); + assertEquals("true", span.getTag("redact")); + assertEquals("secret input", span.getInput().get(0).getContent()); + span.setInput(Collections.singletonList(LLMObs.LLMMessage.from("user", "[REDACTED]"))); + span.setOutput(Collections.emptyList()); + return span; + }); try { CoreTracer tracer = tracerBuilder().writer(new ListWriter()).build(); @@ -502,13 +501,12 @@ void testLLMObsSpanProcessorModifiesInputAndOutput() throws Exception { @Test void testLLMObsSpanProcessorAddsMissingInputAndOutput() throws Exception { - LLMObs.registerProcessor( - span -> { - span.setInput(Collections.singletonList(LLMObs.LLMMessage.from("user", "added input"))); - span.setOutput( - Collections.singletonList(LLMObs.LLMMessage.from("assistant", "added output"))); - return span; - }); + LLMObs.registerProcessor(span -> { + span.setInput(Collections.singletonList(LLMObs.LLMMessage.from("user", "added input"))); + span.setOutput( + Collections.singletonList(LLMObs.LLMMessage.from("assistant", "added output"))); + return span; + }); try { CoreTracer tracer = tracerBuilder().writer(new ListWriter()).build(); @@ -532,12 +530,10 @@ void testLLMObsSpanProcessorAddsMissingInputAndOutput() throws Exception { @Test void testLLMObsSpanProcessorModifiesRetrievalOutputDocuments() throws Exception { - LLMObs.registerProcessor( - span -> { - span.setOutput( - Collections.singletonList(LLMObs.LLMMessage.from("", "processed document"))); - return span; - }); + LLMObs.registerProcessor(span -> { + span.setOutput(Collections.singletonList(LLMObs.LLMMessage.from("", "processed document"))); + return span; + }); try { CoreTracer tracer = tracerBuilder().writer(new ListWriter()).build(); @@ -740,13 +736,12 @@ void testLLMObsSpanProcessorCanDropSpan() throws Exception { @Test void testLLMObsSpanProcessorExceptionDropsSpan() throws Exception { - LLMObs.registerProcessor( - span -> { - if ("true".equals(span.getTag("drop"))) { - throw new IllegalStateException("processor failure"); - } - return span; - }); + LLMObs.registerProcessor(span -> { + if ("true".equals(span.getTag("drop"))) { + throw new IllegalStateException("processor failure"); + } + return span; + }); try { CoreTracer tracer = tracerBuilder().writer(new ListWriter()).build(); @@ -766,13 +761,12 @@ void testLLMObsSpanProcessorExceptionDropsSpan() throws Exception { @Test void testLLMObsSpanProcessorErrorDropsSpan() throws Exception { - LLMObs.registerProcessor( - span -> { - if ("true".equals(span.getTag("drop"))) { - throw new AssertionError("processor failure"); - } - return span; - }); + LLMObs.registerProcessor(span -> { + if ("true".equals(span.getTag("drop"))) { + throw new AssertionError("processor failure"); + } + return span; + }); try { CoreTracer tracer = tracerBuilder().writer(new ListWriter()).build(); @@ -799,11 +793,10 @@ void testLLMObsSpanProcessorErrorDropsSpan() throws Exception { void testChunkedBufferOverflowKeepsPayloadsValidAndRunsProcessorOnce() throws Exception { AtomicInteger calls = new AtomicInteger(); LLMObsMetricCollector.get().drain(); - LLMObs.registerProcessor( - span -> { - calls.incrementAndGet(); - return "true".equals(span.getTag("drop")) ? null : span; - }); + LLMObs.registerProcessor(span -> { + calls.incrementAndGet(); + return "true".equals(span.getTag("drop")) ? null : span; + }); try { CoreTracer tracer = tracerBuilder().writer(new ListWriter()).build(); @@ -860,11 +853,10 @@ void testChunkedBufferOverflowKeepsPayloadsValidAndRunsProcessorOnce() throws Ex void testLLMObsSpanProcessorRunsOnceWhenSerializationRetries() { AtomicInteger calls = new AtomicInteger(); LLMObsMetricCollector.get().drain(); - LLMObs.registerProcessor( - span -> { - calls.incrementAndGet(); - return "true".equals(span.getTag("drop")) ? null : span; - }); + LLMObs.registerProcessor(span -> { + calls.incrementAndGet(); + return "true".equals(span.getTag("drop")) ? null : span; + }); try { CoreTracer tracer = tracerBuilder().writer(new ListWriter()).build(); @@ -893,9 +885,8 @@ void testLLMObsSpanProcessorRunsOnceWhenSerializationRetries() { assertEquals( 3, LLMObsMetricCollector.get().drain().stream() - .filter( - metric -> - LLMObsMetricCollector.USER_PROCESSOR_CALLED_METRIC.equals(metric.metricName)) + .filter(metric -> + LLMObsMetricCollector.USER_PROCESSOR_CALLED_METRIC.equals(metric.metricName)) .count()); tracer.close(); } finally { diff --git a/internal-api/src/jmh/java/datadog/trace/util/AtomicsBenchmark.java b/internal-api/src/jmh/java/datadog/trace/util/AtomicsBenchmark.java index b1a7f0d26c1..94ea3b09e18 100644 --- a/internal-api/src/jmh/java/datadog/trace/util/AtomicsBenchmark.java +++ b/internal-api/src/jmh/java/datadog/trace/util/AtomicsBenchmark.java @@ -102,24 +102,22 @@ int incrementAndGet() { } static final AtomicHolder[] atomicHolders = - init( - () -> { - AtomicHolder[] holders = new AtomicHolder[SIZE]; - for (int i = 0; i < holders.length; ++i) { - holders[i] = new AtomicHolder(i * 2); - } - return holders; - }); + init(() -> { + AtomicHolder[] holders = new AtomicHolder[SIZE]; + for (int i = 0; i < holders.length; ++i) { + holders[i] = new AtomicHolder(i * 2); + } + return holders; + }); static final FieldHolder[] fieldHolders = - init( - () -> { - FieldHolder[] holders = new FieldHolder[SIZE]; - for (int i = 0; i < holders.length; ++i) { - holders[i] = new FieldHolder(i * 2); - } - return holders; - }); + init(() -> { + FieldHolder[] holders = new FieldHolder[SIZE]; + for (int i = 0; i < holders.length; ++i) { + holders[i] = new FieldHolder(i * 2); + } + return holders; + }); static final T init(Supplier supplier) { return supplier.get(); diff --git a/internal-api/src/jmh/java/datadog/trace/util/CaseInsensitiveMapBenchmark.java b/internal-api/src/jmh/java/datadog/trace/util/CaseInsensitiveMapBenchmark.java index c72a26430af..fd99162f2c7 100644 --- a/internal-api/src/jmh/java/datadog/trace/util/CaseInsensitiveMapBenchmark.java +++ b/internal-api/src/jmh/java/datadog/trace/util/CaseInsensitiveMapBenchmark.java @@ -77,34 +77,32 @@ static T init(Supplier supplier) { } static final String[] UPPER_PREFIXES = - init( - () -> { - String[] upperPrefixes = new String[PREFIXES.length]; - for (int i = 0; i < PREFIXES.length; ++i) { - upperPrefixes[i] = PREFIXES[i].toUpperCase(); - } - return upperPrefixes; - }); + init(() -> { + String[] upperPrefixes = new String[PREFIXES.length]; + for (int i = 0; i < PREFIXES.length; ++i) { + upperPrefixes[i] = PREFIXES[i].toUpperCase(); + } + return upperPrefixes; + }); // Fixed seed so every arm, in every fork, sees the same case and hit/miss mix -- the upper-case // share drives toLowerCase() allocation and suffix NUM_SUFFIXES is a miss, so an unseeded draw // would give each arm a different workload. static final String[] LOOKUP_KEYS = - init( - () -> { - Random curRandom = new Random(42); - - String[] keys = new String[32]; - for (int i = 0; i < keys.length; ++i) { - int prefixIndex = curRandom.nextInt(PREFIXES.length); - boolean toUpper = curRandom.nextBoolean(); - int suffixIndex = curRandom.nextInt(NUM_SUFFIXES + 1); - - String key = PREFIXES[prefixIndex] + "-" + suffixIndex; - keys[i] = toUpper ? key.toUpperCase() : key.toLowerCase(); - } - return keys; - }); + init(() -> { + Random curRandom = new Random(42); + + String[] keys = new String[32]; + for (int i = 0; i < keys.length; ++i) { + int prefixIndex = curRandom.nextInt(PREFIXES.length); + boolean toUpper = curRandom.nextBoolean(); + int suffixIndex = curRandom.nextInt(NUM_SUFFIXES + 1); + + String key = PREFIXES[prefixIndex] + "-" + suffixIndex; + keys[i] = toUpper ? key.toUpperCase() : key.toLowerCase(); + } + return keys; + }); // Per-thread (@State(Scope.Thread)) so cycling the lookup key doesn't contend a shared counter. // The maps stay static/shared (read-only after class-init); only the index is per-thread. A diff --git a/internal-api/src/jmh/java/datadog/trace/util/HashingBenchmark.java b/internal-api/src/jmh/java/datadog/trace/util/HashingBenchmark.java index 9dc6faf5f6d..cf1ffd95a87 100644 --- a/internal-api/src/jmh/java/datadog/trace/util/HashingBenchmark.java +++ b/internal-api/src/jmh/java/datadog/trace/util/HashingBenchmark.java @@ -65,31 +65,29 @@ static T init(Supplier supplier) { // strings used in hashing are set up ahead of time, so that the only allocation is from var-args static String[] TEST_STRINGS = - init( - () -> { - ThreadLocalRandom random = ThreadLocalRandom.current(); + init(() -> { + ThreadLocalRandom random = ThreadLocalRandom.current(); - String[] strings = new String[1024]; - for (int i = 0; i < strings.length; ++i) { - strings[i] = Double.toString(random.nextDouble()); - } - return strings; - }); + String[] strings = new String[1024]; + for (int i = 0; i < strings.length; ++i) { + strings[i] = Double.toString(random.nextDouble()); + } + return strings; + }); static { Thread updaterThread = - new Thread( - () -> { - ThreadLocalRandom random = ThreadLocalRandom.current(); + new Thread(() -> { + ThreadLocalRandom random = ThreadLocalRandom.current(); - while (!Thread.interrupted()) { - str0 = TEST_STRINGS[random.nextInt(0, TEST_STRINGS.length)]; - str1 = TEST_STRINGS[random.nextInt(0, TEST_STRINGS.length)]; - str2 = TEST_STRINGS[random.nextInt(0, TEST_STRINGS.length)]; - str3 = TEST_STRINGS[random.nextInt(0, TEST_STRINGS.length)]; - str4 = TEST_STRINGS[random.nextInt(0, TEST_STRINGS.length)]; - } - }); + while (!Thread.interrupted()) { + str0 = TEST_STRINGS[random.nextInt(0, TEST_STRINGS.length)]; + str1 = TEST_STRINGS[random.nextInt(0, TEST_STRINGS.length)]; + str2 = TEST_STRINGS[random.nextInt(0, TEST_STRINGS.length)]; + str3 = TEST_STRINGS[random.nextInt(0, TEST_STRINGS.length)]; + str4 = TEST_STRINGS[random.nextInt(0, TEST_STRINGS.length)]; + } + }); updaterThread.setDaemon(true); updaterThread.start(); } diff --git a/internal-api/src/jmh/java/datadog/trace/util/StringSplitBenchmark.java b/internal-api/src/jmh/java/datadog/trace/util/StringSplitBenchmark.java index 584c375cdea..375da9f3158 100644 --- a/internal-api/src/jmh/java/datadog/trace/util/StringSplitBenchmark.java +++ b/internal-api/src/jmh/java/datadog/trace/util/StringSplitBenchmark.java @@ -56,7 +56,7 @@ public enum TestString { TestString(String str) { this.str = str; } - }; + } @Param TestString testStr; diff --git a/internal-api/src/main/java/datadog/trace/api/ProcessTags.java b/internal-api/src/main/java/datadog/trace/api/ProcessTags.java index 460238f3cf5..909ddf308bd 100644 --- a/internal-api/src/main/java/datadog/trace/api/ProcessTags.java +++ b/internal-api/src/main/java/datadog/trace/api/ProcessTags.java @@ -203,13 +203,11 @@ static void calculate() { synchronized (Lazy.TAGS) { final Stream tagStream = TAGS.entrySet().stream() - .map( - entry -> - UTF8BytesString.create( - entry.getKey() - + ":" - + TraceUtils.normalizeTagValue( - entry.getValue().replace(':', '_')))); + .map(entry -> + UTF8BytesString.create( + entry.getKey() + + ":" + + TraceUtils.normalizeTagValue(entry.getValue().replace(':', '_')))); utf8ListForm = Collections.unmodifiableList(tagStream.collect(Collectors.toList())); stringListForm = Collections.unmodifiableList( diff --git a/internal-api/src/main/java/datadog/trace/api/UserIdCollectionMode.java b/internal-api/src/main/java/datadog/trace/api/UserIdCollectionMode.java index cf2651405cd..9767d3f6bcd 100644 --- a/internal-api/src/main/java/datadog/trace/api/UserIdCollectionMode.java +++ b/internal-api/src/main/java/datadog/trace/api/UserIdCollectionMode.java @@ -18,26 +18,24 @@ public enum UserIdCollectionMode { } public static UserIdCollectionMode fromString(String collectionMode, String trackingMode) { - return CURRENT_MODE.updateAndGet( - current -> { - if (collectionMode == null && trackingMode != null) { - return fromTracking(trackingMode); - } else { - return fromMode(collectionMode); - } - }); + return CURRENT_MODE.updateAndGet(current -> { + if (collectionMode == null && trackingMode != null) { + return fromTracking(trackingMode); + } else { + return fromMode(collectionMode); + } + }); } public static UserIdCollectionMode fromRemoteConfig(final String mode) { - return CURRENT_MODE.updateAndGet( - current -> { - if (mode == null) { - // use locally configured value - return Config.get().getAppSecUserIdCollectionMode(); - } else { - return fromMode(mode); - } - }); + return CURRENT_MODE.updateAndGet(current -> { + if (mode == null) { + // use locally configured value + return Config.get().getAppSecUserIdCollectionMode(); + } else { + return fromMode(mode); + } + }); } private static UserIdCollectionMode fromMode(String mode) { diff --git a/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/AgentSpan.java b/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/AgentSpan.java index 5e3918f123c..2acb6af301d 100644 --- a/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/AgentSpan.java +++ b/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/AgentSpan.java @@ -343,12 +343,11 @@ default void apply(@Nonnull final SpanPrototype prototype) { // Prototype tags are fallback defaults: only fill keys this span has not already set. prototype .tags() - .forEach( - (tag, value) -> { - if (getTag(tag) == null) { - setTag(tag, value); - } - }); + .forEach((tag, value) -> { + if (getTag(tag) == null) { + setTag(tag, value); + } + }); // Never-clobber: only stamp the integration name when the context reports none. if (spanContext().getIntegrationName() == null) { diff --git a/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/java/lang/ProcessImplInstrumentationHelpers.java b/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/java/lang/ProcessImplInstrumentationHelpers.java index f807f6e1daa..38ff9d68841 100644 --- a/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/java/lang/ProcessImplInstrumentationHelpers.java +++ b/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/java/lang/ProcessImplInstrumentationHelpers.java @@ -172,28 +172,26 @@ public static void addProcessCompletionHook(Process p, AgentSpan span) { } final ContextContinuation continuation = Context.current().capture(); - future.whenComplete( - (process, thr) -> { - if (thr != null) { - span.addThrowable(thr); - } else { - span.setTag("cmd.exit_code", Integer.toString(process.exitValue())); - } - finishSpan(continuation, span); - }); + future.whenComplete((process, thr) -> { + if (thr != null) { + span.addThrowable(thr); + } else { + span.setTag("cmd.exit_code", Integer.toString(process.exitValue())); + } + finishSpan(continuation, span); + }); } else if (EXECUTOR != null) { final ContextContinuation continuation = Context.current().capture(); - EXECUTOR.execute( - () -> { - try { - int exitCode = p.waitFor(); - span.setTag("cmd.exit_code", Integer.toString(exitCode)); - } catch (InterruptedException e) { - span.addThrowable(e); - } finally { - finishSpan(continuation, span); - } - }); + EXECUTOR.execute(() -> { + try { + int exitCode = p.waitFor(); + span.setTag("cmd.exit_code", Integer.toString(exitCode)); + } catch (InterruptedException e) { + span.addThrowable(e); + } finally { + finishSpan(continuation, span); + } + }); } } diff --git a/internal-api/src/main/java/datadog/trace/util/Maybe.java b/internal-api/src/main/java/datadog/trace/util/Maybe.java index 49ae9c86926..79fce20305b 100644 --- a/internal-api/src/main/java/datadog/trace/util/Maybe.java +++ b/internal-api/src/main/java/datadog/trace/util/Maybe.java @@ -18,8 +18,8 @@ * plain nullable field. See {@code EscapeShapeBenchmark}'s {@code phiWithStatic} arm for why an * {@code EMPTY} singleton would cost 8 B/op on every JDK measured, including 25. * - *

This shape -- one allocation site, a plain nullable field, no singleton merge -- scalar- - * replaces on ordinary escape analysis, on JDK 8/11/17/25, no JDK-21+ {@code + *

This shape -- one allocation site, a plain nullable field, no singleton merge -- + * scalar-replaces on ordinary escape analysis, on JDK 8/11/17/25, no JDK-21+ {@code * ReduceAllocationMerges} needed (see {@code EscapeShapeBenchmark}). The discipline required of a * caller is that the wrapping method itself construct a {@code Maybe} at exactly one call site (fed * by a plain nullable local merged through ordinary branches, or by delegating to an diff --git a/internal-api/src/main/java/datadog/trace/util/PidHelper.java b/internal-api/src/main/java/datadog/trace/util/PidHelper.java index 887dd3900e8..d69d5726b9f 100644 --- a/internal-api/src/main/java/datadog/trace/util/PidHelper.java +++ b/internal-api/src/main/java/datadog/trace/util/PidHelper.java @@ -129,29 +129,28 @@ public static Set getJavaPids() { return stream .map(Path::getFileName) .map(Path::toString) - .filter( - (name) -> { - // On J9, additional metadata files are present alongside files named $PID. - // Additionally, the contents of the ps dir are files with process ID files for - // Hotspot, - // but they are directories for J9. - // This also makes sense as defensive programming. - if (name.isEmpty()) { - return false; - } - char c = name.charAt(0); - if (c < '0' || c > '9') { - // Short-circuit - let's not parse as long something that is definitely not a long - // number - return false; - } - long pid = -1; - try { - pid = Long.parseLong(name); - } catch (NumberFormatException ignored) { - } - return pid != -1; - }) + .filter(name -> { + // On J9, additional metadata files are present alongside files named $PID. + // Additionally, the contents of the ps dir are files with process ID files for + // Hotspot, + // but they are directories for J9. + // This also makes sense as defensive programming. + if (name.isEmpty()) { + return false; + } + char c = name.charAt(0); + if (c < '0' || c > '9') { + // Short-circuit - let's not parse as long something that is definitely not a long + // number + return false; + } + long pid = -1; + try { + pid = Long.parseLong(name); + } catch (NumberFormatException ignored) { + } + return pid != -1; + }) .collect(Collectors.toSet()); } catch (IOException e) { log.debug("Unable to obtain Java PIDs", e); diff --git a/internal-api/src/main/java/datadog/trace/util/stacktrace/StackUtils.java b/internal-api/src/main/java/datadog/trace/util/stacktrace/StackUtils.java index 35ad5151054..54777fec1f8 100644 --- a/internal-api/src/main/java/datadog/trace/util/stacktrace/StackUtils.java +++ b/internal-api/src/main/java/datadog/trace/util/stacktrace/StackUtils.java @@ -69,9 +69,8 @@ public static List generateUserCodeStackTrace( final Predicate filterPredicate) { int stackCapacity = Config.get().getAppSecMaxStackTraceDepth(); List elements = - StackWalkerFactory.INSTANCE.walk( - stream -> - stream.filter(filterPredicate).limit(stackCapacity).collect(Collectors.toList())); + StackWalkerFactory.INSTANCE.walk(stream -> + stream.filter(filterPredicate).limit(stackCapacity).collect(Collectors.toList())); return IntStream.range(0, elements.size()) .mapToObj(idx -> new StackTraceFrame(idx, elements.get(idx))) .collect(Collectors.toList()); diff --git a/internal-api/src/test/java/datadog/trace/api/ConfigTest.java b/internal-api/src/test/java/datadog/trace/api/ConfigTest.java index 59230a4097e..20e0a956009 100644 --- a/internal-api/src/test/java/datadog/trace/api/ConfigTest.java +++ b/internal-api/src/test/java/datadog/trace/api/ConfigTest.java @@ -1682,10 +1682,9 @@ void verifyMappingHeaderTagsOnTracer(String mapString, Map map) System.setProperty(PREFIX + REQUEST_HEADER_TAGS, "rqh1"); System.setProperty(PREFIX + RESPONSE_HEADER_TAGS, "rsh1"); Map responseHeaderTags = new HashMap<>(); - map.forEach( - (key, value) -> - responseHeaderTags.put( - key, value.replace("http.request.headers", "http.response.headers"))); + map.forEach((key, value) -> + responseHeaderTags.put( + key, value.replace("http.request.headers", "http.response.headers"))); responseHeaderTags.put("rsh1", "http.response.headers.rsh1"); Properties props = new Properties(); props.setProperty(HEADER_TAGS, mapString); diff --git a/internal-api/src/test/java/datadog/trace/api/TagMapEntryTest.java b/internal-api/src/test/java/datadog/trace/api/TagMapEntryTest.java index e7c483e80ec..c78234b618b 100644 --- a/internal-api/src/test/java/datadog/trace/api/TagMapEntryTest.java +++ b/internal-api/src/test/java/datadog/trace/api/TagMapEntryTest.java @@ -60,7 +60,7 @@ public void createObject() { test( () -> TagMap.Entry.create("foo", map), TagMap.Entry.ANY, - (entry) -> + entry -> multiCheck( checkKey("foo", entry), checkValue(map, entry), @@ -81,7 +81,7 @@ public void createCharSequence() { test( () -> TagMap.Entry.create("foo", "bar"), TagMap.Entry.OBJECT, - (entry) -> + entry -> multiCheck( checkKey("foo", entry), checkValue("bar", entry), @@ -108,7 +108,7 @@ public void newObjectEntry() { test( () -> TagMap.Entry.newObjectEntry("foo", "bar"), TagMap.Entry.OBJECT, - (entry) -> + entry -> multiCheck( checkKey("foo", entry), checkValue("bar", entry), @@ -124,7 +124,7 @@ public void anyEntryObject() { test( () -> TagMap.Entry.newAnyEntry("foo", "bar"), TagMap.Entry.ANY, - (entry) -> + entry -> multiCheck( checkKey("foo", entry), checkValue("bar", entry), @@ -140,7 +140,7 @@ public void createBoolean(boolean value) { test( () -> TagMap.Entry.create("foo", value), TagMap.Entry.BOOLEAN, - (entry) -> + entry -> multiCheck( checkKey("foo", entry), checkValue(value, entry), @@ -157,7 +157,7 @@ public void newBooleanEntry(boolean value) { test( () -> TagMap.Entry.create("foo", value), TagMap.Entry.BOOLEAN, - (entry) -> + entry -> multiCheck( checkKey("foo", entry), checkValue(value, entry), @@ -174,7 +174,7 @@ public void newBooleanEntryBoxed(boolean value) { test( () -> TagMap.Entry.newBooleanEntry("foo", Boolean.valueOf(value)), TagMap.Entry.BOOLEAN, - (entry) -> + entry -> multiCheck( checkKey("foo", entry), checkValue(value, entry), @@ -191,7 +191,7 @@ public void newAnyEntryBoolean(boolean value) { test( () -> TagMap.Entry.newAnyEntry("foo", Boolean.valueOf(value)), TagMap.Entry.ANY, - (entry) -> + entry -> multiCheck( checkKey("foo", entry), checkValue(value, entry), @@ -209,7 +209,7 @@ public void createInt(int value) { test( () -> TagMap.Entry.create("foo", value), TagMap.Entry.INT, - (entry) -> + entry -> multiCheck( checkKey("foo", entry), checkValue(value, entry), @@ -225,7 +225,7 @@ public void newIntEntry(int value) { test( () -> TagMap.Entry.newIntEntry("foo", value), TagMap.Entry.INT, - (entry) -> + entry -> multiCheck( checkKey("foo", entry), checkValue(value, entry), @@ -241,7 +241,7 @@ public void newIntEntryBoxed(int value) { test( () -> TagMap.Entry.newIntEntry("foo", Integer.valueOf(value)), TagMap.Entry.INT, - (entry) -> + entry -> multiCheck( checkKey("foo", entry), checkValue(value, entry), @@ -257,7 +257,7 @@ public void newIntEntryBoxedShort(short value) { test( () -> TagMap.Entry.newIntEntry("foo", Short.valueOf(value)), TagMap.Entry.INT, - (entry) -> + entry -> multiCheck( checkKey("foo", entry), checkValue(value, entry), @@ -273,7 +273,7 @@ public void newIntEntryBoxedByte(byte value) { test( () -> TagMap.Entry.newIntEntry("foo", Byte.valueOf(value)), TagMap.Entry.INT, - (entry) -> + entry -> multiCheck( checkKey("foo", entry), checkValue(value, entry), @@ -289,7 +289,7 @@ public void newAnyEntryInteger(int value) { test( () -> TagMap.Entry.newAnyEntry("foo", Integer.valueOf(value)), TagMap.Entry.ANY, - (entry) -> + entry -> multiCheck( checkKey("foo", entry), checkValue(value, entry), @@ -321,7 +321,7 @@ public void createLong(long value) { test( () -> TagMap.Entry.create("foo", value), TagMap.Entry.LONG, - (entry) -> + entry -> multiCheck( checkKey("foo", entry), checkValue(value, entry), @@ -351,7 +351,7 @@ public void newLongEntry(long value) { test( () -> TagMap.Entry.newLongEntry("foo", value), TagMap.Entry.LONG, - (entry) -> + entry -> multiCheck( checkKey("foo", entry), checkValue(value, entry), @@ -381,7 +381,7 @@ public void newLongEntryBoxed(long value) { test( () -> TagMap.Entry.newLongEntry("foo", Long.valueOf(value)), TagMap.Entry.LONG, - (entry) -> + entry -> multiCheck( checkKey("foo", entry), checkValue(value, entry), @@ -411,7 +411,7 @@ public void newAnyEntryLong(long value) { test( () -> TagMap.Entry.newAnyEntry("foo", Long.valueOf(value)), TagMap.Entry.ANY, - (entry) -> + entry -> multiCheck( checkKey("foo", entry), checkValue(value, entry), @@ -427,7 +427,7 @@ public void createFloat(float value) { test( () -> TagMap.Entry.create("foo", value), TagMap.Entry.FLOAT, - (entry) -> + entry -> multiCheck( checkKey("foo", entry), checkValue(value, entry), @@ -442,7 +442,7 @@ public void newFloatEntry(float value) { test( () -> TagMap.Entry.newFloatEntry("foo", value), TagMap.Entry.FLOAT, - (entry) -> + entry -> multiCheck( checkKey("foo", entry), checkValue(value, entry), @@ -457,7 +457,7 @@ public void newFloatEntryBoxed(float value) { test( () -> TagMap.Entry.newFloatEntry("foo", Float.valueOf(value)), TagMap.Entry.FLOAT, - (entry) -> + entry -> multiCheck( checkKey("foo", entry), checkValue(value, entry), @@ -472,7 +472,7 @@ public void newAnyEntryFloat(float value) { test( () -> TagMap.Entry.newAnyEntry("foo", Float.valueOf(value)), TagMap.Entry.ANY, - (entry) -> + entry -> multiCheck( checkKey("foo", entry), checkValue(value, entry), @@ -488,7 +488,7 @@ public void createDouble(double value) { test( () -> TagMap.Entry.create("foo", value), TagMap.Entry.DOUBLE, - (entry) -> + entry -> multiCheck( checkKey("foo", entry), checkValue(value, entry), @@ -503,7 +503,7 @@ public void newDoubleEntry(double value) { test( () -> TagMap.Entry.newDoubleEntry("foo", value), TagMap.Entry.DOUBLE, - (entry) -> + entry -> multiCheck( checkKey("foo", entry), checkValue(value, entry), @@ -519,7 +519,7 @@ public void newDoubleEntryBoxed(double value) { test( () -> TagMap.Entry.newDoubleEntry("foo", Double.valueOf(value)), TagMap.Entry.DOUBLE, - (entry) -> + entry -> multiCheck( checkKey("foo", entry), checkValue(value, entry), @@ -535,7 +535,7 @@ public void newAnyEntryDouble(double value) { test( () -> TagMap.Entry.newAnyEntry("foo", Double.valueOf(value)), TagMap.Entry.ANY, - (entry) -> + entry -> multiCheck( checkKey("foo", entry), checkValue(value, entry), @@ -567,7 +567,7 @@ static final void test( Supplier entrySupplier, byte rawType, Function checkSupplier) { Function combinedCheckSupplier = - (entry) -> { + entry -> { return multiCheck( checkSupplier.apply(entry), checkSame(entry, entry.entry()), @@ -606,12 +606,11 @@ static final void testMultiThreaded( // Different shuffle for each thread Check shuffledChecks = checks.shuffle(); - callables.add( - () -> { - shuffledChecks.check(); + callables.add(() -> { + shuffledChecks.check(); - return null; - }); + return null; + }); } List> futures; diff --git a/internal-api/src/test/java/datadog/trace/api/TagMapTest.java b/internal-api/src/test/java/datadog/trace/api/TagMapTest.java index 9a72b7bdd60..1bca04a9035 100644 --- a/internal-api/src/test/java/datadog/trace/api/TagMapTest.java +++ b/internal-api/src/test/java/datadog/trace/api/TagMapTest.java @@ -489,10 +489,9 @@ public void freeze(TagMapScenario scenario) { map.freeze(); - assertFrozen( - () -> { - map.remove("foo"); - }); + assertFrozen(() -> { + map.remove("foo"); + }); assertEntry("foo", "bar", map); @@ -755,7 +754,7 @@ public void forEachConsumer() { TagMap map = createTagMap(size); Set keys = new HashSet<>(size); - map.forEach((entry) -> keys.add(entry.tag())); + map.forEach(entry -> keys.add(entry.tag())); for (int i = 0; i < size; ++i) { // make sure the key was present diff --git a/internal-api/src/test/java/datadog/trace/api/WithGlobalTracerForkedTest.java b/internal-api/src/test/java/datadog/trace/api/WithGlobalTracerForkedTest.java index 0c930af23ec..5c16679f83a 100644 --- a/internal-api/src/test/java/datadog/trace/api/WithGlobalTracerForkedTest.java +++ b/internal-api/src/test/java/datadog/trace/api/WithGlobalTracerForkedTest.java @@ -44,10 +44,9 @@ void shouldNotCrashOnUnsupportedTracerType() { Tracer tracer = mock(Tracer.class); WithGlobalTracer.Callback callback = ignored -> {}; - assertDoesNotThrow( - () -> { - WithGlobalTracer.registerOrExecute(callback); - GlobalTracer.registerIfAbsent(tracer); - }); + assertDoesNotThrow(() -> { + WithGlobalTracer.registerOrExecute(callback); + GlobalTracer.registerIfAbsent(tracer); + }); } } diff --git a/internal-api/src/test/java/datadog/trace/api/cache/FixedSizeCacheTest.java b/internal-api/src/test/java/datadog/trace/api/cache/FixedSizeCacheTest.java index fd351532823..8f993cd28ef 100644 --- a/internal-api/src/test/java/datadog/trace/api/cache/FixedSizeCacheTest.java +++ b/internal-api/src/test/java/datadog/trace/api/cache/FixedSizeCacheTest.java @@ -117,12 +117,11 @@ void fixedSizeWithArrayKeysShouldStoreAndRetrieveValues( assertEquals(count, creationCount.get()); List visited = new ArrayList<>(); - fsCache.visit( - (key, val) -> { - if ((key[0] + "_value").equals(val)) { - visited.add(key[0].toString()); - } - }); + fsCache.visit((key, val) -> { + if ((key[0] + "_value").equals(val)) { + visited.add(key[0].toString()); + } + }); assertEquals(keys, visited); } @@ -246,21 +245,19 @@ void shouldHandleConcurrentUsage(String cacheType, IntFunction> futures = new ArrayList<>(); for (int t = 0; t < numThreads; t++) { futures.add( - executor.submit( - () -> { - ThreadLocalRandom random = ThreadLocalRandom.current(); - started.countDown(); - runTest.await(); - for (int i = 0; i < numInsertions; i++) { - int hash = random.nextInt(); - String string = String.valueOf(hash); - TKey tkey = new TKey(hash, hash, string); - assertEquals( - string + "_value", - fsCache.computeIfAbsent(tkey, key -> key.string + "_value")); - } - return null; - })); + executor.submit(() -> { + ThreadLocalRandom random = ThreadLocalRandom.current(); + started.countDown(); + runTest.await(); + for (int i = 0; i < numInsertions; i++) { + int hash = random.nextInt(); + String string = String.valueOf(hash); + TKey tkey = new TKey(hash, hash, string); + assertEquals( + string + "_value", fsCache.computeIfAbsent(tkey, key -> key.string + "_value")); + } + return null; + })); } started.await(); runTest.countDown(); @@ -457,12 +454,11 @@ private static TKeyB tKeyB(int hash, int m, int n, String s) { /** Collects the keys whose cached value matches the value produced by {@link TVC}. */ private static List visitedKeys(DDCache cache) { List visited = new ArrayList<>(); - cache.visit( - (key, value) -> { - if ((key + "_value").equals(value)) { - visited.add(key.toString()); - } - }); + cache.visit((key, value) -> { + if ((key + "_value").equals(value)) { + visited.add(key.toString()); + } + }); return visited; } diff --git a/internal-api/src/test/java/datadog/trace/api/http/StoredByteBodyTest.java b/internal-api/src/test/java/datadog/trace/api/http/StoredByteBodyTest.java index 58fd0fefc71..d033dd9f119 100644 --- a/internal-api/src/test/java/datadog/trace/api/http/StoredByteBodyTest.java +++ b/internal-api/src/test/java/datadog/trace/api/http/StoredByteBodyTest.java @@ -237,11 +237,10 @@ void doesNotFailOnDoubleCommit() { storedByteBody.appendData(body, 0, body.length); storedByteBody.maybeNotify(); - assertDoesNotThrow( - () -> { - storedByteBody.appendData(body, 0, body.length); - storedByteBody.maybeNotify(); - }); + assertDoesNotThrow(() -> { + storedByteBody.appendData(body, 0, body.length); + storedByteBody.maybeNotify(); + }); } private static byte[] repeat(char value, int count) { diff --git a/internal-api/src/test/java/datadog/trace/api/iast/telemetry/IastMetricCollectorTest.java b/internal-api/src/test/java/datadog/trace/api/iast/telemetry/IastMetricCollectorTest.java index 3e875bc281e..47da7f7fa89 100644 --- a/internal-api/src/test/java/datadog/trace/api/iast/telemetry/IastMetricCollectorTest.java +++ b/internal-api/src/test/java/datadog/trace/api/iast/telemetry/IastMetricCollectorTest.java @@ -97,18 +97,17 @@ void testCollectorInHeavyConcurrency() throws Exception { List> futures = new ArrayList<>(times); for (int i = 0; i < times; i++) { futures.add( - executor.submit( - () -> { - IastMetric metric = metrics[random.nextInt(metrics.length)]; - latch.await(); - if (metric.getTag() == null) { - IastMetricCollector.add(metric, value); - } else { - byte tag = (byte) random.nextInt(metric.getTag().values.length); - IastMetricCollector.add(metric, tag, value); - } - return null; - })); + executor.submit(() -> { + IastMetric metric = metrics[random.nextInt(metrics.length)]; + latch.await(); + if (metric.getTag() == null) { + IastMetricCollector.add(metric, value); + } else { + byte tag = (byte) random.nextInt(metric.getTag().values.length); + IastMetricCollector.add(metric, tag, value); + } + return null; + })); } latch.countDown(); for (Future future : futures) { diff --git a/internal-api/src/test/java/datadog/trace/api/llmobs/GenAiApmTagsTest.java b/internal-api/src/test/java/datadog/trace/api/llmobs/GenAiApmTagsTest.java index 0fef8aaf1af..66b1061308a 100644 --- a/internal-api/src/test/java/datadog/trace/api/llmobs/GenAiApmTagsTest.java +++ b/internal-api/src/test/java/datadog/trace/api/llmobs/GenAiApmTagsTest.java @@ -29,17 +29,15 @@ void setUp() { span = mock(AgentSpan.class); when(span.getTag(anyString())).thenAnswer(call -> tags.get(call.getArgument(0))); when(span.setTag(anyString(), anyString())) - .thenAnswer( - call -> { - tags.put(call.getArgument(0), call.getArgument(1)); - return span; - }); + .thenAnswer(call -> { + tags.put(call.getArgument(0), call.getArgument(1)); + return span; + }); when(span.setMetric(any(CharSequence.class), anyDouble())) - .thenAnswer( - call -> { - tags.put(call.getArgument(0).toString(), call.getArgument(1)); - return span; - }); + .thenAnswer(call -> { + tags.put(call.getArgument(0).toString(), call.getArgument(1)); + return span; + }); } @Test diff --git a/internal-api/src/test/java/datadog/trace/api/metrics/SpanMetricRegistryTest.java b/internal-api/src/test/java/datadog/trace/api/metrics/SpanMetricRegistryTest.java index a77f5052441..804a607bc34 100644 --- a/internal-api/src/test/java/datadog/trace/api/metrics/SpanMetricRegistryTest.java +++ b/internal-api/src/test/java/datadog/trace/api/metrics/SpanMetricRegistryTest.java @@ -28,11 +28,10 @@ void testRegistryNotCrashIfTelemetryIsDisabled(String telemetryEnabled) { SpanMetricRegistry spanMetricRegistry = SpanMetricRegistry.getInstance(); try { SpanMetrics spanMetrics = spanMetricRegistry.get("test-api"); - assertDoesNotThrow( - () -> { - spanMetrics.onSpanCreated(); - spanMetrics.onSpanFinished(); - }); + assertDoesNotThrow(() -> { + spanMetrics.onSpanCreated(); + spanMetrics.onSpanFinished(); + }); } finally { if (spanMetricRegistry instanceof SpanMetricRegistryImpl) { for (SpanMetricsImpl spanMetrics : diff --git a/internal-api/src/test/java/datadog/trace/api/profiling/ProfilerFlareLoggerTest.java b/internal-api/src/test/java/datadog/trace/api/profiling/ProfilerFlareLoggerTest.java index f42747b5576..3bab9926835 100644 --- a/internal-api/src/test/java/datadog/trace/api/profiling/ProfilerFlareLoggerTest.java +++ b/internal-api/src/test/java/datadog/trace/api/profiling/ProfilerFlareLoggerTest.java @@ -230,14 +230,13 @@ void testFlareContentFormat() throws Exception { try (MockedStatic mockedStatic = mockStatic(TracerFlare.class)) { mockedStatic .when(() -> TracerFlare.addText(any(), any(), any())) - .then( - invocation -> { - String content = invocation.getArgument(2); - assertTrue(content.contains("Message 1")); - assertTrue(content.contains("Message 2 with arg")); - assertTrue(content.contains("\n")); // Should have newlines between messages - return null; - }); + .then(invocation -> { + String content = invocation.getArgument(2); + assertTrue(content.contains("Message 1")); + assertTrue(content.contains("Message 2 with arg")); + assertTrue(content.contains("\n")); // Should have newlines between messages + return null; + }); logger.addReportToFlare(zip); } @@ -275,21 +274,20 @@ void testConcurrentLogging() throws Exception { for (int i = 0; i < threadCount; i++) { final int threadId = i; - executor.submit( - () -> { - try { - startLatch.await(); - for (int j = 0; j < messagesPerThread; j++) { - if (logger.log("Thread {} message {}", threadId, j)) { - successCount.incrementAndGet(); - } - } - } catch (Exception e) { - fail("Exception in thread: " + e.getMessage()); - } finally { - doneLatch.countDown(); + executor.submit(() -> { + try { + startLatch.await(); + for (int j = 0; j < messagesPerThread; j++) { + if (logger.log("Thread {} message {}", threadId, j)) { + successCount.incrementAndGet(); } - }); + } + } catch (Exception e) { + fail("Exception in thread: " + e.getMessage()); + } finally { + doneLatch.countDown(); + } + }); } startLatch.countDown(); @@ -311,18 +309,16 @@ void testConcurrentCleanupAndLogging() throws Exception { CountDownLatch latch = new CountDownLatch(2); // Logger thread - executor.submit( - () -> { - logger.log("Concurrent message"); - latch.countDown(); - }); + executor.submit(() -> { + logger.log("Concurrent message"); + latch.countDown(); + }); // Cleanup thread - executor.submit( - () -> { - logger.cleanup(); - latch.countDown(); - }); + executor.submit(() -> { + logger.cleanup(); + latch.countDown(); + }); assertTrue(latch.await(1, TimeUnit.SECONDS)); } diff --git a/internal-api/src/test/java/datadog/trace/api/rum/RumTelemetryCollectorTest.java b/internal-api/src/test/java/datadog/trace/api/rum/RumTelemetryCollectorTest.java index 000c9b59d02..49a42a1cb17 100644 --- a/internal-api/src/test/java/datadog/trace/api/rum/RumTelemetryCollectorTest.java +++ b/internal-api/src/test/java/datadog/trace/api/rum/RumTelemetryCollectorTest.java @@ -15,23 +15,22 @@ class RumTelemetryCollectorTest { @Test void testDefaultNoOpDoesNotThrowException() { - assertDoesNotThrow( - () -> { - NO_OP.onInjectionSucceed("3"); - NO_OP.onInjectionSucceed("5"); - NO_OP.onInjectionFailed("3", "gzip"); - NO_OP.onInjectionFailed("5", null); - NO_OP.onInjectionSkipped("3"); - NO_OP.onInjectionSkipped("5"); - NO_OP.onInitializationSucceed(); - NO_OP.onContentSecurityPolicyDetected("3"); - NO_OP.onContentSecurityPolicyDetected("5"); - NO_OP.onInjectionResponseSize("3", 256L); - NO_OP.onInjectionResponseSize("5", 512L); - NO_OP.onInjectionTime("3", 10L); - NO_OP.onInjectionTime("5", 20L); - NO_OP.close(); - }); + assertDoesNotThrow(() -> { + NO_OP.onInjectionSucceed("3"); + NO_OP.onInjectionSucceed("5"); + NO_OP.onInjectionFailed("3", "gzip"); + NO_OP.onInjectionFailed("5", null); + NO_OP.onInjectionSkipped("3"); + NO_OP.onInjectionSkipped("5"); + NO_OP.onInitializationSucceed(); + NO_OP.onContentSecurityPolicyDetected("3"); + NO_OP.onContentSecurityPolicyDetected("5"); + NO_OP.onInjectionResponseSize("3", 256L); + NO_OP.onInjectionResponseSize("5", 512L); + NO_OP.onInjectionTime("3", 10L); + NO_OP.onInjectionTime("5", 20L); + NO_OP.close(); + }); } @Test @@ -80,12 +79,11 @@ public Collection drainDistributionSeries() { @Test void testMultipleCloseCallsDoNotThrowException() { - assertDoesNotThrow( - () -> { - NO_OP.close(); - NO_OP.close(); - NO_OP.close(); - }); + assertDoesNotThrow(() -> { + NO_OP.close(); + NO_OP.close(); + NO_OP.close(); + }); } @Test @@ -103,12 +101,11 @@ void testDefaultNoOpDrainMethodsReturnEmptyCollections() { @Test void testDefaultNoOpDrainMethodsDoNotThrowException() { - assertDoesNotThrow( - () -> { - NO_OP.drain(); - NO_OP.drain(); - NO_OP.drainDistributionSeries(); - NO_OP.drainDistributionSeries(); - }); + assertDoesNotThrow(() -> { + NO_OP.drain(); + NO_OP.drain(); + NO_OP.drainDistributionSeries(); + NO_OP.drainDistributionSeries(); + }); } } diff --git a/internal-api/src/test/java/datadog/trace/api/sampling/AdaptiveSamplerTest.java b/internal-api/src/test/java/datadog/trace/api/sampling/AdaptiveSamplerTest.java index 8b732467622..b3abe8a8579 100644 --- a/internal-api/src/test/java/datadog/trace/api/sampling/AdaptiveSamplerTest.java +++ b/internal-api/src/test/java/datadog/trace/api/sampling/AdaptiveSamplerTest.java @@ -562,20 +562,19 @@ private void testSamplerConcurrently( means[i] = new Mean(); final Mean mean = means[i]; threads[i] = - new Thread( - () -> { - try { - for (int w = 0; w < WINDOWS; w++) { - startBarrier.await(10, TimeUnit.SECONDS); - WindowSamplingResult samplingResult = - generateWindowEventsAndSample(windowEventsSupplier, sampler, mean); - allSamples.addAndGet(samplingResult.samples); - receivedEvents.addAndGet(samplingResult.events); - endBarrier.await(10, TimeUnit.SECONDS); - } - } catch (Throwable ignored) { - } - }); + new Thread(() -> { + try { + for (int w = 0; w < WINDOWS; w++) { + startBarrier.await(10, TimeUnit.SECONDS); + WindowSamplingResult samplingResult = + generateWindowEventsAndSample(windowEventsSupplier, sampler, mean); + allSamples.addAndGet(samplingResult.samples); + receivedEvents.addAndGet(samplingResult.events); + endBarrier.await(10, TimeUnit.SECONDS); + } + } catch (Throwable ignored) { + } + }); threads[i].start(); } for (final Thread t : threads) { diff --git a/internal-api/src/test/java/datadog/trace/api/telemetry/CoreMetricCollectorBaggageTest.java b/internal-api/src/test/java/datadog/trace/api/telemetry/CoreMetricCollectorBaggageTest.java index 6f4c4e3e79f..bbc1d8348c8 100644 --- a/internal-api/src/test/java/datadog/trace/api/telemetry/CoreMetricCollectorBaggageTest.java +++ b/internal-api/src/test/java/datadog/trace/api/telemetry/CoreMetricCollectorBaggageTest.java @@ -149,9 +149,8 @@ private static CoreMetric findMetric(Collection metrics, String metr private static CoreMetric findTruncatedMetric(Collection metrics, String tag) { return metrics.stream() - .filter( - metric -> - "context_header.truncated".equals(metric.metricName) && metric.tags.contains(tag)) + .filter(metric -> + "context_header.truncated".equals(metric.metricName) && metric.tags.contains(tag)) .findFirst() .orElse(null); } diff --git a/internal-api/src/test/java/datadog/trace/api/telemetry/CoreMetricCollectorTest.java b/internal-api/src/test/java/datadog/trace/api/telemetry/CoreMetricCollectorTest.java index ff8857c2977..0b47861ce77 100644 --- a/internal-api/src/test/java/datadog/trace/api/telemetry/CoreMetricCollectorTest.java +++ b/internal-api/src/test/java/datadog/trace/api/telemetry/CoreMetricCollectorTest.java @@ -63,15 +63,14 @@ void overflowingCoreMetrics() { int limit = 1024; // when - assertDoesNotThrow( - () -> { - for (int index = 0; index <= limit * 2; index++) { - SpanMetrics spanMetrics = registry.get("instr-" + index); - spanMetrics.onSpanCreated(); - spanMetrics.onSpanCreated(); - spanMetrics.onSpanFinished(); - } - }); + assertDoesNotThrow(() -> { + for (int index = 0; index <= limit * 2; index++) { + SpanMetrics spanMetrics = registry.get("instr-" + index); + spanMetrics.onSpanCreated(); + spanMetrics.onSpanCreated(); + spanMetrics.onSpanFinished(); + } + }); // then collector.prepareMetrics(); diff --git a/internal-api/src/test/java/datadog/trace/api/telemetry/LogCollectorTest.java b/internal-api/src/test/java/datadog/trace/api/telemetry/LogCollectorTest.java index 05ab493fd86..4fc956b2cdc 100644 --- a/internal-api/src/test/java/datadog/trace/api/telemetry/LogCollectorTest.java +++ b/internal-api/src/test/java/datadog/trace/api/telemetry/LogCollectorTest.java @@ -136,26 +136,24 @@ void acceptsNewLogGroupAfterDrainDetachesFullBucket() throws Exception { CountDownLatch bucketDetached = new CountDownLatch(1); CountDownLatch releaseDrain = new CountDownLatch(1); FutureTask> drainTask = - new FutureTask<>( - () -> { - List drainedLogGroups = new ArrayList<>(); - ConcurrentHashtable.drain( - state, - drainedLogGroups, - (logGroups, logGroup) -> { - bucketDetached.countDown(); - await(releaseDrain); - logGroups.add(logGroup); - }); - return drainedLogGroups; - }); + new FutureTask<>(() -> { + List drainedLogGroups = new ArrayList<>(); + ConcurrentHashtable.drain( + state, + drainedLogGroups, + (logGroups, logGroup) -> { + bucketDetached.countDown(); + await(releaseDrain); + logGroups.add(logGroup); + }); + return drainedLogGroups; + }); Thread drainThread = new Thread(drainTask, "log-collector-drain"); FutureTask writerTask = - new FutureTask<>( - () -> { - logCollector.addLogMessage("ERROR", "Second", null); - return null; - }); + new FutureTask<>(() -> { + logCollector.addLogMessage("ERROR", "Second", null); + return null; + }); Thread writerThread = new Thread(writerTask, "log-collector-writer"); // When @@ -242,14 +240,13 @@ void countsConcurrentEquivalentMessages() throws Exception { try { for (int i = 0; i < threadCount; i++) { futures[i] = - executor.submit( - () -> { - await(start); - for (int occurrence = 0; occurrence < messagesPerThread; occurrence++) { - logCollector.addLogMessage("ERROR", "Message", null); - } - return null; - }); + executor.submit(() -> { + await(start); + for (int occurrence = 0; occurrence < messagesPerThread; occurrence++) { + logCollector.addLogMessage("ERROR", "Message", null); + } + return null; + }); } // When @@ -277,12 +274,11 @@ void groupsConcurrentMessagesWithEquivalentThrowables() throws Exception { try { for (int i = 0; i < threadCount; i++) { futures[i] = - executor.submit( - () -> { - await(start); - logCollector.addLogMessage("ERROR", "Message", throwableWithMethod("run", 10)); - return null; - }); + executor.submit(() -> { + await(start); + logCollector.addLogMessage("ERROR", "Message", throwableWithMethod("run", 10)); + return null; + }); } // When @@ -312,12 +308,11 @@ void limitsConcurrentLogGroupsToCapacity() throws Exception { for (int i = 0; i < threadCount; i++) { String message = "Message " + i; futures[i] = - executor.submit( - () -> { - await(start); - logCollector.addLogMessage("ERROR", message, null); - return null; - }); + executor.submit(() -> { + await(start); + logCollector.addLogMessage("ERROR", message, null); + return null; + }); } // When @@ -380,11 +375,10 @@ private static void assertContainsLogGroup( .as("log group for message %s", message) .filteredOn(candidate -> message.equals(candidate.message)) .singleElement() - .satisfies( - logGroup -> { - assertThat(logGroup.logLevel).isEqualTo("ERROR"); - assertThat(logGroup.count).isEqualTo(count); - assertThat(logGroup.throwable).isNull(); - }); + .satisfies(logGroup -> { + assertThat(logGroup.logLevel).isEqualTo("ERROR"); + assertThat(logGroup.count).isEqualTo(count); + assertThat(logGroup.throwable).isNull(); + }); } } diff --git a/internal-api/src/test/java/datadog/trace/api/telemetry/ScaReachabilityDependencyRegistryTest.java b/internal-api/src/test/java/datadog/trace/api/telemetry/ScaReachabilityDependencyRegistryTest.java index 3d022cc9144..9ce1e66e418 100644 --- a/internal-api/src/test/java/datadog/trace/api/telemetry/ScaReachabilityDependencyRegistryTest.java +++ b/internal-api/src/test/java/datadog/trace/api/telemetry/ScaReachabilityDependencyRegistryTest.java @@ -51,23 +51,22 @@ void recordHit_concurrentCallsForSameCve_exactlyOneCallsiteStored() throws Inter for (int i = 0; i < threadCount; i++) { final int idx = i; - pool.submit( - () -> { - try { - startLatch.await(); // wait until all threads are ready - ScaReachabilityDependencyRegistry.INSTANCE.recordHit( - "com.example:lib", - "1.0.0", - "GHSA-test", - "com.myapp.Controller" + idx, - "method" + idx, - idx); - } catch (InterruptedException e) { - Thread.currentThread().interrupt(); - } finally { - doneLatch.countDown(); - } - }); + pool.submit(() -> { + try { + startLatch.await(); // wait until all threads are ready + ScaReachabilityDependencyRegistry.INSTANCE.recordHit( + "com.example:lib", + "1.0.0", + "GHSA-test", + "com.myapp.Controller" + idx, + "method" + idx, + idx); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } finally { + doneLatch.countDown(); + } + }); } startLatch.countDown(); // release all threads simultaneously diff --git a/internal-api/src/test/java/datadog/trace/api/telemetry/WafMetricCollectorTest.java b/internal-api/src/test/java/datadog/trace/api/telemetry/WafMetricCollectorTest.java index 3b1c8f85699..3000f3f7955 100644 --- a/internal-api/src/test/java/datadog/trace/api/telemetry/WafMetricCollectorTest.java +++ b/internal-api/src/test/java/datadog/trace/api/telemetry/WafMetricCollectorTest.java @@ -213,23 +213,21 @@ void overflowingWafMetricCollectorDoesNotCrash() { int limit = 1024; // when - assertDoesNotThrow( - () -> { - for (int index = 0; index <= limit * 2; index++) { - collector.wafInit("foo", "bar", true); - } - }); + assertDoesNotThrow(() -> { + for (int index = 0; index <= limit * 2; index++) { + collector.wafInit("foo", "bar", true); + } + }); // then assertEquals(limit, collector.drain().size()); // when - assertDoesNotThrow( - () -> { - for (int index = 0; index <= limit * 2; index++) { - collector.wafUpdates("bar", true); - } - }); + assertDoesNotThrow(() -> { + for (int index = 0; index <= limit * 2; index++) { + collector.wafUpdates("bar", true); + } + }); // then assertEquals(limit, collector.drain().size()); @@ -302,12 +300,11 @@ void testMissingUserIdEventMetric() throws InterruptedException { // when for (int index = 0; index < count; index++) { - executors.submit( - () -> { - latch.await(); - collector.missingUserId(SPRING_SECURITY); - return null; - }); + executors.submit(() -> { + latch.await(); + collector.missingUserId(SPRING_SECURITY); + return null; + }); } latch.countDown(); @@ -851,12 +848,11 @@ private void raspRuleEvalAndPrepare(int limit) { private void submitMissingUserLogin( ExecutorService executors, CountDownLatch latch, LoginEvent event, int count) { for (int index = 0; index < count; index++) { - executors.submit( - () -> { - latch.await(); - collector.missingUserLogin(SPRING_SECURITY, event); - return null; - }); + executors.submit(() -> { + latch.await(); + collector.missingUserLogin(SPRING_SECURITY, event); + return null; + }); } } diff --git a/internal-api/src/test/java/datadog/trace/bootstrap/instrumentation/api/HttpUrlExtractorsTest.java b/internal-api/src/test/java/datadog/trace/bootstrap/instrumentation/api/HttpUrlExtractorsTest.java index 3f89a0634b3..a5efbc5b271 100644 --- a/internal-api/src/test/java/datadog/trace/bootstrap/instrumentation/api/HttpUrlExtractorsTest.java +++ b/internal-api/src/test/java/datadog/trace/bootstrap/instrumentation/api/HttpUrlExtractorsTest.java @@ -77,25 +77,23 @@ void otelClientSupportsConcurrentRenderingAndPathReads() throws Exception { CyclicBarrier start = new CyclicBarrier(2); try { Future rendering = - executor.submit( - () -> { - start.await(10, TimeUnit.SECONDS); - for (int i = 0; i < 1000; i++) { - assertEquals("https://host/a%3Fb#fragment", url.get()); - assertEquals("a%3Fb", url.subSequence(13, 18).toString()); - } - return null; - }); + executor.submit(() -> { + start.await(10, TimeUnit.SECONDS); + for (int i = 0; i < 1000; i++) { + assertEquals("https://host/a%3Fb#fragment", url.get()); + assertEquals("a%3Fb", url.subSequence(13, 18).toString()); + } + return null; + }); Future reading = - executor.submit( - () -> { - start.await(10, TimeUnit.SECONDS); - for (int i = 0; i < 1000; i++) { - assertEquals("/a?b", url.path()); - assertEquals("https://host/a%3Fb#fragment", url.toString()); - } - return null; - }); + executor.submit(() -> { + start.await(10, TimeUnit.SECONDS); + for (int i = 0; i < 1000; i++) { + assertEquals("/a?b", url.path()); + assertEquals("https://host/a%3Fb#fragment", url.toString()); + } + return null; + }); rendering.get(10, TimeUnit.SECONDS); reading.get(10, TimeUnit.SECONDS); } finally { diff --git a/internal-api/src/test/java/datadog/trace/util/ConcurrentHashtableD1Test.java b/internal-api/src/test/java/datadog/trace/util/ConcurrentHashtableD1Test.java index 46963236366..3f092f15e26 100644 --- a/internal-api/src/test/java/datadog/trace/util/ConcurrentHashtableD1Test.java +++ b/internal-api/src/test/java/datadog/trace/util/ConcurrentHashtableD1Test.java @@ -112,22 +112,21 @@ void concurrentGetOrCreateProducesExactlyOneEntry() throws InterruptedException Thread[] workers = new Thread[threads]; for (int i = 0; i < threads; i++) { workers[i] = - new Thread( - () -> { - ready.countDown(); - try { - go.await(); - } catch (InterruptedException ex) { - Thread.currentThread().interrupt(); - return; - } - table.tryGetOrCreateOrNull( - "shared", - k -> { - createCount.incrementAndGet(); - return new StringEntry(k, 1); - }); - }); + new Thread(() -> { + ready.countDown(); + try { + go.await(); + } catch (InterruptedException ex) { + Thread.currentThread().interrupt(); + return; + } + table.tryGetOrCreateOrNull( + "shared", + k -> { + createCount.incrementAndGet(); + return new StringEntry(k, 1); + }); + }); workers[i].start(); } ready.await(); @@ -174,17 +173,16 @@ void concurrentDistinctKeyInsertionsAreAllRetained() throws InterruptedException for (int i = 0; i < threads; i++) { final String key = keys[i]; workers[i] = - new Thread( - () -> { - ready.countDown(); - try { - go.await(); - } catch (InterruptedException ex) { - Thread.currentThread().interrupt(); - return; - } - table.tryGetOrCreateOrNull(key, k -> new StringEntry(k, 1)); - }); + new Thread(() -> { + ready.countDown(); + try { + go.await(); + } catch (InterruptedException ex) { + Thread.currentThread().interrupt(); + return; + } + table.tryGetOrCreateOrNull(key, k -> new StringEntry(k, 1)); + }); workers[i].start(); } ready.await(); @@ -299,11 +297,10 @@ void drainRemovesEveryEntryAndFeedsSink() { Set drained = new HashSet<>(); int[] sum = {0}; - table.drain( - e -> { - drained.add(e.key()); - sum[0] += e.value; - }); + table.drain(e -> { + drained.add(e.key()); + sum[0] += e.value; + }); assertEquals(new HashSet<>(Arrays.asList("a", "b", "c")), drained); assertEquals(6, sum[0]); @@ -361,16 +358,15 @@ void concurrentReadsStaySafeWhileOneChainMemberChurns() throws InterruptedExcept AtomicBoolean stop = new AtomicBoolean(false); AtomicInteger missed = new AtomicInteger(); Thread reader = - new Thread( - () -> { - while (!stop.get()) { - for (int i = 1; i < n; i++) { - if (table.get(keys[i]) == null) { - missed.incrementAndGet(); - } - } + new Thread(() -> { + while (!stop.get()) { + for (int i = 1; i < n; i++) { + if (table.get(keys[i]) == null) { + missed.incrementAndGet(); } - }); + } + } + }); reader.start(); for (int r = 0; r < 100_000; r++) { table.remove(churn); diff --git a/internal-api/src/test/java/datadog/trace/util/ConcurrentHashtableD2Test.java b/internal-api/src/test/java/datadog/trace/util/ConcurrentHashtableD2Test.java index e2b3f8dd353..0cd0b886b58 100644 --- a/internal-api/src/test/java/datadog/trace/util/ConcurrentHashtableD2Test.java +++ b/internal-api/src/test/java/datadog/trace/util/ConcurrentHashtableD2Test.java @@ -109,23 +109,22 @@ void concurrentGetOrCreateProducesExactlyOneEntry() throws InterruptedException Thread[] workers = new Thread[threads]; for (int i = 0; i < threads; i++) { workers[i] = - new Thread( - () -> { - ready.countDown(); - try { - go.await(); - } catch (InterruptedException ex) { - Thread.currentThread().interrupt(); - return; - } - table.tryGetOrCreateOrNull( - "shared", - 42, - (k1, k2) -> { - createCount.incrementAndGet(); - return new PairEntry(k1, k2); - }); - }); + new Thread(() -> { + ready.countDown(); + try { + go.await(); + } catch (InterruptedException ex) { + Thread.currentThread().interrupt(); + return; + } + table.tryGetOrCreateOrNull( + "shared", + 42, + (k1, k2) -> { + createCount.incrementAndGet(); + return new PairEntry(k1, k2); + }); + }); workers[i].start(); } ready.await(); @@ -175,17 +174,16 @@ void concurrentDistinctKeyInsertionsAreAllRetained() throws InterruptedException final String k1 = k1s[i]; final Integer k2 = k2s[i]; workers[i] = - new Thread( - () -> { - ready.countDown(); - try { - go.await(); - } catch (InterruptedException ex) { - Thread.currentThread().interrupt(); - return; - } - table.tryGetOrCreateOrNull(k1, k2, PairEntry::new); - }); + new Thread(() -> { + ready.countDown(); + try { + go.await(); + } catch (InterruptedException ex) { + Thread.currentThread().interrupt(); + return; + } + table.tryGetOrCreateOrNull(k1, k2, PairEntry::new); + }); workers[i].start(); } ready.await(); diff --git a/internal-api/src/test/java/datadog/trace/util/ConcurrentHashtableReservationTest.java b/internal-api/src/test/java/datadog/trace/util/ConcurrentHashtableReservationTest.java index 2e8f2af118f..75ac98f1fbe 100644 --- a/internal-api/src/test/java/datadog/trace/util/ConcurrentHashtableReservationTest.java +++ b/internal-api/src/test/java/datadog/trace/util/ConcurrentHashtableReservationTest.java @@ -388,13 +388,12 @@ void tryReserveWaitsForAnInFlightReservationOnTheSameKeyBeforeRejecting() throws ExecutorService executor = Executors.newSingleThreadExecutor(); try { Future secondFuture = - executor.submit( - () -> { - try (ConcurrentHashtable.Reservation second = - ConcurrentHashtable.tryReserve(state, 1)) { - return second.tryGetOrInsertOrNull(new TestEntry(1)); - } - }); + executor.submit(() -> { + try (ConcurrentHashtable.Reservation second = + ConcurrentHashtable.tryReserve(state, 1)) { + return second.tryGetOrInsertOrNull(new TestEntry(1)); + } + }); // A buggy fast-reject would complete this immediately (with a null result) instead of // blocking on the still-held write lock. diff --git a/internal-api/src/test/java/datadog/trace/util/ConcurrentHashtableStaticsTest.java b/internal-api/src/test/java/datadog/trace/util/ConcurrentHashtableStaticsTest.java index 8be6e791b9e..4b82fdcd989 100644 --- a/internal-api/src/test/java/datadog/trace/util/ConcurrentHashtableStaticsTest.java +++ b/internal-api/src/test/java/datadog/trace/util/ConcurrentHashtableStaticsTest.java @@ -265,17 +265,16 @@ void concurrentGetOrCreateViaStaticsProducesExactlyOneEntry() throws Interrupted Thread[] workers = new Thread[threads]; for (int i = 0; i < threads; i++) { workers[i] = - new Thread( - () -> { - ready.countDown(); - try { - go.await(); - } catch (InterruptedException ex) { - Thread.currentThread().interrupt(); - return; - } - table.getOrCreateCounting(7, createCount); - }); + new Thread(() -> { + ready.countDown(); + try { + go.await(); + } catch (InterruptedException ex) { + Thread.currentThread().interrupt(); + return; + } + table.getOrCreateCounting(7, createCount); + }); workers[i].start(); } ready.await(); @@ -301,16 +300,15 @@ void concurrentReadsStaySafeWhileOneChainMemberChurnsViaStatics() throws Interru AtomicBoolean stop = new AtomicBoolean(false); AtomicInteger missed = new AtomicInteger(); Thread reader = - new Thread( - () -> { - while (!stop.get()) { - for (int i = 1; i < n; i++) { - if (table.get(i) == null) { - missed.incrementAndGet(); - } - } + new Thread(() -> { + while (!stop.get()) { + for (int i = 1; i < n; i++) { + if (table.get(i) == null) { + missed.incrementAndGet(); } - }); + } + } + }); reader.start(); for (int r = 0; r < 100_000; r++) { table.remove(churn); diff --git a/internal-api/src/test/java/datadog/trace/util/ProcessSupervisorTest.java b/internal-api/src/test/java/datadog/trace/util/ProcessSupervisorTest.java index d213add1a70..ff6f6e7143d 100644 --- a/internal-api/src/test/java/datadog/trace/util/ProcessSupervisorTest.java +++ b/internal-api/src/test/java/datadog/trace/util/ProcessSupervisorTest.java @@ -25,12 +25,11 @@ void processKilledWhenSupervisorClosed() throws InterruptedException { ProcessSupervisor processSupervisor = new ProcessSupervisor("test", processBuilder); - conditions.eventually( - () -> { - Process process = processSupervisor.getCurrentProcess(); - assertNotNull(process); - assertTrue(process.isAlive()); - }); + conditions.eventually(() -> { + Process process = processSupervisor.getCurrentProcess(); + assertNotNull(process); + assertTrue(process.isAlive()); + }); // code coverage: give the supervisor thread a reasonable chance to start waiting for the exit // code @@ -44,12 +43,11 @@ void processKilledWhenSupervisorClosed() throws InterruptedException { processSupervisor.close(); assertNotNull(oldProcess); - conditions.eventually( - () -> { - assertFalse(oldProcess.isAlive()); - Process process = processSupervisor.getCurrentProcess(); - assertTrue(process == null || !process.isAlive()); - }); + conditions.eventually(() -> { + assertFalse(oldProcess.isAlive()); + Process process = processSupervisor.getCurrentProcess(); + assertTrue(process == null || !process.isAlive()); + }); } @Test @@ -59,12 +57,11 @@ void processRespawnsWhenKilled() throws InterruptedException { ProcessSupervisor processSupervisor = new ProcessSupervisor("test", processBuilder); - conditions.eventually( - () -> { - Process process = processSupervisor.getCurrentProcess(); - assertNotNull(process); - assertTrue(process.isAlive()); - }); + conditions.eventually(() -> { + Process process = processSupervisor.getCurrentProcess(); + assertNotNull(process); + assertTrue(process.isAlive()); + }); // code coverage: give the supervisor thread a reasonable chance to start waiting for the exit // code @@ -73,14 +70,13 @@ void processRespawnsWhenKilled() throws InterruptedException { firstProcess.destroyForcibly(); assertNotNull(firstProcess); - conditions.eventually( - () -> { - assertFalse(firstProcess.isAlive()); - Process process = processSupervisor.getCurrentProcess(); - assertNotNull(process); - assertNotEquals(firstProcess, process); - assertTrue(process.isAlive()); - }); + conditions.eventually(() -> { + assertFalse(firstProcess.isAlive()); + Process process = processSupervisor.getCurrentProcess(); + assertNotNull(process); + assertNotEquals(firstProcess, process); + assertTrue(process.isAlive()); + }); // code coverage: give the supervisor thread a reasonable chance to start waiting for the exit // code @@ -89,11 +85,10 @@ void processRespawnsWhenKilled() throws InterruptedException { processSupervisor.close(); assertNotNull(secondProcess); - conditions.eventually( - () -> { - assertFalse(secondProcess.isAlive()); - Process process = processSupervisor.getCurrentProcess(); - assertTrue(process == null || !process.isAlive()); - }); + conditions.eventually(() -> { + assertFalse(secondProcess.isAlive()); + Process process = processSupervisor.getCurrentProcess(); + assertTrue(process == null || !process.isAlive()); + }); } } diff --git a/internal-api/src/test/java/datadog/trace/util/stacktrace/HotSpotStackWalkerTest.java b/internal-api/src/test/java/datadog/trace/util/stacktrace/HotSpotStackWalkerTest.java index 3488a320edb..77cdcd7b06a 100644 --- a/internal-api/src/test/java/datadog/trace/util/stacktrace/HotSpotStackWalkerTest.java +++ b/internal-api/src/test/java/datadog/trace/util/stacktrace/HotSpotStackWalkerTest.java @@ -96,10 +96,9 @@ public void iterable_from_HotSpotStackWalker_doGetStack_is_not_in_the_filtered_s // Then assertFalse( list.stream() - .anyMatch( - stackTraceElement -> - stackTraceElement - .toString() - .equals("java.lang.Iterable.spliterator(Iterable.java:101)"))); + .anyMatch(stackTraceElement -> + stackTraceElement + .toString() + .equals("java.lang.Iterable.spliterator(Iterable.java:101)"))); } } diff --git a/products/feature-flagging/feature-flagging-lib/src/main/java/com/datadog/featureflag/ULeb128Encoder.java b/products/feature-flagging/feature-flagging-lib/src/main/java/com/datadog/featureflag/ULeb128Encoder.java index 7566cf8698d..537225b5915 100644 --- a/products/feature-flagging/feature-flagging-lib/src/main/java/com/datadog/featureflag/ULeb128Encoder.java +++ b/products/feature-flagging/feature-flagging-lib/src/main/java/com/datadog/featureflag/ULeb128Encoder.java @@ -85,13 +85,12 @@ static String hashTargetingKey(final String value) { // ThreadLocal avoids a provider lookup + allocation per call on that hot path. digest() resets // the instance after each hash; we also reset() defensively before use. private static final ThreadLocal SHA_256 = - ThreadLocal.withInitial( - () -> { - try { - return MessageDigest.getInstance("SHA-256"); - } catch (final NoSuchAlgorithmException e) { - // SHA-256 is mandated by the JLS on every JVM; unreachable in practice. - throw new IllegalStateException("SHA-256 algorithm not available", e); - } - }); + ThreadLocal.withInitial(() -> { + try { + return MessageDigest.getInstance("SHA-256"); + } catch (final NoSuchAlgorithmException e) { + // SHA-256 is mandated by the JLS on every JVM; unreachable in practice. + throw new IllegalStateException("SHA-256 algorithm not available", e); + } + }); } diff --git a/products/feature-flagging/feature-flagging-lib/src/test/java/com/datadog/featureflag/FeatureFlagsBackendTest.java b/products/feature-flagging/feature-flagging-lib/src/test/java/com/datadog/featureflag/FeatureFlagsBackendTest.java index 9fcbdc11b91..c4fccb2b0c3 100644 --- a/products/feature-flagging/feature-flagging-lib/src/test/java/com/datadog/featureflag/FeatureFlagsBackendTest.java +++ b/products/feature-flagging/feature-flagging-lib/src/test/java/com/datadog/featureflag/FeatureFlagsBackendTest.java @@ -172,10 +172,9 @@ void runsTheFirstShutdownSubscriptionActionOnce() { void closeNotifiesTheShutdownListenersBeforeReleasingResources() throws Exception { final List calls = new CopyOnWriteArrayList<>(); this.backend.subscribeShutdown(() -> calls.add("first")); - this.backend.subscribeShutdown( - () -> { - throw new IllegalStateException("failing listener"); - }); + this.backend.subscribeShutdown(() -> { + throw new IllegalStateException("failing listener"); + }); final AutoCloseable unregistered = this.backend.subscribeShutdown(() -> calls.add("unregistered")); this.backend.subscribeShutdown(() -> calls.add("last")); diff --git a/products/feature-flagging/feature-flagging-lib/src/test/java/com/datadog/featureflag/RemoteConfigServiceImplTest.java b/products/feature-flagging/feature-flagging-lib/src/test/java/com/datadog/featureflag/RemoteConfigServiceImplTest.java index f4083331c6c..728291d7291 100644 --- a/products/feature-flagging/feature-flagging-lib/src/test/java/com/datadog/featureflag/RemoteConfigServiceImplTest.java +++ b/products/feature-flagging/feature-flagging-lib/src/test/java/com/datadog/featureflag/RemoteConfigServiceImplTest.java @@ -87,15 +87,13 @@ void reportsRejectedDocumentsOnceEverySubscriberIsNotified() { final IllegalArgumentException rejection = new IllegalArgumentException("malformed"); final IllegalStateException otherRejection = new IllegalStateException("malformed too"); final List received = new ArrayList<>(); - service.subscribe( - content -> { - throw rejection; - }); + service.subscribe(content -> { + throw rejection; + }); service.subscribe(received::add); - service.subscribe( - content -> { - throw otherRejection; - }); + service.subscribe(content -> { + throw otherRejection; + }); final IllegalArgumentException reported = assertThrows( @@ -116,13 +114,12 @@ void lateSubscribersRejectingTheCurrentDocumentStaySubscribed() throws Exception final List received = new ArrayList<>(); final AutoCloseable subscription = - service.subscribe( - content -> { - if (content != null) { - throw new IllegalArgumentException("malformed"); - } - received.add(null); - }); + service.subscribe(content -> { + if (content != null) { + throw new IllegalArgumentException("malformed"); + } + received.add(null); + }); service.accept("key", null, mock(PollingRateHinter.class)); subscription.close(); @@ -138,14 +135,12 @@ void requestsADocumentReceivedBeforeAnySubscriberAgainWhenRejected() { service.start(); service.accept("key", DOCUMENT, mock(PollingRateHinter.class)); - service.subscribe( - content -> { - throw new IllegalArgumentException("malformed"); - }); - service.subscribe( - content -> { - throw new IllegalArgumentException("malformed"); - }); + service.subscribe(content -> { + throw new IllegalArgumentException("malformed"); + }); + service.subscribe(content -> { + throw new IllegalArgumentException("malformed"); + }); verify(poller, times(1)).removeListeners(Product.FFE_FLAGS); verify(poller, times(2)) @@ -168,18 +163,16 @@ void keepsADocumentReceivedBeforeAnySubscriberWhenAccepted() { void doesNotRequestAgainADocumentAlreadyRejectedOnDelivery() { final ConfigurationPoller poller = mock(ConfigurationPoller.class); final RemoteConfigServiceImpl service = new RemoteConfigServiceImpl(poller); - service.subscribe( - content -> { - throw new IllegalArgumentException("malformed"); - }); + service.subscribe(content -> { + throw new IllegalArgumentException("malformed"); + }); assertThrows( IllegalArgumentException.class, () -> service.accept("key", DOCUMENT, mock(PollingRateHinter.class))); - service.subscribe( - content -> { - throw new IllegalArgumentException("malformed"); - }); + service.subscribe(content -> { + throw new IllegalArgumentException("malformed"); + }); verify(poller, never()).removeListeners(any()); } @@ -210,28 +203,25 @@ void concurrentRemovalIsDeliveredAfterTheInitialReplay() throws Exception { final ExecutorService executor = Executors.newFixedThreadPool(2); try { final Future subscription = - executor.submit( - () -> - service.subscribe( - content -> { - if (content != null) { - replayStarted.countDown(); - try { - assertTrue(finishReplay.await(5, SECONDS)); - } catch (final InterruptedException e) { - Thread.currentThread().interrupt(); - throw new AssertionError(e); - } - } - received.add(content); - })); + executor.submit(() -> + service.subscribe(content -> { + if (content != null) { + replayStarted.countDown(); + try { + assertTrue(finishReplay.await(5, SECONDS)); + } catch (final InterruptedException e) { + Thread.currentThread().interrupt(); + throw new AssertionError(e); + } + } + received.add(content); + })); assertTrue(replayStarted.await(5, SECONDS)); final Future removal = - executor.submit( - () -> { - removalStarted.countDown(); - service.accept("key", null, null); - }); + executor.submit(() -> { + removalStarted.countDown(); + service.accept("key", null, null); + }); assertTrue(removalStarted.await(5, SECONDS)); assertThrows(TimeoutException.class, () -> removal.get(100, MILLISECONDS)); @@ -357,11 +347,10 @@ void reportsRemovedConfiguration() { @Test void reportsTheDocumentOnlyOnceItIsDelivered() { final AtomicBoolean loggedBeforeDelivery = new AtomicBoolean(true); - service.subscribe( - content -> - loggedBeforeDelivery.set( - appender.list.stream() - .anyMatch(e -> e.getFormattedMessage().contains("configuration received")))); + service.subscribe(content -> + loggedBeforeDelivery.set( + appender.list.stream() + .anyMatch(e -> e.getFormattedMessage().contains("configuration received")))); service.accept("config", DOCUMENT, mock(PollingRateHinter.class)); diff --git a/products/feature-flagging/feature-flagging-lib/src/test/java/com/datadog/featureflag/SpanEnrichmentWriterTest.java b/products/feature-flagging/feature-flagging-lib/src/test/java/com/datadog/featureflag/SpanEnrichmentWriterTest.java index 4f76e732432..723ffc03980 100644 --- a/products/feature-flagging/feature-flagging-lib/src/test/java/com/datadog/featureflag/SpanEnrichmentWriterTest.java +++ b/products/feature-flagging/feature-flagging-lib/src/test/java/com/datadog/featureflag/SpanEnrichmentWriterTest.java @@ -167,10 +167,9 @@ void runtimeDefaultWithNullFlagKeyIsIgnored() { @Test void recordingSwallowsResolverErrors() { final SpanEnrichmentWriter writer = - new SpanEnrichmentWriter( - () -> { - throw new RuntimeException("resolver boom"); - }); + new SpanEnrichmentWriter(() -> { + throw new RuntimeException("resolver boom"); + }); // Must not propagate — enrichment can never break flag evaluation. writer.serialId(5, false, null); assertTrue(writer.states().isEmpty()); diff --git a/products/metrics/metrics-api/src/test/java/datadog/metrics/api/AccumulatorFootprintTest.java b/products/metrics/metrics-api/src/test/java/datadog/metrics/api/AccumulatorFootprintTest.java index b0b2f7b59fd..84c21bb15ec 100644 --- a/products/metrics/metrics-api/src/test/java/datadog/metrics/api/AccumulatorFootprintTest.java +++ b/products/metrics/metrics-api/src/test/java/datadog/metrics/api/AccumulatorFootprintTest.java @@ -99,22 +99,21 @@ void contendedFootprint() throws InterruptedException { CountDownLatch done = new CountDownLatch(threads); try { for (int t = 0; t < threads; t++) { - pool.execute( - () -> { - try { - start.await(); - long deadline = System.nanoTime() + TimeUnit.SECONDS.toNanos(2); - while (System.nanoTime() < deadline) { - for (LongAdder adder : adders) { - adder.increment(); - } - } - } catch (InterruptedException e) { - Thread.currentThread().interrupt(); - } finally { - done.countDown(); + pool.execute(() -> { + try { + start.await(); + long deadline = System.nanoTime() + TimeUnit.SECONDS.toNanos(2); + while (System.nanoTime() < deadline) { + for (LongAdder adder : adders) { + adder.increment(); } - }); + } + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } finally { + done.countDown(); + } + }); } start.countDown(); assertTrue(done.await(30, TimeUnit.SECONDS)); diff --git a/products/metrics/metrics-api/src/test/java/datadog/metrics/api/AccumulatorTest.java b/products/metrics/metrics-api/src/test/java/datadog/metrics/api/AccumulatorTest.java index adb203fdd1c..49027e9c67b 100644 --- a/products/metrics/metrics-api/src/test/java/datadog/metrics/api/AccumulatorTest.java +++ b/products/metrics/metrics-api/src/test/java/datadog/metrics/api/AccumulatorTest.java @@ -79,19 +79,18 @@ void concurrentIncrementsAreNotLost() throws InterruptedException { CountDownLatch done = new CountDownLatch(threadCount); try { for (int t = 0; t < threadCount; t++) { - pool.execute( - () -> { - try { - start.await(); - for (int i = 0; i < incrementsPerThread; i++) { - counters.inc(Counters.FOO); - } - } catch (InterruptedException e) { - Thread.currentThread().interrupt(); - } finally { - done.countDown(); - } - }); + pool.execute(() -> { + try { + start.await(); + for (int i = 0; i < incrementsPerThread; i++) { + counters.inc(Counters.FOO); + } + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } finally { + done.countDown(); + } + }); } start.countDown(); assertTrue(done.await(30, TimeUnit.SECONDS)); @@ -117,24 +116,22 @@ void concurrentAccumulateAndDuringWritesNeverExceedsWritten() try { Future drainer = - pool.submit( - () -> { - while (!stop.get()) { - Accumulator.Counts drained = counters.accumulateAndReset(); - synchronized (runningTotal) { - runningTotal[0] += drained.get(Counters.FOO); - } - } - }); + pool.submit(() -> { + while (!stop.get()) { + Accumulator.Counts drained = counters.accumulateAndReset(); + synchronized (runningTotal) { + runningTotal[0] += drained.get(Counters.FOO); + } + } + }); for (int t = 0; t < threadCount; t++) { - pool.execute( - () -> { - for (int i = 0; i < incrementsPerThread; i++) { - counters.inc(Counters.FOO); - } - done.countDown(); - }); + pool.execute(() -> { + for (int i = 0; i < incrementsPerThread; i++) { + counters.inc(Counters.FOO); + } + done.countDown(); + }); } assertTrue(done.await(30, TimeUnit.SECONDS)); diff --git a/products/metrics/metrics-lib/src/test/java/datadog/metrics/impl/ThreadLocalRecordingTest.java b/products/metrics/metrics-lib/src/test/java/datadog/metrics/impl/ThreadLocalRecordingTest.java index f533355eb89..2cdbd820acd 100644 --- a/products/metrics/metrics-lib/src/test/java/datadog/metrics/impl/ThreadLocalRecordingTest.java +++ b/products/metrics/metrics-lib/src/test/java/datadog/metrics/impl/ThreadLocalRecordingTest.java @@ -18,12 +18,11 @@ void delegatesPerThread() throws Exception { Map> callsByThread = new ConcurrentHashMap<>(); ThreadLocal sink = - ThreadLocal.withInitial( - () -> { - List calls = new ArrayList<>(); - callsByThread.put(Thread.currentThread(), calls); - return recordCalls(calls); - }); + ThreadLocal.withInitial(() -> { + List calls = new ArrayList<>(); + callsByThread.put(Thread.currentThread(), calls); + return recordCalls(calls); + }); Recording recording = new ThreadLocalRecording(sink); @@ -34,21 +33,20 @@ void delegatesPerThread() throws Exception { for (int i = 0; i < threadCount; i++) { threads[i] = - new Thread( - () -> { - ready.countDown(); - try { - ready.await(); - } catch (InterruptedException e) { - Thread.currentThread().interrupt(); - return; - } - recording.start(); - recording.reset(); - recording.stop(); - recording.flush(); - done.countDown(); - }); + new Thread(() -> { + ready.countDown(); + try { + ready.await(); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + return; + } + recording.start(); + recording.reset(); + recording.stop(); + recording.flush(); + done.countDown(); + }); threads[i].start(); } done.await(); diff --git a/remote-config/remote-config-core/src/main/java/datadog/remoteconfig/JsonCanonicalizer.java b/remote-config/remote-config-core/src/main/java/datadog/remoteconfig/JsonCanonicalizer.java index 081e99eab9b..4bd66a0acfa 100644 --- a/remote-config/remote-config-core/src/main/java/datadog/remoteconfig/JsonCanonicalizer.java +++ b/remote-config/remote-config-core/src/main/java/datadog/remoteconfig/JsonCanonicalizer.java @@ -37,27 +37,26 @@ private static void serialize(ByteArrayOutputStream os, Object o) { private static void serialize(ByteArrayOutputStream os, String s) { os.write('"'); s.codePoints() - .forEach( - codepoint -> { - if (codepoint == '\\' || codepoint == '"') { - os.write('\\'); - } - if (codepoint < 0x80) { - os.write(codepoint); - } else if (codepoint < 0x800) { - os.write(0xc0 | (codepoint >> 6)); - os.write(0x80 | (codepoint & 0x3f)); - } else if (codepoint < 0x10000) { - os.write(0xe0 | ((codepoint >> 12))); - os.write(0x80 | ((codepoint >> 6) & 0x3f)); - os.write(0x80 | (codepoint & 0x3f)); - } else { - os.write(0xf0 | ((codepoint >> 18))); - os.write(0x80 | ((codepoint >> 12) & 0x3f)); - os.write(0x80 | ((codepoint >> 6) & 0x3f)); - os.write(0x80 | (codepoint & 0x3f)); - } - }); + .forEach(codepoint -> { + if (codepoint == '\\' || codepoint == '"') { + os.write('\\'); + } + if (codepoint < 0x80) { + os.write(codepoint); + } else if (codepoint < 0x800) { + os.write(0xc0 | (codepoint >> 6)); + os.write(0x80 | (codepoint & 0x3f)); + } else if (codepoint < 0x10000) { + os.write(0xe0 | ((codepoint >> 12))); + os.write(0x80 | ((codepoint >> 6) & 0x3f)); + os.write(0x80 | (codepoint & 0x3f)); + } else { + os.write(0xf0 | ((codepoint >> 18))); + os.write(0x80 | ((codepoint >> 12) & 0x3f)); + os.write(0x80 | ((codepoint >> 6) & 0x3f)); + os.write(0x80 | (codepoint & 0x3f)); + } + }); os.write('"'); } @@ -89,18 +88,17 @@ private static void serialize(ByteArrayOutputStream os, Map map) map.entrySet().stream() // the canonical json spec only says "keys are lexicographically sorted" .sorted((e1, e2) -> String.CASE_INSENSITIVE_ORDER.compare(e1.getKey(), e2.getKey())) - .forEach( - e -> { - if (first[0]) { - first[0] = false; - } else { - os.write(','); - } + .forEach(e -> { + if (first[0]) { + first[0] = false; + } else { + os.write(','); + } - serialize(os, e.getKey()); - os.write(':'); - serialize(os, e.getValue()); - }); + serialize(os, e.getKey()); + os.write(':'); + serialize(os, e.getValue()); + }); os.write('}'); } diff --git a/remote-config/remote-config-core/src/test/java/datadog/remoteconfig/DefaultConfigurationPollerSpecification.java b/remote-config/remote-config-core/src/test/java/datadog/remoteconfig/DefaultConfigurationPollerSpecification.java index 51922d9cbfa..a872370e857 100644 --- a/remote-config/remote-config-core/src/test/java/datadog/remoteconfig/DefaultConfigurationPollerSpecification.java +++ b/remote-config/remote-config-core/src/test/java/datadog/remoteconfig/DefaultConfigurationPollerSpecification.java @@ -1051,10 +1051,9 @@ void distributeConfigAcrossMultipleListenersForSameSubscriber() throws IOExcepti verify(listener2) .accept( any(), - cfgMatches( - cfg -> - Double.valueOf(0.1) - .equals(asMap(cfg.get("api_security")).get("request_sample_rate"))), + cfgMatches(cfg -> + Double.valueOf(0.1) + .equals(asMap(cfg.get("api_security")).get("request_sample_rate"))), any()); } @@ -1153,22 +1152,20 @@ void checkSettingOfCapabilitiesPositiveTest(String scenario, long capabilities, private void start() { when(scheduler.scheduleAtFixedRate( any(), eq(poller), eq(0L), eq((long) DEFAULT_POLL_PERIOD), eq(MILLISECONDS))) - .thenAnswer( - invocation -> { - task = invocation.getArgument(0); - return scheduled; - }); + .thenAnswer(invocation -> { + task = invocation.getArgument(0); + return scheduled; + }); poller.start(); assertNotNull(task); } private void stubHttp(Response... responses) throws IOException { when(okHttpClient.newCall(any(Request.class))) - .thenAnswer( - invocation -> { - request = invocation.getArgument(0); - return call; - }); + .thenAnswer(invocation -> { + request = invocation.getArgument(0); + return call; + }); OngoingStubbing stubbing = when(call.execute()); for (Response response : responses) { stubbing = stubbing.thenReturn(response); diff --git a/remote-config/remote-config-core/src/test/java/datadog/remoteconfig/Rcte1TestVectorsSpecification.java b/remote-config/remote-config-core/src/test/java/datadog/remoteconfig/Rcte1TestVectorsSpecification.java index 8cd8b03d3ed..9e1a35d3685 100644 --- a/remote-config/remote-config-core/src/test/java/datadog/remoteconfig/Rcte1TestVectorsSpecification.java +++ b/remote-config/remote-config-core/src/test/java/datadog/remoteconfig/Rcte1TestVectorsSpecification.java @@ -96,11 +96,10 @@ private static String bodyToString(RequestBody body) throws IOException { private void stubScheduling() { when(scheduler.scheduleAtFixedRate( any(), eq(poller), eq(0L), eq((long) DEFAULT_POLL_PERIOD), eq(TimeUnit.MILLISECONDS))) - .thenAnswer( - invocation -> { - task = invocation.getArgument(0); - return scheduled; - }); + .thenAnswer(invocation -> { + task = invocation.getArgument(0); + return scheduled; + }); } @Test @@ -118,11 +117,10 @@ void validFile() throws IOException { assertNotNull(task); when(okHttpClient.newCall(any(Request.class))) - .thenAnswer( - invocation -> { - request = invocation.getArgument(0); - return call; - }); + .thenAnswer(invocation -> { + request = invocation.getArgument(0); + return call; + }); when(call.execute()).thenReturn(buildOKResponse(getFileContents("validOneFile"))); task.run(poller); @@ -151,11 +149,10 @@ void invalidFile(String baseFileName, String message) throws IOException { assertNotNull(task); when(okHttpClient.newCall(any(Request.class))) - .thenAnswer( - invocation -> { - request = invocation.getArgument(0); - return call; - }); + .thenAnswer(invocation -> { + request = invocation.getArgument(0); + return call; + }); when(call.execute()) .thenReturn(buildOKResponse(getFileContents(baseFileName))) .thenReturn(buildOKResponse("validOneFile")); diff --git a/telemetry/src/test/java/datadog/telemetry/dependency/LocationsCollectingTransformerTest.java b/telemetry/src/test/java/datadog/telemetry/dependency/LocationsCollectingTransformerTest.java index 32cebec980f..d09da171e85 100644 --- a/telemetry/src/test/java/datadog/telemetry/dependency/LocationsCollectingTransformerTest.java +++ b/telemetry/src/test/java/datadog/telemetry/dependency/LocationsCollectingTransformerTest.java @@ -139,15 +139,14 @@ void multipleDependenciesWithConcurrency() throws Exception { List> futures = new ArrayList<>(); for (int i = 0; i < threads; i++) { futures.add( - executor.submit( - () -> { - latch.countDown(); - awaitUninterruptibly(latch); - ProtectionDomain domain; - while ((domain = domains.poll()) != null) { - mockTransformer.transform(null, null, null, domain, null); - } - })); + executor.submit(() -> { + latch.countDown(); + awaitUninterruptibly(latch); + ProtectionDomain domain; + while ((domain = domains.poll()) != null) { + mockTransformer.transform(null, null, null, domain, null); + } + })); } for (Future future : futures) { future.get(); @@ -178,14 +177,13 @@ void singleDependenciesWithConcurrency() throws Exception { List> futures = new ArrayList<>(); for (int i = 0; i < threads; i++) { futures.add( - executor.submit( - () -> { - latch.countDown(); - awaitUninterruptibly(latch); - for (int j = 0; j < iterationsPerThread; j++) { - mockTransformer.transform(null, null, null, domain, null); - } - })); + executor.submit(() -> { + latch.countDown(); + awaitUninterruptibly(latch); + for (int j = 0; j < iterationsPerThread; j++) { + mockTransformer.transform(null, null, null, domain, null); + } + })); } for (Future future : futures) { future.get(); diff --git a/utils/config-utils/src/main/java/datadog/trace/bootstrap/config/provider/stableconfig/Rule.java b/utils/config-utils/src/main/java/datadog/trace/bootstrap/config/provider/stableconfig/Rule.java index 4c62baf6069..5b697a44053 100644 --- a/utils/config-utils/src/main/java/datadog/trace/bootstrap/config/provider/stableconfig/Rule.java +++ b/utils/config-utils/src/main/java/datadog/trace/bootstrap/config/provider/stableconfig/Rule.java @@ -54,18 +54,17 @@ public static Rule from(Map map) { ((List) selectorsObj) .stream() .filter(Objects::nonNull) - .map( - s -> { - if (!(s instanceof Map)) { - throwStableConfigMappingException( - "Each selector must be a map, but got: " - + s.getClass().getSimpleName() - + ": ", - s); - } + .map(s -> { + if (!(s instanceof Map)) { + throwStableConfigMappingException( + "Each selector must be a map, but got: " + + s.getClass().getSimpleName() + + ": ", + s); + } - return Selector.from((Map) s); - }) + return Selector.from((Map) s); + }) .collect(toList()); return new Rule(unmodifiableList(selectors), (Map) configObj); diff --git a/utils/config-utils/src/test/java/datadog/trace/bootstrap/config/provider/StableConfigSourceTest.java b/utils/config-utils/src/test/java/datadog/trace/bootstrap/config/provider/StableConfigSourceTest.java index 8ca3989ba7f..9ef94e72e99 100644 --- a/utils/config-utils/src/test/java/datadog/trace/bootstrap/config/provider/StableConfigSourceTest.java +++ b/utils/config-utils/src/test/java/datadog/trace/bootstrap/config/provider/StableConfigSourceTest.java @@ -141,10 +141,9 @@ void testParseInvalidLogsMappingErrors(String yaml, String expectedLogSubstring) assertEquals(0, stableCfg.getKeys().size()); boolean hasExpectedLog = listAppender.list.stream() - .anyMatch( - event -> - "WARN".equals(event.getLevel().toString()) - && event.getFormattedMessage().contains(expectedLogSubstring)); + .anyMatch(event -> + "WARN".equals(event.getLevel().toString()) + && event.getFormattedMessage().contains(expectedLogSubstring)); assertTrue(hasExpectedLog, "Expected WARN log containing: " + expectedLogSubstring); } finally { tempFile.delete(); diff --git a/utils/socket-utils/src/test/java/datadog/common/socket/TunnelingJdkSocketTest.java b/utils/socket-utils/src/test/java/datadog/common/socket/TunnelingJdkSocketTest.java index ac0757b4e64..82498ef40f2 100644 --- a/utils/socket-utils/src/test/java/datadog/common/socket/TunnelingJdkSocketTest.java +++ b/utils/socket-utils/src/test/java/datadog/common/socket/TunnelingJdkSocketTest.java @@ -383,23 +383,21 @@ public void testCloseInterruptsWriteWhileInputStreamIsBeingCreated() throws Exce OutputStream output = clientSocket.getOutputStream(); CountDownLatch writing = new CountDownLatch(1); Future writer = - executor.submit( - () -> { - writing.countDown(); - // The server accepts but does not read, so this exceeds the socket's send buffer. - output.write(new byte[1024 * 1024]); - return null; - }); + executor.submit(() -> { + writing.countDown(); + // The server accepts but does not read, so this exceeds the socket's send buffer. + output.write(new byte[1024 * 1024]); + return null; + }); assertTrue(writing.await(5, TimeUnit.SECONDS)); assertThrows(TimeoutException.class, () -> writer.get(100, TimeUnit.MILLISECONDS)); AtomicReference inputThread = new AtomicReference<>(); Future input = - executor.submit( - () -> { - inputThread.set(Thread.currentThread()); - return clientSocket.getInputStream(); - }); + executor.submit(() -> { + inputThread.set(Thread.currentThread()); + return clientSocket.getInputStream(); + }); // Wait until input setup is waiting for the channel's blocked writer before closing. assertTimeoutPreemptively( Duration.ofSeconds(5), diff --git a/utils/test-junit-utils/src/main/java/datadog/trace/test/junit/utils/config/WithConfigExtension.java b/utils/test-junit-utils/src/main/java/datadog/trace/test/junit/utils/config/WithConfigExtension.java index 0e8857a9f4d..193cbbf9c44 100644 --- a/utils/test-junit-utils/src/main/java/datadog/trace/test/junit/utils/config/WithConfigExtension.java +++ b/utils/test-junit-utils/src/main/java/datadog/trace/test/junit/utils/config/WithConfigExtension.java @@ -126,14 +126,13 @@ private static void applyMethodLevelConfig(ExtensionContext context) { // Method-level @WithConfig annotations (supports composed/meta-annotations) context .getTestMethod() - .ifPresent( - method -> { - List methodConfigs = - AnnotationSupport.findRepeatableAnnotations(method, WithConfig.class); - for (WithConfig cfg : methodConfigs) { - applyConfig(cfg); - } - }); + .ifPresent(method -> { + List methodConfigs = + AnnotationSupport.findRepeatableAnnotations(method, WithConfig.class); + for (WithConfig cfg : methodConfigs) { + applyConfig(cfg); + } + }); } private static void applyConfig(WithConfig cfg) { diff --git a/utils/test-utils/src/main/java/datadog/trace/test/util/AssertionsUtils.java b/utils/test-utils/src/main/java/datadog/trace/test/util/AssertionsUtils.java index d846b61bcc3..a38c96a9b0b 100644 --- a/utils/test-utils/src/main/java/datadog/trace/test/util/AssertionsUtils.java +++ b/utils/test-utils/src/main/java/datadog/trace/test/util/AssertionsUtils.java @@ -10,11 +10,10 @@ private AssertionsUtils() { } public static void assertMapContainsKeyValues(Map actual, Map expectedSubset) { - expectedSubset.forEach( - (k, v) -> - assertEquals( - v, - actual.get(k), - () -> "Mismatch for key [" + k + "]: expected=" + v + ", actual=" + actual.get(k))); + expectedSubset.forEach((k, v) -> + assertEquals( + v, + actual.get(k), + () -> "Mismatch for key [" + k + "]: expected=" + v + ", actual=" + actual.get(k))); } } diff --git a/utils/test-utils/src/main/java/datadog/trace/test/util/DDJavaSpecification.java b/utils/test-utils/src/main/java/datadog/trace/test/util/DDJavaSpecification.java index d4780e89098..b6d646dd6ce 100644 --- a/utils/test-utils/src/main/java/datadog/trace/test/util/DDJavaSpecification.java +++ b/utils/test-utils/src/main/java/datadog/trace/test/util/DDJavaSpecification.java @@ -49,11 +49,10 @@ void cleanup() { static Set getDDThreads() { return Thread.getAllStackTraces().keySet().stream() - .filter( - t -> - t.getName().startsWith("dd-") - && !t.getName().equals("dd-task-scheduler") - && !t.getName().equals("dd-cassandra-session-executor")) + .filter(t -> + t.getName().startsWith("dd-") + && !t.getName().equals("dd-task-scheduler") + && !t.getName().equals("dd-cassandra-session-executor")) .collect(Collectors.toSet()); } diff --git a/utils/test-utils/src/main/java/datadog/trace/test/util/ThreadUtils.java b/utils/test-utils/src/main/java/datadog/trace/test/util/ThreadUtils.java index 8439c2c038a..78914ac73b6 100644 --- a/utils/test-utils/src/main/java/datadog/trace/test/util/ThreadUtils.java +++ b/utils/test-utils/src/main/java/datadog/trace/test/util/ThreadUtils.java @@ -78,28 +78,27 @@ public static boolean runConcurrently( final CountDownLatch endBarrier = new CountDownLatch(poolSize + 1); for (int i = 0; i < poolSize; i++) { final int invocations = each + (remainder <= 0 ? 0 : 1); - executor.execute( - () -> { + executor.execute(() -> { + try { + startBarrier.countDown(); + startBarrier.await(); + for (int c = 0; c < invocations && throwable.get() == null; c++) { try { - startBarrier.countDown(); - startBarrier.await(); - for (int c = 0; c < invocations && throwable.get() == null; c++) { - try { - closure.call(); - } catch (Throwable t) { - throwable.compareAndSet(null, t); - } - } + closure.call(); } catch (Throwable t) { throwable.compareAndSet(null, t); - } finally { - try { - endBarrier.countDown(); - } catch (Throwable t) { - throwable.compareAndSet(null, t); - } } - }); + } + } catch (Throwable t) { + throwable.compareAndSet(null, t); + } finally { + try { + endBarrier.countDown(); + } catch (Throwable t) { + throwable.compareAndSet(null, t); + } + } + }); remainder--; } startBarrier.countDown(); diff --git a/utils/test-utils/src/test/java/datadog/trace/test/util/PollingConditionsTest.java b/utils/test-utils/src/test/java/datadog/trace/test/util/PollingConditionsTest.java index 64ea4c5fe7e..20306f03e89 100644 --- a/utils/test-utils/src/test/java/datadog/trace/test/util/PollingConditionsTest.java +++ b/utils/test-utils/src/test/java/datadog/trace/test/util/PollingConditionsTest.java @@ -27,12 +27,11 @@ void succeedsAfterSeveralRetries() { AtomicInteger attempts = new AtomicInteger(); new PollingConditions(2) .delay(0.01) - .eventually( - () -> { - if (attempts.incrementAndGet() < 5) { - fail("not yet"); - } - }); + .eventually(() -> { + if (attempts.incrementAndGet() < 5) { + fail("not yet"); + } + }); assertEquals(5, attempts.get()); } @@ -71,12 +70,11 @@ void retriesWhenConditionThrowsCheckedException() { AtomicInteger attempts = new AtomicInteger(); new PollingConditions(2) .delay(0.01) - .eventually( - () -> { - if (attempts.incrementAndGet() < 3) { - throw new IOException("not ready"); - } - }); + .eventually(() -> { + if (attempts.incrementAndGet() < 3) { + throw new IOException("not ready"); + } + }); assertEquals(3, attempts.get()); } @@ -89,12 +87,11 @@ void factorMultipliesDelayBetweenAttempts() { conditions.delay(0.02).factor(4); // 20ms base delay, multiplied by 4 after each attempt AtomicInteger attempts = new AtomicInteger(); - conditions.eventually( - () -> { - if (attempts.incrementAndGet() < 4) { - fail("not yet"); - } - }); + conditions.eventually(() -> { + if (attempts.incrementAndGet() < 4) { + fail("not yet"); + } + }); assertEquals(4, attempts.get()); // Three failed attempts -> three delays, each 4x the previous.