diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 00000000..c732b980 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,26 @@ +# Gradle +.gradle/ +out/ +.project +.settings +.classpath + +# IDE(A) files +.idea/ +.settings/ +.vscode/ +.classpath +.project + +# Build artifacts +**/build/ +**/bin/ + +# Mock server download +mock_server* + +# Docker files +*Dockerfile + +# Git repo contents +.git/ diff --git a/cloudbuild-e2e-gce.yaml b/cloudbuild-e2e-gce.yaml index fbdfa28a..0c55b127 100644 --- a/cloudbuild-e2e-gce.yaml +++ b/cloudbuild-e2e-gce.yaml @@ -33,5 +33,5 @@ steps: logsBucket: gs://opentelemetry-ops-e2e-cloud-build-logs substitutions: - _TEST_RUNNER_IMAGE: gcr.io/opentelemetry-ops-e2e/opentelemetry-operations-e2e-testing:0.5.23 - _TEST_SERVER_IMAGE: gcr.io/${PROJECT_ID}/opentelemetry-operations-java-e2e-test-server:${SHORT_SHA} \ No newline at end of file + _TEST_RUNNER_IMAGE: gcr.io/${PROJECT_ID}/opentelemetry-operations-e2e-testing:0.9.0 + _TEST_SERVER_IMAGE: gcr.io/${PROJECT_ID}/opentelemetry-operations-java-e2e-test-server:${SHORT_SHA} diff --git a/cloudbuild-e2e-gke.yaml b/cloudbuild-e2e-gke.yaml index d87995b9..a405bac1 100644 --- a/cloudbuild-e2e-gke.yaml +++ b/cloudbuild-e2e-gke.yaml @@ -32,5 +32,5 @@ steps: logsBucket: gs://opentelemetry-ops-e2e-cloud-build-logs substitutions: - _TEST_RUNNER_IMAGE: gcr.io/opentelemetry-ops-e2e/opentelemetry-operations-e2e-testing:0.5.23 - _TEST_SERVER_IMAGE: gcr.io/${PROJECT_ID}/opentelemetry-operations-java-e2e-test-server:${SHORT_SHA} \ No newline at end of file + _TEST_RUNNER_IMAGE: gcr.io/${PROJECT_ID}/opentelemetry-operations-e2e-testing:0.9.0 + _TEST_SERVER_IMAGE: gcr.io/${PROJECT_ID}/opentelemetry-operations-java-e2e-test-server:${SHORT_SHA} diff --git a/cloudbuild-e2e-local.yaml b/cloudbuild-e2e-local.yaml index 89a979a3..b1d134b5 100644 --- a/cloudbuild-e2e-local.yaml +++ b/cloudbuild-e2e-local.yaml @@ -34,5 +34,5 @@ steps: logsBucket: gs://opentelemetry-ops-e2e-cloud-build-logs substitutions: - _TEST_RUNNER_IMAGE: gcr.io/opentelemetry-ops-e2e/opentelemetry-operations-e2e-testing:0.5.23 - _TEST_SERVER_IMAGE: gcr.io/${PROJECT_ID}/opentelemetry-operations-java-e2e-test-server:${SHORT_SHA} \ No newline at end of file + _TEST_RUNNER_IMAGE: gcr.io/${PROJECT_ID}/opentelemetry-operations-e2e-testing:0.9.0 + _TEST_SERVER_IMAGE: gcr.io/${PROJECT_ID}/opentelemetry-operations-java-e2e-test-server:${SHORT_SHA} diff --git a/e2e-test-server/src/main/java/com/google/cloud/opentelemetry/endtoend/Constants.java b/e2e-test-server/src/main/java/com/google/cloud/opentelemetry/endtoend/Constants.java index a81f81b4..c70945aa 100644 --- a/e2e-test-server/src/main/java/com/google/cloud/opentelemetry/endtoend/Constants.java +++ b/e2e-test-server/src/main/java/com/google/cloud/opentelemetry/endtoend/Constants.java @@ -25,6 +25,7 @@ public class Constants { public static String SCENARIO = "scenario"; public static String STATUS_CODE = "status_code"; public static String TEST_ID = "test_id"; + public static String TRACE_ID = "trace_id"; // TODO: Add good error messages below. public static String SUBCRIPTION_MODE = System.getenv().getOrDefault("SUBSCRIPTION_MODE", ""); diff --git a/e2e-test-server/src/main/java/com/google/cloud/opentelemetry/endtoend/Response.java b/e2e-test-server/src/main/java/com/google/cloud/opentelemetry/endtoend/Response.java index 4059c133..791dbb67 100644 --- a/e2e-test-server/src/main/java/com/google/cloud/opentelemetry/endtoend/Response.java +++ b/e2e-test-server/src/main/java/com/google/cloud/opentelemetry/endtoend/Response.java @@ -17,6 +17,8 @@ import com.google.api.gax.rpc.StatusCode.Code; import com.google.protobuf.ByteString; +import java.util.HashMap; +import java.util.Map; /** * An "RPC Response", generified. @@ -30,10 +32,17 @@ public interface Response { *

