From 15c6f45ddeb6259d1366ba08f3f56cf0b7c04b3a Mon Sep 17 00:00:00 2001
From: Pavol Loffay
Date: Tue, 12 Jan 2021 15:53:18 +0100
Subject: [PATCH 1/8] Add tests for Micronaut (via Netty)
Signed-off-by: Pavol Loffay
---
README.md | 1 +
.../micronaut-1.0/build.gradle.kts | 24 ++
.../MicronautInstrumentationTest.java | 205 ++++++++++++++++++
.../hypertrace/micronaut/TestController.java | 64 ++++++
...tractNetty40ServerInstrumentationTest.java | 27 ---
...tractNetty41ServerInstrumentationTest.java | 27 ---
.../vertx-web-3.0/build.gradle.kts | 6 +-
settings.gradle.kts | 2 +
.../testing/AbstractInstrumenterTest.java | 32 +++
9 files changed, 330 insertions(+), 58 deletions(-)
create mode 100644 instrumentation/micronaut-1.0/build.gradle.kts
create mode 100644 instrumentation/micronaut-1.0/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/micronaut/MicronautInstrumentationTest.java
create mode 100644 instrumentation/micronaut-1.0/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/micronaut/TestController.java
diff --git a/README.md b/README.md
index f49966136..a1176a435 100644
--- a/README.md
+++ b/README.md
@@ -18,6 +18,7 @@ List of supported frameworks with additional capabilities:
| [Apache HttpClient](https://hc.apache.org/index.html) | 4.0+ |
| [gRPC](https://github.com/grpc/grpc-java) | 1.5+ |
| [JAX-RS Client](https://javaee.github.io/javaee-spec/javadocs/javax/ws/rs/client/package-summary.html) | 2.0+ |
+| [Micronaut](https://micronaut.io/) (via Netty and only server) | 1.0+ |
| [Netty](https://github.com/netty/netty) (only server) | 4.0+ |
| [OkHttp](https://github.com/square/okhttp/) | 3.0+ |
| [Servlet](https://javaee.github.io/javaee-spec/javadocs/javax/servlet/package-summary.html) | 2.3+ |
diff --git a/instrumentation/micronaut-1.0/build.gradle.kts b/instrumentation/micronaut-1.0/build.gradle.kts
new file mode 100644
index 000000000..b49736376
--- /dev/null
+++ b/instrumentation/micronaut-1.0/build.gradle.kts
@@ -0,0 +1,24 @@
+plugins {
+ `java-library`
+}
+
+val versions: Map by extra
+
+//version += mapOf("micronaut_version" to "1.0.0")
+
+dependencies {
+ testImplementation(project(":testing-common"))
+ testImplementation(project(":instrumentation:netty:netty-4.1"))
+
+ testImplementation("io.opentelemetry.javaagent.instrumentation:opentelemetry-javaagent-netty-4.1:${versions["opentelemetry_java_agent"]}")
+
+ testImplementation("io.micronaut.test:micronaut-test-junit5:1.1.0")
+ testImplementation("io.micronaut:micronaut-http-server-netty:1.1.0")
+ testImplementation("io.micronaut:micronaut-http-client:1.1.0")
+ testImplementation("io.micronaut:micronaut-runtime:1.1.0")
+// testImplementation("io.micronaut:micronaut-validation:1.1.0")
+ testImplementation("io.micronaut:micronaut-inject:1.1.0")
+
+ testAnnotationProcessor("io.micronaut:micronaut-inject-java:1.1.0")
+// testAnnotationProcessor("io.micronaut:micronaut-validation:1.1.0")
+}
diff --git a/instrumentation/micronaut-1.0/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/micronaut/MicronautInstrumentationTest.java b/instrumentation/micronaut-1.0/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/micronaut/MicronautInstrumentationTest.java
new file mode 100644
index 000000000..8ab9fbefa
--- /dev/null
+++ b/instrumentation/micronaut-1.0/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/micronaut/MicronautInstrumentationTest.java
@@ -0,0 +1,205 @@
+/*
+ * Copyright The Hypertrace Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package io.opentelemetry.javaagent.instrumentation.hypertrace.micronaut;
+
+import io.micronaut.runtime.server.EmbeddedServer;
+import io.micronaut.test.annotation.MicronautTest;
+import io.opentelemetry.sdk.trace.data.SpanData;
+import java.io.IOException;
+import java.util.List;
+import java.util.concurrent.TimeoutException;
+import javax.inject.Inject;
+import okhttp3.Request;
+import okhttp3.RequestBody;
+import okhttp3.Response;
+import okio.Buffer;
+import org.hypertrace.agent.core.instrumentation.HypertraceSemanticAttributes;
+import org.hypertrace.agent.testing.AbstractInstrumenterTest;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+@MicronautTest
+public class MicronautInstrumentationTest extends AbstractInstrumenterTest {
+
+ public static final String REQUEST_HEADER_NAME = "reqheader";
+ public static final String REQUEST_HEADER_VALUE = "reqheadervalue";
+
+ @Inject EmbeddedServer server;
+
+ @Test
+ public void get() throws IOException, TimeoutException, InterruptedException {
+ Request request =
+ new Request.Builder()
+ .url(String.format("http://localhost:%d/get_no_content", server.getPort()))
+ .header(REQUEST_HEADER_NAME, REQUEST_HEADER_VALUE)
+ .get()
+ .build();
+
+ try (Response response = httpClient.newCall(request).execute()) {
+ Assertions.assertEquals(204, response.code());
+ }
+
+ List> traces = TEST_WRITER.getTraces();
+ TEST_WRITER.waitForTraces(1);
+ Assertions.assertEquals(1, traces.size());
+ List trace = traces.get(0);
+ Assertions.assertEquals(1, trace.size());
+ SpanData spanData = trace.get(0);
+
+ Assertions.assertEquals(
+ REQUEST_HEADER_VALUE,
+ spanData
+ .getAttributes()
+ .get(HypertraceSemanticAttributes.httpRequestHeader(REQUEST_HEADER_NAME)));
+ Assertions.assertEquals(
+ TestController.RESPONSE_HEADER_VALUE,
+ spanData
+ .getAttributes()
+ .get(
+ HypertraceSemanticAttributes.httpResponseHeader(
+ TestController.RESPONSE_HEADER_NAME)));
+ Assertions.assertNull(
+ spanData.getAttributes().get(HypertraceSemanticAttributes.HTTP_REQUEST_BODY));
+ Assertions.assertNull(
+ spanData.getAttributes().get(HypertraceSemanticAttributes.HTTP_RESPONSE_BODY));
+ }
+
+ @Test
+ public void postJson() throws IOException, TimeoutException, InterruptedException {
+ RequestBody requestBody = requestBody(true, 3000, 75);
+ Request request =
+ new Request.Builder()
+ .url(String.format("http://localhost:%d/post", server.getPort()))
+ .header(REQUEST_HEADER_NAME, REQUEST_HEADER_VALUE)
+ .header("Transfer-Encoding", "chunked")
+ .post(requestBody)
+ .build();
+
+ try (Response response = httpClient.newCall(request).execute()) {
+ Assertions.assertEquals(200, response.code());
+ Buffer requestBodyBuffer = new Buffer();
+ requestBody.writeTo(requestBodyBuffer);
+ Assertions.assertEquals(
+ new String(requestBodyBuffer.readByteArray()), response.body().string());
+ }
+
+ List> traces = TEST_WRITER.getTraces();
+ TEST_WRITER.waitForTraces(1);
+ Assertions.assertEquals(1, traces.size());
+ List trace = traces.get(0);
+ Assertions.assertEquals(1, trace.size());
+ SpanData spanData = trace.get(0);
+
+ Assertions.assertEquals(
+ REQUEST_HEADER_VALUE,
+ spanData
+ .getAttributes()
+ .get(HypertraceSemanticAttributes.httpRequestHeader(REQUEST_HEADER_NAME)));
+ Assertions.assertEquals(
+ TestController.RESPONSE_HEADER_VALUE,
+ spanData
+ .getAttributes()
+ .get(
+ HypertraceSemanticAttributes.httpResponseHeader(
+ TestController.RESPONSE_HEADER_NAME)));
+ Buffer requestBodyBuffer = new Buffer();
+ requestBody.writeTo(requestBodyBuffer);
+ Assertions.assertEquals(
+ new String(requestBodyBuffer.readByteArray()),
+ spanData.getAttributes().get(HypertraceSemanticAttributes.HTTP_REQUEST_BODY));
+ // Buffer responseBodyBuffer = new Buffer();
+ // requestBody.writeTo(responseBodyBuffer);
+ // Assertions.assertEquals(
+ // new String(responseBodyBuffer.readByteArray()),
+ // spanData.getAttributes().get(HypertraceSemanticAttributes.HTTP_RESPONSE_BODY));
+ }
+
+ @Test
+ public void stream() throws IOException, TimeoutException, InterruptedException {
+ Request request =
+ new Request.Builder()
+ .url(String.format("http://localhost:%d/stream", server.getPort()))
+ .header(REQUEST_HEADER_NAME, REQUEST_HEADER_VALUE)
+ .get()
+ .build();
+
+ StringBuilder responseBody = new StringBuilder();
+ for (String body : TestController.streamBody()) {
+ responseBody.append(body);
+ }
+
+ try (Response response = httpClient.newCall(request).execute()) {
+ Assertions.assertEquals(200, response.code());
+ Assertions.assertEquals(responseBody.toString(), response.body().string());
+ }
+
+ List> traces = TEST_WRITER.getTraces();
+ TEST_WRITER.waitForTraces(1);
+ Assertions.assertEquals(1, traces.size());
+ List trace = traces.get(0);
+ Assertions.assertEquals(1, trace.size());
+ SpanData spanData = trace.get(0);
+
+ Assertions.assertEquals(
+ REQUEST_HEADER_VALUE,
+ spanData
+ .getAttributes()
+ .get(HypertraceSemanticAttributes.httpRequestHeader(REQUEST_HEADER_NAME)));
+ Assertions.assertNull(
+ spanData.getAttributes().get(HypertraceSemanticAttributes.HTTP_REQUEST_BODY));
+ Assertions.assertEquals(
+ responseBody.toString(),
+ spanData.getAttributes().get(HypertraceSemanticAttributes.HTTP_RESPONSE_BODY));
+ }
+
+ @Test
+ public void blocking() throws IOException, TimeoutException, InterruptedException {
+ Request request =
+ new Request.Builder()
+ .url(String.format("http://localhost:%d/post", server.getPort()))
+ .header(REQUEST_HEADER_NAME, REQUEST_HEADER_VALUE)
+ .header("mockblock", "true")
+ .get()
+ .build();
+
+ try (Response response = httpClient.newCall(request).execute()) {
+ Assertions.assertEquals(403, response.code());
+ Assertions.assertTrue(response.body().string().isEmpty());
+ }
+
+ List> traces = TEST_WRITER.getTraces();
+ TEST_WRITER.waitForTraces(1);
+ Assertions.assertEquals(1, traces.size());
+ List trace = traces.get(0);
+ Assertions.assertEquals(1, trace.size());
+ SpanData spanData = trace.get(0);
+
+ Assertions.assertEquals(
+ REQUEST_HEADER_VALUE,
+ spanData
+ .getAttributes()
+ .get(HypertraceSemanticAttributes.httpRequestHeader(REQUEST_HEADER_NAME)));
+ Assertions.assertNull(
+ spanData
+ .getAttributes()
+ .get(
+ HypertraceSemanticAttributes.httpResponseHeader(
+ TestController.RESPONSE_HEADER_NAME)));
+ Assertions.assertNull(
+ spanData.getAttributes().get(HypertraceSemanticAttributes.HTTP_RESPONSE_BODY));
+ }
+}
diff --git a/instrumentation/micronaut-1.0/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/micronaut/TestController.java b/instrumentation/micronaut-1.0/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/micronaut/TestController.java
new file mode 100644
index 000000000..e74b91bc5
--- /dev/null
+++ b/instrumentation/micronaut-1.0/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/micronaut/TestController.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright The Hypertrace Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package io.opentelemetry.javaagent.instrumentation.hypertrace.micronaut;
+
+import io.micronaut.http.HttpResponse;
+import io.micronaut.http.HttpStatus;
+import io.micronaut.http.MediaType;
+import io.micronaut.http.annotation.Body;
+import io.micronaut.http.annotation.Controller;
+import io.micronaut.http.annotation.Get;
+import io.micronaut.http.annotation.Post;
+import io.reactivex.Flowable;
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.List;
+
+@Controller("/")
+public class TestController {
+
+ static final String RESPONSE_HEADER_NAME = "reqheadername";
+ static final String RESPONSE_HEADER_VALUE = "reqheadervalue";
+
+ @Get(uri = "/get_no_content")
+ public HttpResponse> hello() {
+ return HttpResponse.status(HttpStatus.NO_CONTENT)
+ .header(RESPONSE_HEADER_NAME, RESPONSE_HEADER_VALUE);
+ }
+
+ @Post(uri = "/post")
+ public HttpResponse> savePerson(@Body String body) {
+ return HttpResponse.status(HttpStatus.OK)
+ .header(RESPONSE_HEADER_NAME, RESPONSE_HEADER_VALUE)
+ .characterEncoding(StandardCharsets.UTF_8)
+ .contentType(MediaType.APPLICATION_JSON)
+ .body(body);
+ }
+
+ @Get(value = "/stream", produces = MediaType.APPLICATION_JSON_STREAM)
+ public Flowable stream() {
+ return Flowable.fromIterable(streamBody());
+ }
+
+ static List streamBody() {
+ List entities = new ArrayList<>();
+ for (int i = 0; i < 1000; i++) {
+ entities.add(String.format("dog=%d\n", i));
+ }
+ return entities;
+ }
+}
diff --git a/instrumentation/netty/netty-4.0/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_0/AbstractNetty40ServerInstrumentationTest.java b/instrumentation/netty/netty-4.0/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_0/AbstractNetty40ServerInstrumentationTest.java
index fe9d0923e..f413d1b7e 100644
--- a/instrumentation/netty/netty-4.0/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_0/AbstractNetty40ServerInstrumentationTest.java
+++ b/instrumentation/netty/netty-4.0/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_0/AbstractNetty40ServerInstrumentationTest.java
@@ -22,16 +22,13 @@
import io.opentelemetry.sdk.trace.data.SpanData;
import java.io.IOException;
-import java.util.Arrays;
import java.util.List;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeoutException;
-import okhttp3.MediaType;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
import okio.Buffer;
-import okio.BufferedSink;
import org.hypertrace.agent.core.instrumentation.HypertraceSemanticAttributes;
import org.hypertrace.agent.testing.AbstractInstrumenterTest;
import org.junit.jupiter.api.AfterEach;
@@ -175,28 +172,4 @@ public void blocking() throws IOException, TimeoutException, InterruptedExceptio
.getAttributes()
.get(HypertraceSemanticAttributes.httpResponseHeader(RESPONSE_BODY)));
}
-
- private RequestBody requestBody(final boolean chunked, final long size, final int writeSize) {
- final byte[] buffer = new byte[writeSize];
- Arrays.fill(buffer, (byte) 'x');
-
- return new RequestBody() {
- @Override
- public MediaType contentType() {
- return MediaType.get("application/json; charset=utf-8");
- }
-
- @Override
- public long contentLength() throws IOException {
- return chunked ? -1L : size;
- }
-
- @Override
- public void writeTo(BufferedSink sink) throws IOException {
- for (int count = 0; count < size; count += writeSize) {
- sink.write(buffer, 0, (int) Math.min(size - count, writeSize));
- }
- }
- };
- }
}
diff --git a/instrumentation/netty/netty-4.1/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_1/AbstractNetty41ServerInstrumentationTest.java b/instrumentation/netty/netty-4.1/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_1/AbstractNetty41ServerInstrumentationTest.java
index dd8787722..733df202c 100644
--- a/instrumentation/netty/netty-4.1/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_1/AbstractNetty41ServerInstrumentationTest.java
+++ b/instrumentation/netty/netty-4.1/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_1/AbstractNetty41ServerInstrumentationTest.java
@@ -22,16 +22,13 @@
import io.opentelemetry.sdk.trace.data.SpanData;
import java.io.IOException;
-import java.util.Arrays;
import java.util.List;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeoutException;
-import okhttp3.MediaType;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
import okio.Buffer;
-import okio.BufferedSink;
import org.hypertrace.agent.core.instrumentation.HypertraceSemanticAttributes;
import org.hypertrace.agent.testing.AbstractInstrumenterTest;
import org.junit.jupiter.api.AfterEach;
@@ -175,28 +172,4 @@ public void blocking() throws IOException, TimeoutException, InterruptedExceptio
.getAttributes()
.get(HypertraceSemanticAttributes.httpResponseHeader(RESPONSE_BODY)));
}
-
- private RequestBody requestBody(final boolean chunked, final long size, final int writeSize) {
- final byte[] buffer = new byte[writeSize];
- Arrays.fill(buffer, (byte) 'x');
-
- return new RequestBody() {
- @Override
- public MediaType contentType() {
- return MediaType.get("application/json; charset=utf-8");
- }
-
- @Override
- public long contentLength() throws IOException {
- return chunked ? -1L : size;
- }
-
- @Override
- public void writeTo(BufferedSink sink) throws IOException {
- for (int count = 0; count < size; count += writeSize) {
- sink.write(buffer, 0, (int) Math.min(size - count, writeSize));
- }
- }
- };
- }
}
diff --git a/instrumentation/vertx-web-3.0/build.gradle.kts b/instrumentation/vertx-web-3.0/build.gradle.kts
index 2d8c6ff76..cdb43b739 100644
--- a/instrumentation/vertx-web-3.0/build.gradle.kts
+++ b/instrumentation/vertx-web-3.0/build.gradle.kts
@@ -24,12 +24,10 @@ afterEvaluate{
val versions: Map by extra
dependencies {
- api("io.opentelemetry.javaagent.instrumentation:opentelemetry-javaagent-vertx-web-3.0:${versions["opentelemetry_java_agent"]}")
-
- implementation("io.vertx:vertx-web:3.0.0")
-
testImplementation(project(":testing-common"))
testImplementation(project(":instrumentation:netty:netty-4.0"))
testImplementation("io.opentelemetry.javaagent.instrumentation:opentelemetry-javaagent-netty-4.0:${versions["opentelemetry_java_agent"]}")
+ testImplementation("io.opentelemetry.javaagent.instrumentation:opentelemetry-javaagent-vertx-web-3.0:${versions["opentelemetry_java_agent"]}")
+ testImplementation("io.vertx:vertx-web:3.0.0")
}
diff --git a/settings.gradle.kts b/settings.gradle.kts
index 66eb8415a..607d04683 100644
--- a/settings.gradle.kts
+++ b/settings.gradle.kts
@@ -53,3 +53,5 @@ include("instrumentation:netty:netty-4.1")
findProject(":instrumentation:netty:netty-4.1")?.name = "netty-4.1"
include("instrumentation:spring:spring-webflux-5.0")
findProject(":instrumentation:spring:spring-webflux-5.0")?.name = "spring-webflux-5.0"
+include("instrumentation:micronaut-1.0")
+findProject(":instrumentation:micronaut-1.0")?.name = "micronaut-1.0"
diff --git a/testing-common/src/main/java/org/hypertrace/agent/testing/AbstractInstrumenterTest.java b/testing-common/src/main/java/org/hypertrace/agent/testing/AbstractInstrumenterTest.java
index ca837aba7..ce699709c 100644
--- a/testing-common/src/main/java/org/hypertrace/agent/testing/AbstractInstrumenterTest.java
+++ b/testing-common/src/main/java/org/hypertrace/agent/testing/AbstractInstrumenterTest.java
@@ -24,12 +24,17 @@
import io.opentelemetry.javaagent.tooling.AgentInstaller;
import io.opentelemetry.javaagent.tooling.config.ConfigInitializer;
import io.opentelemetry.sdk.OpenTelemetrySdk;
+import java.io.IOException;
import java.lang.instrument.ClassFileTransformer;
import java.lang.instrument.Instrumentation;
+import java.util.Arrays;
import java.util.Collections;
import java.util.concurrent.TimeUnit;
import net.bytebuddy.agent.ByteBuddyAgent;
+import okhttp3.MediaType;
import okhttp3.OkHttpClient;
+import okhttp3.RequestBody;
+import okio.BufferedSink;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.slf4j.LoggerFactory;
@@ -96,4 +101,31 @@ public static void beforeAll() {
public void beforeEach() {
TEST_WRITER.clear();
}
+
+ public static RequestBody requestBody(
+ final boolean chunked, final long size, final int writeSize) {
+ final byte[] buffer = new byte[writeSize];
+ Arrays.fill(buffer, (byte) 'x');
+
+ return new RequestBody() {
+ @Override
+ public MediaType contentType() {
+ return MediaType.get("application/json; charset=utf-8");
+ }
+
+ @Override
+ public long contentLength() throws IOException {
+ return chunked ? -1L : size;
+ }
+
+ @Override
+ public void writeTo(BufferedSink sink) throws IOException {
+ sink.write("{\"body\":\"".getBytes());
+ for (int count = 0; count < size; count += writeSize) {
+ sink.write(buffer, 0, (int) Math.min(size - count, writeSize));
+ }
+ sink.write("\"}".getBytes());
+ }
+ };
+ }
}
From e6690c1d13c14c04513f80a6b180d6498ca35f2e Mon Sep 17 00:00:00 2001
From: Pavol Loffay
Date: Tue, 12 Jan 2021 15:59:25 +0100
Subject: [PATCH 2/8] Use old version
Signed-off-by: Pavol Loffay
---
instrumentation/micronaut-1.0/build.gradle.kts | 15 ++++++---------
1 file changed, 6 insertions(+), 9 deletions(-)
diff --git a/instrumentation/micronaut-1.0/build.gradle.kts b/instrumentation/micronaut-1.0/build.gradle.kts
index b49736376..e2db7d87a 100644
--- a/instrumentation/micronaut-1.0/build.gradle.kts
+++ b/instrumentation/micronaut-1.0/build.gradle.kts
@@ -4,7 +4,7 @@ plugins {
val versions: Map by extra
-//version += mapOf("micronaut_version" to "1.0.0")
+val micronautVersion = "1.0.0"
dependencies {
testImplementation(project(":testing-common"))
@@ -12,13 +12,10 @@ dependencies {
testImplementation("io.opentelemetry.javaagent.instrumentation:opentelemetry-javaagent-netty-4.1:${versions["opentelemetry_java_agent"]}")
- testImplementation("io.micronaut.test:micronaut-test-junit5:1.1.0")
- testImplementation("io.micronaut:micronaut-http-server-netty:1.1.0")
- testImplementation("io.micronaut:micronaut-http-client:1.1.0")
- testImplementation("io.micronaut:micronaut-runtime:1.1.0")
-// testImplementation("io.micronaut:micronaut-validation:1.1.0")
- testImplementation("io.micronaut:micronaut-inject:1.1.0")
+ testImplementation("io.micronaut.test:micronaut-test-junit5:${micronautVersion}")
+ testImplementation("io.micronaut:micronaut-http-server-netty:${micronautVersion}")
+ testImplementation("io.micronaut:micronaut-runtime:${micronautVersion}")
+ testImplementation("io.micronaut:micronaut-inject:${micronautVersion}")
- testAnnotationProcessor("io.micronaut:micronaut-inject-java:1.1.0")
-// testAnnotationProcessor("io.micronaut:micronaut-validation:1.1.0")
+ testAnnotationProcessor("io.micronaut:micronaut-inject-java:${micronautVersion}")
}
From 80b2f287815d0a0538f573c3992edc31d3442c3d Mon Sep 17 00:00:00 2001
From: Pavol Loffay
Date: Tue, 12 Jan 2021 16:15:54 +0100
Subject: [PATCH 3/8] small changes
Signed-off-by: Pavol Loffay
---
instrumentation/micronaut-1.0/build.gradle.kts | 3 ++-
.../micronaut/MicronautInstrumentationTest.java | 11 ++++++-----
.../hypertrace/micronaut/TestController.java | 6 +++---
3 files changed, 11 insertions(+), 9 deletions(-)
diff --git a/instrumentation/micronaut-1.0/build.gradle.kts b/instrumentation/micronaut-1.0/build.gradle.kts
index e2db7d87a..b6850d48f 100644
--- a/instrumentation/micronaut-1.0/build.gradle.kts
+++ b/instrumentation/micronaut-1.0/build.gradle.kts
@@ -5,6 +5,7 @@ plugins {
val versions: Map by extra
val micronautVersion = "1.0.0"
+val micronautTestVersion = "2.3.1"
dependencies {
testImplementation(project(":testing-common"))
@@ -12,7 +13,7 @@ dependencies {
testImplementation("io.opentelemetry.javaagent.instrumentation:opentelemetry-javaagent-netty-4.1:${versions["opentelemetry_java_agent"]}")
- testImplementation("io.micronaut.test:micronaut-test-junit5:${micronautVersion}")
+ testImplementation("io.micronaut.test:micronaut-test-junit5:${micronautTestVersion}")
testImplementation("io.micronaut:micronaut-http-server-netty:${micronautVersion}")
testImplementation("io.micronaut:micronaut-runtime:${micronautVersion}")
testImplementation("io.micronaut:micronaut-inject:${micronautVersion}")
diff --git a/instrumentation/micronaut-1.0/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/micronaut/MicronautInstrumentationTest.java b/instrumentation/micronaut-1.0/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/micronaut/MicronautInstrumentationTest.java
index 8ab9fbefa..c890ebd54 100644
--- a/instrumentation/micronaut-1.0/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/micronaut/MicronautInstrumentationTest.java
+++ b/instrumentation/micronaut-1.0/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/micronaut/MicronautInstrumentationTest.java
@@ -121,11 +121,12 @@ public void postJson() throws IOException, TimeoutException, InterruptedExceptio
Assertions.assertEquals(
new String(requestBodyBuffer.readByteArray()),
spanData.getAttributes().get(HypertraceSemanticAttributes.HTTP_REQUEST_BODY));
- // Buffer responseBodyBuffer = new Buffer();
- // requestBody.writeTo(responseBodyBuffer);
- // Assertions.assertEquals(
- // new String(responseBodyBuffer.readByteArray()),
- // spanData.getAttributes().get(HypertraceSemanticAttributes.HTTP_RESPONSE_BODY));
+ // TODO seems like a wrong charset
+ // Buffer responseBodyBuffer = new Buffer();
+ // requestBody.writeTo(responseBodyBuffer);
+ // Assertions.assertEquals(
+ // new String(responseBodyBuffer.readByteArray()),
+ // spanData.getAttributes().get(HypertraceSemanticAttributes.HTTP_RESPONSE_BODY));
}
@Test
diff --git a/instrumentation/micronaut-1.0/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/micronaut/TestController.java b/instrumentation/micronaut-1.0/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/micronaut/TestController.java
index e74b91bc5..c6e925be5 100644
--- a/instrumentation/micronaut-1.0/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/micronaut/TestController.java
+++ b/instrumentation/micronaut-1.0/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/micronaut/TestController.java
@@ -35,16 +35,16 @@ public class TestController {
static final String RESPONSE_HEADER_VALUE = "reqheadervalue";
@Get(uri = "/get_no_content")
- public HttpResponse> hello() {
+ public HttpResponse> getNoContent() {
return HttpResponse.status(HttpStatus.NO_CONTENT)
.header(RESPONSE_HEADER_NAME, RESPONSE_HEADER_VALUE);
}
@Post(uri = "/post")
- public HttpResponse> savePerson(@Body String body) {
+ public HttpResponse> post(@Body String body) {
return HttpResponse.status(HttpStatus.OK)
.header(RESPONSE_HEADER_NAME, RESPONSE_HEADER_VALUE)
- .characterEncoding(StandardCharsets.UTF_8)
+ .characterEncoding(StandardCharsets.US_ASCII)
.contentType(MediaType.APPLICATION_JSON)
.body(body);
}
From ec7f6c4de26ed6f5c3ac8b29fae280dbcf2984d9 Mon Sep 17 00:00:00 2001
From: Pavol Loffay
Date: Tue, 12 Jan 2021 18:05:15 +0100
Subject: [PATCH 4/8] Fix tests
Signed-off-by: Pavol Loffay
---
.../micronaut-1.0/build.gradle.kts | 51 +++++++++++++++++--
.../MicronautInstrumentationTest.java | 22 ++++----
.../hypertrace/micronaut/TestController.java | 8 ++-
3 files changed, 63 insertions(+), 18 deletions(-)
diff --git a/instrumentation/micronaut-1.0/build.gradle.kts b/instrumentation/micronaut-1.0/build.gradle.kts
index b6850d48f..c2357a233 100644
--- a/instrumentation/micronaut-1.0/build.gradle.kts
+++ b/instrumentation/micronaut-1.0/build.gradle.kts
@@ -5,13 +5,18 @@ plugins {
val versions: Map by extra
val micronautVersion = "1.0.0"
+val micronaut2Version = "2.2.3"
val micronautTestVersion = "2.3.1"
+//val micronautLatest by configurations.getting {
+// extendsFrom(configurations.implementation.get())
+//}
+
dependencies {
- testImplementation(project(":testing-common"))
- testImplementation(project(":instrumentation:netty:netty-4.1"))
+ implementation(project(":instrumentation:netty:netty-4.1"))
+ implementation("io.opentelemetry.javaagent.instrumentation:opentelemetry-javaagent-netty-4.1:${versions["opentelemetry_java_agent"]}")
- testImplementation("io.opentelemetry.javaagent.instrumentation:opentelemetry-javaagent-netty-4.1:${versions["opentelemetry_java_agent"]}")
+ testImplementation(project(":testing-common"))
testImplementation("io.micronaut.test:micronaut-test-junit5:${micronautTestVersion}")
testImplementation("io.micronaut:micronaut-http-server-netty:${micronautVersion}")
@@ -19,4 +24,44 @@ dependencies {
testImplementation("io.micronaut:micronaut-inject:${micronautVersion}")
testAnnotationProcessor("io.micronaut:micronaut-inject-java:${micronautVersion}")
+
+// micronautLatest(":testing-common")
+// micronautLatest("io.micronaut.test:micronaut-test-junit5:${micronautTestVersion}")
+// micronautLatest("io.micronaut:micronaut-http-server-netty:${micronaut2Version}")
+// micronautLatest("io.micronaut:micronaut-runtime:${micronaut2Version}")
+// micronautLatest("io.micronaut:micronaut-inject:${micronaut2Version}")
+}
+
+//val micronaut2Test = task("micronaut2Test") {
+// description = "Runs micronaut2 tests."
+// group = "verification"
+//
+// testClassesDirs = sourceSets["intTest"].output.classesDirs
+// classpath = sourceSets["intTest"].runtimeClasspath
+// shouldRunAfter("test")
+//}
+//
+//tasks.check { dependsOn(micronaut2Test) }
+
+for (version in listOf("1.0.0", "2.2.3")) {
+ val versionedConfiguration = configurations.create("test_${version}") {
+ extendsFrom(configurations.testRuntimeClasspath.get())
+ }
+ dependencies {
+ versionedConfiguration(project(":instrumentation:netty:netty-4.1"))
+ versionedConfiguration("io.opentelemetry.javaagent.instrumentation:opentelemetry-javaagent-netty-4.1:${versions["opentelemetry_java_agent"]}")
+ versionedConfiguration(project(":testing-common"))
+ versionedConfiguration("io.micronaut:micronaut-inject-java:${version}")
+ versionedConfiguration("io.micronaut.test:micronaut-test-junit5:${version}")
+ versionedConfiguration("io.micronaut:micronaut-http-server-netty:${version}")
+ versionedConfiguration("io.micronaut:micronaut-runtime:${version}")
+ versionedConfiguration("io.micronaut:micronaut-inject:${version}")
+ }
+ val versionedTest = task("test_${version}") {
+ group = "verification"
+ testClassesDirs = sourceSets["test"].output.classesDirs
+ classpath = versionedConfiguration
+ shouldRunAfter("test")
+ }
+ tasks.check { dependsOn(versionedTest) }
}
diff --git a/instrumentation/micronaut-1.0/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/micronaut/MicronautInstrumentationTest.java b/instrumentation/micronaut-1.0/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/micronaut/MicronautInstrumentationTest.java
index c890ebd54..91e8e03e3 100644
--- a/instrumentation/micronaut-1.0/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/micronaut/MicronautInstrumentationTest.java
+++ b/instrumentation/micronaut-1.0/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/micronaut/MicronautInstrumentationTest.java
@@ -81,6 +81,10 @@ public void get() throws IOException, TimeoutException, InterruptedException {
@Test
public void postJson() throws IOException, TimeoutException, InterruptedException {
RequestBody requestBody = requestBody(true, 3000, 75);
+ Buffer requestBodyBuffer = new Buffer();
+ requestBody.writeTo(requestBodyBuffer);
+ String requestBodyStr = new String(requestBodyBuffer.readByteArray());
+
Request request =
new Request.Builder()
.url(String.format("http://localhost:%d/post", server.getPort()))
@@ -91,10 +95,7 @@ public void postJson() throws IOException, TimeoutException, InterruptedExceptio
try (Response response = httpClient.newCall(request).execute()) {
Assertions.assertEquals(200, response.code());
- Buffer requestBodyBuffer = new Buffer();
- requestBody.writeTo(requestBodyBuffer);
- Assertions.assertEquals(
- new String(requestBodyBuffer.readByteArray()), response.body().string());
+ Assertions.assertEquals(TestController.RESPONSE_BODY, response.body().string());
}
List> traces = TEST_WRITER.getTraces();
@@ -116,17 +117,12 @@ public void postJson() throws IOException, TimeoutException, InterruptedExceptio
.get(
HypertraceSemanticAttributes.httpResponseHeader(
TestController.RESPONSE_HEADER_NAME)));
- Buffer requestBodyBuffer = new Buffer();
- requestBody.writeTo(requestBodyBuffer);
Assertions.assertEquals(
- new String(requestBodyBuffer.readByteArray()),
+ requestBodyStr,
spanData.getAttributes().get(HypertraceSemanticAttributes.HTTP_REQUEST_BODY));
- // TODO seems like a wrong charset
- // Buffer responseBodyBuffer = new Buffer();
- // requestBody.writeTo(responseBodyBuffer);
- // Assertions.assertEquals(
- // new String(responseBodyBuffer.readByteArray()),
- // spanData.getAttributes().get(HypertraceSemanticAttributes.HTTP_RESPONSE_BODY));
+ Assertions.assertEquals(
+ TestController.RESPONSE_BODY,
+ spanData.getAttributes().get(HypertraceSemanticAttributes.HTTP_RESPONSE_BODY));
}
@Test
diff --git a/instrumentation/micronaut-1.0/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/micronaut/TestController.java b/instrumentation/micronaut-1.0/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/micronaut/TestController.java
index c6e925be5..3ee5a3258 100644
--- a/instrumentation/micronaut-1.0/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/micronaut/TestController.java
+++ b/instrumentation/micronaut-1.0/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/micronaut/TestController.java
@@ -33,6 +33,7 @@ public class TestController {
static final String RESPONSE_HEADER_NAME = "reqheadername";
static final String RESPONSE_HEADER_VALUE = "reqheadervalue";
+ static final String RESPONSE_BODY = "{\"key\": \"val\"}";
@Get(uri = "/get_no_content")
public HttpResponse> getNoContent() {
@@ -46,7 +47,7 @@ public HttpResponse> post(@Body String body) {
.header(RESPONSE_HEADER_NAME, RESPONSE_HEADER_VALUE)
.characterEncoding(StandardCharsets.US_ASCII)
.contentType(MediaType.APPLICATION_JSON)
- .body(body);
+ .body(RESPONSE_BODY);
}
@Get(value = "/stream", produces = MediaType.APPLICATION_JSON_STREAM)
@@ -57,7 +58,10 @@ public Flowable stream() {
static List streamBody() {
List entities = new ArrayList<>();
for (int i = 0; i < 1000; i++) {
- entities.add(String.format("dog=%d\n", i));
+ entities.add(
+ String.format(
+ "dog,cats,foo,bar,dog,cats,foo,bar,dog,cats,foo,bar,dog,cats,foo,bar,dog,cats,foo,bar=%d\n",
+ i));
}
return entities;
}
From 26c0aa770e73ac7f8da77e07d0a71fbbcbca18fa Mon Sep 17 00:00:00 2001
From: Pavol Loffay
Date: Tue, 12 Jan 2021 18:05:23 +0100
Subject: [PATCH 5/8] Fix
Signed-off-by: Pavol Loffay
---
.../instrumentation/hypertrace/micronaut/TestController.java | 1 +
1 file changed, 1 insertion(+)
diff --git a/instrumentation/micronaut-1.0/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/micronaut/TestController.java b/instrumentation/micronaut-1.0/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/micronaut/TestController.java
index 3ee5a3258..42943dc30 100644
--- a/instrumentation/micronaut-1.0/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/micronaut/TestController.java
+++ b/instrumentation/micronaut-1.0/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/micronaut/TestController.java
@@ -43,6 +43,7 @@ public HttpResponse> getNoContent() {
@Post(uri = "/post")
public HttpResponse> post(@Body String body) {
+ System.out.printf("Received body: %s", body);
return HttpResponse.status(HttpStatus.OK)
.header(RESPONSE_HEADER_NAME, RESPONSE_HEADER_VALUE)
.characterEncoding(StandardCharsets.US_ASCII)
From 7d8d8ae93059270d9216f8252cdfc151020ebf41 Mon Sep 17 00:00:00 2001
From: Pavol Loffay
Date: Tue, 12 Jan 2021 18:58:22 +0100
Subject: [PATCH 6/8] gradle changes
Signed-off-by: Pavol Loffay
---
instrumentation/micronaut-1.0/build.gradle.kts | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/instrumentation/micronaut-1.0/build.gradle.kts b/instrumentation/micronaut-1.0/build.gradle.kts
index c2357a233..9c095efda 100644
--- a/instrumentation/micronaut-1.0/build.gradle.kts
+++ b/instrumentation/micronaut-1.0/build.gradle.kts
@@ -6,7 +6,7 @@ val versions: Map by extra
val micronautVersion = "1.0.0"
val micronaut2Version = "2.2.3"
-val micronautTestVersion = "2.3.1"
+val micronautTestVersion = "1.0.0"
//val micronautLatest by configurations.getting {
// extendsFrom(configurations.implementation.get())
@@ -43,6 +43,13 @@ dependencies {
//
//tasks.check { dependsOn(micronaut2Test) }
+sourceSets {
+ create("intTest") {
+ compileClasspath += sourceSets.main.get().output
+ runtimeClasspath += sourceSets.main.get().output
+ }
+}
+
for (version in listOf("1.0.0", "2.2.3")) {
val versionedConfiguration = configurations.create("test_${version}") {
extendsFrom(configurations.testRuntimeClasspath.get())
From 6bea0233e33f384aa96814881e51fb3f35ab346b Mon Sep 17 00:00:00 2001
From: Pavol Loffay
Date: Tue, 12 Jan 2021 19:35:04 +0100
Subject: [PATCH 7/8] Fix
Signed-off-by: Pavol Loffay
---
instrumentation/micronaut-1.0/build.gradle.kts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/instrumentation/micronaut-1.0/build.gradle.kts b/instrumentation/micronaut-1.0/build.gradle.kts
index 9c095efda..1b9237c63 100644
--- a/instrumentation/micronaut-1.0/build.gradle.kts
+++ b/instrumentation/micronaut-1.0/build.gradle.kts
@@ -59,7 +59,7 @@ for (version in listOf("1.0.0", "2.2.3")) {
versionedConfiguration("io.opentelemetry.javaagent.instrumentation:opentelemetry-javaagent-netty-4.1:${versions["opentelemetry_java_agent"]}")
versionedConfiguration(project(":testing-common"))
versionedConfiguration("io.micronaut:micronaut-inject-java:${version}")
- versionedConfiguration("io.micronaut.test:micronaut-test-junit5:${version}")
+ versionedConfiguration("io.micronaut.test:micronaut-test-junit5:${micronautTestVersion}")
versionedConfiguration("io.micronaut:micronaut-http-server-netty:${version}")
versionedConfiguration("io.micronaut:micronaut-runtime:${version}")
versionedConfiguration("io.micronaut:micronaut-inject:${version}")
From c1fd7bcd45a51d27a6699022d53ab0e4e6f14ab0 Mon Sep 17 00:00:00 2001
From: Pavol Loffay
Date: Tue, 12 Jan 2021 19:38:18 +0100
Subject: [PATCH 8/8] cleanup
Signed-off-by: Pavol Loffay
---
.../micronaut-1.0/build.gradle.kts | 35 +++----------------
1 file changed, 4 insertions(+), 31 deletions(-)
diff --git a/instrumentation/micronaut-1.0/build.gradle.kts b/instrumentation/micronaut-1.0/build.gradle.kts
index 1b9237c63..5b91917ba 100644
--- a/instrumentation/micronaut-1.0/build.gradle.kts
+++ b/instrumentation/micronaut-1.0/build.gradle.kts
@@ -8,49 +8,22 @@ val micronautVersion = "1.0.0"
val micronaut2Version = "2.2.3"
val micronautTestVersion = "1.0.0"
-//val micronautLatest by configurations.getting {
-// extendsFrom(configurations.implementation.get())
-//}
-
dependencies {
implementation(project(":instrumentation:netty:netty-4.1"))
implementation("io.opentelemetry.javaagent.instrumentation:opentelemetry-javaagent-netty-4.1:${versions["opentelemetry_java_agent"]}")
testImplementation(project(":testing-common"))
-
testImplementation("io.micronaut.test:micronaut-test-junit5:${micronautTestVersion}")
testImplementation("io.micronaut:micronaut-http-server-netty:${micronautVersion}")
testImplementation("io.micronaut:micronaut-runtime:${micronautVersion}")
testImplementation("io.micronaut:micronaut-inject:${micronautVersion}")
-
testAnnotationProcessor("io.micronaut:micronaut-inject-java:${micronautVersion}")
-
-// micronautLatest(":testing-common")
-// micronautLatest("io.micronaut.test:micronaut-test-junit5:${micronautTestVersion}")
-// micronautLatest("io.micronaut:micronaut-http-server-netty:${micronaut2Version}")
-// micronautLatest("io.micronaut:micronaut-runtime:${micronaut2Version}")
-// micronautLatest("io.micronaut:micronaut-inject:${micronaut2Version}")
-}
-
-//val micronaut2Test = task("micronaut2Test") {
-// description = "Runs micronaut2 tests."
-// group = "verification"
-//
-// testClassesDirs = sourceSets["intTest"].output.classesDirs
-// classpath = sourceSets["intTest"].runtimeClasspath
-// shouldRunAfter("test")
-//}
-//
-//tasks.check { dependsOn(micronaut2Test) }
-
-sourceSets {
- create("intTest") {
- compileClasspath += sourceSets.main.get().output
- runtimeClasspath += sourceSets.main.get().output
- }
}
-for (version in listOf("1.0.0", "2.2.3")) {
+/**
+ * Todo this does not run tests
+ */
+for (version in listOf(micronautVersion, micronaut2Version)) {
val versionedConfiguration = configurations.create("test_${version}") {
extendsFrom(configurations.testRuntimeClasspath.get())
}