If this is `OK`, then data will be empty. */ Code statusCode(); + /** string explanation of error codes. */ ByteString data(); + Map headers(); + static Response make(final Code code, final ByteString data) { + return make(code, data, new HashMap<>()); + } + + static Response make(final Code code, final ByteString data, final Map headers) { return new Response() { public Code statusCode() { return code; @@ -42,6 +51,10 @@ public Code statusCode() { public ByteString data() { return data; } + + public Map headers() { + return headers; + } }; } @@ -61,5 +74,9 @@ public static Response ok() { return make(Code.OK, ByteString.EMPTY); } + public static Response ok(Map headers) { + return make(Code.OK, ByteString.EMPTY, headers); + } + public static Response EMPTY = make(Code.UNKNOWN, ByteString.EMPTY); } diff --git a/e2e-test-server/src/main/java/com/google/cloud/opentelemetry/endtoend/ScenarioHandlerManager.java b/e2e-test-server/src/main/java/com/google/cloud/opentelemetry/endtoend/ScenarioHandlerManager.java index 60cfc177..66b4de33 100644 --- a/e2e-test-server/src/main/java/com/google/cloud/opentelemetry/endtoend/ScenarioHandlerManager.java +++ b/e2e-test-server/src/main/java/com/google/cloud/opentelemetry/endtoend/ScenarioHandlerManager.java @@ -56,7 +56,7 @@ private Response basicTrace(Request request) { .setAttribute(Constants.TEST_ID, request.testId()) .startSpan(); try { - return Response.ok(); + return Response.ok(Map.of(Constants.TRACE_ID, span.getSpanContext().getTraceId())); } finally { span.end(); } @@ -65,7 +65,7 @@ private Response basicTrace(Request request) { /** Default test scenario runner for unknown test cases. */ private Response unimplemented(Request request) { - return Response.unimplemented("UNhandled request: " + request.testId()); + return Response.unimplemented("Unhandled request: " + request.testId()); } /** Registers test scenario "urls" with handlers for the requests. */ @@ -92,7 +92,8 @@ private static R withTemporaryTracer(Function handler) { sdk.getSdkTracerProvider().shutdown(); } } catch (IOException e) { - // Lift checked exception into runtime to feed through lambda impls and make it out to + // Lift checked exception into runtime to feed through lambda impls and make it + // out to // test status. throw new RuntimeException(e); } @@ -102,7 +103,10 @@ private static R withTemporaryTracer(Function handler) { private static OpenTelemetrySdk setupTraceExporter() throws IOException { // Using default project ID and Credentials TraceConfiguration configuration = - TraceConfiguration.builder().setDeadline(Duration.ofMillis(30000)).build(); + TraceConfiguration.builder() + .setDeadline(Duration.ofMillis(30000)) + .setProjectId(Constants.PROJECT_ID != "" ? Constants.PROJECT_ID : null) + .build(); TraceExporter traceExporter = TraceExporter.createWithConfiguration(configuration); // Register the TraceExporter with OpenTelemetry diff --git a/e2e-test-server/src/main/java/com/google/cloud/opentelemetry/endtoend/Server.java b/e2e-test-server/src/main/java/com/google/cloud/opentelemetry/endtoend/Server.java index 694c8e89..8012d46f 100644 --- a/e2e-test-server/src/main/java/com/google/cloud/opentelemetry/endtoend/Server.java +++ b/e2e-test-server/src/main/java/com/google/cloud/opentelemetry/endtoend/Server.java @@ -81,6 +81,7 @@ public void close() { public void respond(final String testId, final Response response) { final PubsubMessage message = PubsubMessage.newBuilder() + .putAllAttributes(response.headers()) .putAttributes(Constants.TEST_ID, testId) .putAttributes(Constants.STATUS_CODE, Integer.toString(response.statusCode().ordinal())) .setData(response.data()) @@ -122,6 +123,7 @@ public void handleMessage(PubsubMessage message, AckReplyConsumer consumer) { try { response = scenarioHandlers.handleScenario(scenario, request); } catch (Throwable e) { + e.printStackTrace(System.err); response = Response.internalError(e); } finally { respond(testId, response);