From 3d13263960333d7b7d6cdd6194d2c5bc078c1e61 Mon Sep 17 00:00:00 2001 From: Ping Xiang Date: Wed, 18 Sep 2024 21:55:18 +0000 Subject: [PATCH 1/2] add contract tests --- .idea/.gitignore | 5 + .idea/aws-otel-js-instrumentation.iml | 19 ++ .idea/codeStyles/Project.xml | 136 ++++++++ .idea/codeStyles/codeStyleConfig.xml | 5 + .idea/misc.xml | 6 + .idea/modules.xml | 8 + .idea/prettier.xml | 6 + .idea/vcs.xml | 6 + contract-tests/README.md | 42 +++ .../images/applications/http/Dockerfile | 22 ++ .../images/applications/http/build.sh | 26 ++ .../images/applications/http/nodejs-http.yaml | 40 +++ .../images/applications/http/package.json | 15 + .../images/applications/http/server.js | 59 ++++ .../images/applications/http/test.sh | 9 + .../images/applications/requests/Dockerfile | 15 + .../applications/requests/pyproject.toml | 6 + .../applications/requests/requests_server.py | 62 ++++ .../applications/requests/requirements.txt | 4 + .../images/mock-collector/Dockerfile | 9 + .../images/mock-collector/README.md | 9 + .../mock-collector/mock_collector_client.py | 143 ++++++++ .../mock_collector_metrics_service.py | 31 ++ .../mock-collector/mock_collector_server.py | 35 ++ .../mock-collector/mock_collector_service.py | 52 +++ .../mock_collector_service_pb2.py | 38 +++ .../mock_collector_service_pb2.pyi | 34 ++ .../mock_collector_service_pb2_grpc.py | 138 ++++++++ .../mock_collector_trace_service.py | 31 ++ .../protos/mock_collector_service.proto | 35 ++ .../images/mock-collector/pyproject.toml | 24 ++ .../images/mock-collector/requirements.txt | 5 + contract-tests/tests/pyproject.toml | 35 ++ .../test/amazon/base/contract_test_base.py | 311 ++++++++++++++++++ .../base/database_contract_test_base.py | 159 +++++++++ .../http_test.cpython-312-pytest-8.3.2.pyc | Bin 0 -> 10482 bytes .../http_test.cpython-312-pytest-8.3.3.pyc | Bin 0 -> 9493 bytes .../tests/test/amazon/http/http_test.py | 165 ++++++++++ ...requests_test.cpython-312-pytest-8.3.2.pyc | Bin 0 -> 9567 bytes ...requests_test.cpython-312-pytest-8.3.3.pyc | Bin 0 -> 9565 bytes .../test/amazon/requests/requests_test.py | 148 +++++++++ .../utils/application_signals_constants.py | 20 ++ ...-autoinstrumentation-0.1.0-dev0.tgz.backup | Bin 0 -> 118545 bytes ...lemetry-node-autoinstrumentation-0.1.0.tgz | Bin 0 -> 107783 bytes ...lemetry_distro-0.5.0.dev0-py3-none-any.whl | Bin 0 -> 58271 bytes dist/contract_tests-1.0.0-py3-none-any.whl | Bin 0 -> 11442 bytes dist/contract_tests-1.0.0.tar.gz | Bin 0 -> 6825 bytes dist/mock_collector-1.0.0-py3-none-any.whl | Bin 0 -> 7733 bytes dist/mock_collector-1.0.0.tar.gz | Bin 0 -> 4948 bytes scripts/build_and_install_distro.sh | 9 +- scripts/set-up-contract-tests.sh | 75 +++++ 51 files changed, 1996 insertions(+), 1 deletion(-) create mode 100644 .idea/.gitignore create mode 100644 .idea/aws-otel-js-instrumentation.iml create mode 100644 .idea/codeStyles/Project.xml create mode 100644 .idea/codeStyles/codeStyleConfig.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/prettier.xml create mode 100644 .idea/vcs.xml create mode 100644 contract-tests/README.md create mode 100644 contract-tests/images/applications/http/Dockerfile create mode 100755 contract-tests/images/applications/http/build.sh create mode 100644 contract-tests/images/applications/http/nodejs-http.yaml create mode 100644 contract-tests/images/applications/http/package.json create mode 100644 contract-tests/images/applications/http/server.js create mode 100755 contract-tests/images/applications/http/test.sh create mode 100644 contract-tests/images/applications/requests/Dockerfile create mode 100644 contract-tests/images/applications/requests/pyproject.toml create mode 100644 contract-tests/images/applications/requests/requests_server.py create mode 100644 contract-tests/images/applications/requests/requirements.txt create mode 100644 contract-tests/images/mock-collector/Dockerfile create mode 100644 contract-tests/images/mock-collector/README.md create mode 100644 contract-tests/images/mock-collector/mock_collector_client.py create mode 100644 contract-tests/images/mock-collector/mock_collector_metrics_service.py create mode 100644 contract-tests/images/mock-collector/mock_collector_server.py create mode 100644 contract-tests/images/mock-collector/mock_collector_service.py create mode 100644 contract-tests/images/mock-collector/mock_collector_service_pb2.py create mode 100644 contract-tests/images/mock-collector/mock_collector_service_pb2.pyi create mode 100644 contract-tests/images/mock-collector/mock_collector_service_pb2_grpc.py create mode 100644 contract-tests/images/mock-collector/mock_collector_trace_service.py create mode 100644 contract-tests/images/mock-collector/protos/mock_collector_service.proto create mode 100644 contract-tests/images/mock-collector/pyproject.toml create mode 100644 contract-tests/images/mock-collector/requirements.txt create mode 100644 contract-tests/tests/pyproject.toml create mode 100644 contract-tests/tests/test/amazon/base/contract_test_base.py create mode 100644 contract-tests/tests/test/amazon/base/database_contract_test_base.py create mode 100644 contract-tests/tests/test/amazon/http/__pycache__/http_test.cpython-312-pytest-8.3.2.pyc create mode 100644 contract-tests/tests/test/amazon/http/__pycache__/http_test.cpython-312-pytest-8.3.3.pyc create mode 100644 contract-tests/tests/test/amazon/http/http_test.py create mode 100644 contract-tests/tests/test/amazon/requests/__pycache__/requests_test.cpython-312-pytest-8.3.2.pyc create mode 100644 contract-tests/tests/test/amazon/requests/__pycache__/requests_test.cpython-312-pytest-8.3.3.pyc create mode 100644 contract-tests/tests/test/amazon/requests/requests_test.py create mode 100644 contract-tests/tests/test/amazon/utils/application_signals_constants.py create mode 100644 dist/aws-aws-distro-opentelemetry-node-autoinstrumentation-0.1.0-dev0.tgz.backup create mode 100644 dist/aws-aws-distro-opentelemetry-node-autoinstrumentation-0.1.0.tgz create mode 100644 dist/aws_opentelemetry_distro-0.5.0.dev0-py3-none-any.whl create mode 100644 dist/contract_tests-1.0.0-py3-none-any.whl create mode 100644 dist/contract_tests-1.0.0.tar.gz create mode 100644 dist/mock_collector-1.0.0-py3-none-any.whl create mode 100644 dist/mock_collector-1.0.0.tar.gz create mode 100755 scripts/set-up-contract-tests.sh diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 00000000..b58b603f --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,5 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ diff --git a/.idea/aws-otel-js-instrumentation.iml b/.idea/aws-otel-js-instrumentation.iml new file mode 100644 index 00000000..06733307 --- /dev/null +++ b/.idea/aws-otel-js-instrumentation.iml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml new file mode 100644 index 00000000..b77e2cf0 --- /dev/null +++ b/.idea/codeStyles/Project.xml @@ -0,0 +1,136 @@ + + + + \ No newline at end of file diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml new file mode 100644 index 00000000..79ee123c --- /dev/null +++ b/.idea/codeStyles/codeStyleConfig.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 00000000..d3a18e32 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 00000000..ac33f494 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/prettier.xml b/.idea/prettier.xml new file mode 100644 index 00000000..b0c1c68f --- /dev/null +++ b/.idea/prettier.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 00000000..35eb1ddf --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/contract-tests/README.md b/contract-tests/README.md new file mode 100644 index 00000000..7e6ff49b --- /dev/null +++ b/contract-tests/README.md @@ -0,0 +1,42 @@ +# Introduction + +This directory contain contract tests that exist to prevent regressions. They cover: +* [OpenTelemetry semantic conventions](https://github.com/open-telemetry/semantic-conventions/). +* Application Signals-specific attributes. + +# How it works? + +The tests present here rely on the auto-instrumentation of a sample application which will send telemetry signals to a mock collector. The tests will use the data collected by the mock collector to perform assertions and validate that the contracts are being respected. + +# Types of tested frameworks + +The frameworks and libraries that are tested in the contract tests should fall in the following categories (more can be added on demand): +* http-servers - applications meant to test http servers (e.g. Django). +* http-clients - applications meant to test http clients (e.g. requests). +* aws-sdk - Applications meant to test the AWS SDK (e.g. botocore). +* database-clients - Applications meant to test database clients (e.g. psychopg2). + +When testing a framework, we will create a sample application. The sample applications are stored following this convention: `contract-tests/images/applications/`. + +# Adding tests for a new library or framework + +The steps to add a new test for a library or framework are: +* Create a sample application. + * The sample application should be created in `contract-tests/images/applications/`. + * Implement a `pyproject.toml` (to ensure code style checks run), `Dockerfile`, and `requirements.txt` file. See the `requests` application for an example of this. +* Add a test class for the sample application. + * The test class should be created in `contract-tests/tests/amazon/`. + * The test class should extend `contract_test_base.py` + +# How to run the tests locally? + +Pre-requirements: +* Have `docker` installed and running - verify by running the `docker` command. + +Steps: +* From `aws-otel-python-instrumentation` dir, execute: +```sh +./scripts/build_and_install_distro.sh +./scripts/set-up-contract-tests.sh +pytest contract-tests/tests +``` \ No newline at end of file diff --git a/contract-tests/images/applications/http/Dockerfile b/contract-tests/images/applications/http/Dockerfile new file mode 100644 index 00000000..70a52dea --- /dev/null +++ b/contract-tests/images/applications/http/Dockerfile @@ -0,0 +1,22 @@ +# Use an official Node.js runtime as the base image +FROM node:20-alpine +#FROM node:20 + +# Set the working directory inside the container +WORKDIR /http + +# Copy the relevant files +COPY ./dist/$DISTRO /http +COPY ./contract-tests/images/applications/http /http + + +ARG DISTRO +# Install dependencies +RUN npm install +RUN npm install ./${DISTRO} + +# Expose the port the app runs on +EXPOSE 8080 + +# Run the app with nodejs auto instrumentation +CMD ["node", "--require", "@aws/aws-distro-opentelemetry-node-autoinstrumentation/register", "server.js"] diff --git a/contract-tests/images/applications/http/build.sh b/contract-tests/images/applications/http/build.sh new file mode 100755 index 00000000..db6f2266 --- /dev/null +++ b/contract-tests/images/applications/http/build.sh @@ -0,0 +1,26 @@ +#!/usr/bin/env bash +export REGION='us-east-1' + +get_repo_link() { + repository_exists=$(aws ecr-public describe-repositories --repository-names $1 --region ${REGION} --query 'repositories[0].repositoryUri' --output text 2>&1) + if [[ $? -eq 0 ]]; then + # Repository exists, extract the repositoryUri + repositoryUri=$repository_exists + echo $repositoryUri + else + # Repository doesn't exist, create it and extract the repositoryUri + output=$(aws ecr-public create-repository --repository-name $1 --region ${REGION} --no-cli-pager) + repositoryUri=$(echo $output | jq -r '.repository.repositoryUri') + echo $repositoryUri + fi +} + +aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws + +repo_uri=$(get_repo_link nodejs-http) +echo "REPO is" ${repo_uri} + +docker build -t nodejs-http . +docker tag nodejs-http:latest ${repo_uri}:latest +docker push ${repo_uri}:latest + diff --git a/contract-tests/images/applications/http/nodejs-http.yaml b/contract-tests/images/applications/http/nodejs-http.yaml new file mode 100644 index 00000000..cd962923 --- /dev/null +++ b/contract-tests/images/applications/http/nodejs-http.yaml @@ -0,0 +1,40 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: http-nodejs-deployment + labels: + app: http-nodejs +spec: + replicas: 1 + selector: + matchLabels: + app: http-nodejs + template: + metadata: + labels: + app: http-nodejs + annotations: + instrumentation.opentelemetry.io/inject-nodejs: "true" + spec: + containers: + - name: http-nodejs + image: public.ecr.aws/e8l6r3w7/nodejs-http:latest + ports: + - containerPort: 8080 + env: + - name: NODE_ENV + value: "production" + +--- +apiVersion: v1 +kind: Service +metadata: + name: http-nodejs-service +spec: + selector: + app: http-nodejs # Corrected selector to match the app label + ports: + - protocol: TCP + port: 80 + targetPort: 8080 + type: LoadBalancer \ No newline at end of file diff --git a/contract-tests/images/applications/http/package.json b/contract-tests/images/applications/http/package.json new file mode 100644 index 00000000..6f6f9601 --- /dev/null +++ b/contract-tests/images/applications/http/package.json @@ -0,0 +1,15 @@ +{ + "name": "http-server", + "version": "1.0.0", + "description": "A simple Node.js http server", + "main": "server.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "start": "node server.js" + }, + "author": "", + "license": "ISC", + "dependencies": { + "@aws/aws-distro-opentelemetry-node-autoinstrumentation": "file:aws-aws-distro-opentelemetry-node-autoinstrumentation-0.1.0-dev0.tgz" + } +} diff --git a/contract-tests/images/applications/http/server.js b/contract-tests/images/applications/http/server.js new file mode 100644 index 00000000..b330254f --- /dev/null +++ b/contract-tests/images/applications/http/server.js @@ -0,0 +1,59 @@ +// server.js + +const http = require('http'); + +const PORT = 8080; +const NETWORK_ALIAS = 'backend'; +const SUCCESS = 'success'; +const ERROR = 'error'; +const FAULT = 'fault'; + +const server = http.createServer((req, res) => { + const method = req.method; + const url = req.url; + + // Helper function to check if a substring is in the path + const inPath = (subPath) => url.includes(subPath); + + if (inPath(`/${NETWORK_ALIAS}`)) { + let statusCode; + if (inPath(`/${SUCCESS}`)) { + statusCode = 200; + } else if (inPath(`/${ERROR}`)) { + statusCode = 400; + } else if (inPath(`/${FAULT}`)) { + statusCode = 500; + } else { + statusCode = 404; + } + res.writeHead(statusCode); + res.end(); + } else { + // Forward the request to http://backend:8080/backend{original_path} + const options = { + hostname: NETWORK_ALIAS, + port: PORT, + // port: 9090, + path: `/${NETWORK_ALIAS}${url}`, + method: method, + headers: req.headers, + timeout: 20000, // 20 seconds timeout + }; + + const proxyReq = http.request(options, (proxyRes) => { + res.writeHead(proxyRes.statusCode, proxyRes.headers); + proxyRes.pipe(res, { end: true }); + }); + + proxyReq.on('error', (err) => { + res.writeHead(500); + res.end('Proxy error'); + }); + + req.pipe(proxyReq, { end: true }); + } +}); + +server.listen(PORT, '0.0.0.0', () => { + console.log('Ready'); +}); diff --git a/contract-tests/images/applications/http/test.sh b/contract-tests/images/applications/http/test.sh new file mode 100755 index 00000000..2f5b8990 --- /dev/null +++ b/contract-tests/images/applications/http/test.sh @@ -0,0 +1,9 @@ +export OTEL_METRIC_EXPORT_INTERVAL=1000 +export OTEL_AWS_APPLICATION_SIGNALS_ENABLED=true +export OTEL_METRICS_EXPORTER=none +export OTEL_EXPORTER_OTLP_PROTOCOL=grpc +export OTEL_BSP_SCHEDULE_DELAY=1 +export OTEL_TRACES_SAMPLER=always_on +export OTEL_RESOURCE_ATTRIBUTES=service.name=test + +node --require @aws/aws-distro-opentelemetry-node-autoinstrumentation/register server.js diff --git a/contract-tests/images/applications/requests/Dockerfile b/contract-tests/images/applications/requests/Dockerfile new file mode 100644 index 00000000..5a3d3fa3 --- /dev/null +++ b/contract-tests/images/applications/requests/Dockerfile @@ -0,0 +1,15 @@ +# Meant to be run from aws-otel-python-instrumentation/contract-tests. +# Assumes existence of dist/aws_opentelemetry_distro--py3-none-any.whl. +# Assumes filename of aws_opentelemetry_distro--py3-none-any.whl is passed in as "DISTRO" arg. +FROM python:3.10 +WORKDIR /requests +COPY ./dist/$DISTRO /requests +COPY ./contract-tests/images/applications/requests /requests + +ENV PIP_ROOT_USER_ACTION=ignore +ARG DISTRO +RUN pip install --upgrade pip && pip install -r requirements.txt && pip install ${DISTRO} --force-reinstall +RUN opentelemetry-bootstrap -a install + +# Without `-u`, logs will be buffered and `wait_for_logs` will never return. +CMD ["opentelemetry-instrument", "python", "-u", "./requests_server.py"] \ No newline at end of file diff --git a/contract-tests/images/applications/requests/pyproject.toml b/contract-tests/images/applications/requests/pyproject.toml new file mode 100644 index 00000000..7e010fb8 --- /dev/null +++ b/contract-tests/images/applications/requests/pyproject.toml @@ -0,0 +1,6 @@ +[project] +name = "requests-server" +description = "Simple server that relies on requests library" +version = "1.0.0" +license = "Apache-2.0" +requires-python = ">=3.8" \ No newline at end of file diff --git a/contract-tests/images/applications/requests/requests_server.py b/contract-tests/images/applications/requests/requests_server.py new file mode 100644 index 00000000..7c6a4aca --- /dev/null +++ b/contract-tests/images/applications/requests/requests_server.py @@ -0,0 +1,62 @@ +# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +# SPDX-License-Identifier: Apache-2.0 +import atexit +from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer +from threading import Thread + +from requests import Response, request +from typing_extensions import Tuple, override + +_PORT: int = 8080 +_NETWORK_ALIAS: str = "backend" +_SUCCESS: str = "success" +_ERROR: str = "error" +_FAULT: str = "fault" + + +class RequestHandler(BaseHTTPRequestHandler): + @override + # pylint: disable=invalid-name + def do_GET(self): + self.handle_request("GET") + + @override + # pylint: disable=invalid-name + def do_POST(self): + self.handle_request("POST") + + def handle_request(self, method: str): + status_code: int + if self.in_path(_NETWORK_ALIAS): + if self.in_path(_SUCCESS): + status_code = 200 + elif self.in_path(_ERROR): + status_code = 400 + elif self.in_path(_FAULT): + status_code = 500 + else: + status_code = 404 + else: + url: str = f"http://{_NETWORK_ALIAS}:{_PORT}/{_NETWORK_ALIAS}{self.path}" + response: Response = request(method, url, timeout=20) + status_code = response.status_code + self.send_response_only(status_code) + self.end_headers() + + def in_path(self, sub_path: str): + return sub_path in self.path + + +def main() -> None: + server_address: Tuple[str, int] = ("0.0.0.0", _PORT) + request_handler_class: type = RequestHandler + requests_server: ThreadingHTTPServer = ThreadingHTTPServer(server_address, request_handler_class) + atexit.register(requests_server.shutdown) + server_thread: Thread = Thread(target=requests_server.serve_forever) + server_thread.start() + print("Ready") + server_thread.join() + + +if __name__ == "__main__": + main() diff --git a/contract-tests/images/applications/requests/requirements.txt b/contract-tests/images/applications/requests/requirements.txt new file mode 100644 index 00000000..26d8b1c8 --- /dev/null +++ b/contract-tests/images/applications/requests/requirements.txt @@ -0,0 +1,4 @@ +opentelemetry-distro==0.46b0 +opentelemetry-exporter-otlp-proto-grpc==1.25.0 +typing-extensions==4.9.0 +requests~=2.0 diff --git a/contract-tests/images/mock-collector/Dockerfile b/contract-tests/images/mock-collector/Dockerfile new file mode 100644 index 00000000..bad4f42b --- /dev/null +++ b/contract-tests/images/mock-collector/Dockerfile @@ -0,0 +1,9 @@ +FROM python:3.10 +WORKDIR /mock-collector +COPY . /mock-collector + +ENV PIP_ROOT_USER_ACTION=ignore +RUN pip install --upgrade pip && pip install -r requirements.txt + +# Without `-u`, logs will be buffered and `wait_for_logs` will never return. +CMD ["python", "-u", "./mock_collector_server.py"] \ No newline at end of file diff --git a/contract-tests/images/mock-collector/README.md b/contract-tests/images/mock-collector/README.md new file mode 100644 index 00000000..75c6cb77 --- /dev/null +++ b/contract-tests/images/mock-collector/README.md @@ -0,0 +1,9 @@ +### Overview + +MockCollector mimics the behaviour of the actual OTEL collector, but stores export requests to be retrieved by contract tests. + +### Protos +To build protos: +1. Run `pip install grpcio grpcio-tools` +2. Change directory to `aws-otel-python-instrumentation/contract-tests/images/mock-collector/` +3. Run: `python -m grpc_tools.protoc -I./protos --python_out=. --pyi_out=. --grpc_python_out=. ./protos/mock_collector_service.proto` \ No newline at end of file diff --git a/contract-tests/images/mock-collector/mock_collector_client.py b/contract-tests/images/mock-collector/mock_collector_client.py new file mode 100644 index 00000000..21389cea --- /dev/null +++ b/contract-tests/images/mock-collector/mock_collector_client.py @@ -0,0 +1,143 @@ +# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +# SPDX-License-Identifier: Apache-2.0 +from datetime import datetime, timedelta +from logging import Logger, getLogger +from time import sleep +from typing import Callable, List, Set, TypeVar + +from google.protobuf.internal.containers import RepeatedScalarFieldContainer +from grpc import Channel, insecure_channel +from mock_collector_service_pb2 import ( + ClearRequest, + GetMetricsRequest, + GetMetricsResponse, + GetTracesRequest, + GetTracesResponse, +) +from mock_collector_service_pb2_grpc import MockCollectorServiceStub + +from opentelemetry.proto.collector.metrics.v1.metrics_service_pb2 import ExportMetricsServiceRequest +from opentelemetry.proto.collector.trace.v1.trace_service_pb2 import ExportTraceServiceRequest +from opentelemetry.proto.metrics.v1.metrics_pb2 import Metric, ResourceMetrics, ScopeMetrics +from opentelemetry.proto.trace.v1.trace_pb2 import ResourceSpans, ScopeSpans, Span + +_logger: Logger = getLogger(__name__) +_TIMEOUT_DELAY: timedelta = timedelta(seconds=20) +_WAIT_INTERVAL_SEC: float = 0.1 +T: TypeVar = TypeVar("T") + + +class ResourceScopeSpan: + """Data class used to correlate resources, scope and telemetry signals. + + Correlate resource, scope and span + """ + + def __init__(self, resource_spans: ResourceSpans, scope_spans: ScopeSpans, span: Span): + self.resource_spans: ResourceSpans = resource_spans + self.scope_spans: ScopeSpans = scope_spans + self.span: Span = span + + +class ResourceScopeMetric: + """Data class used to correlate resources, scope and telemetry signals. + + Correlate resource, scope and metric + """ + + def __init__(self, resource_metrics: ResourceMetrics, scope_metrics: ScopeMetrics, metric: Metric): + self.resource_metrics: ResourceMetrics = resource_metrics + self.scope_metrics: ScopeMetrics = scope_metrics + self.metric: Metric = metric + + +class MockCollectorClient: + """The mock collector client is used to interact with the Mock collector image, used in the tests.""" + + def __init__(self, mock_collector_address: str, mock_collector_port: str): + channel: Channel = insecure_channel(f"{mock_collector_address}:{mock_collector_port}") + self.client: MockCollectorServiceStub = MockCollectorServiceStub(channel) + + def clear_signals(self) -> None: + """Clear all the signals in the backend collector""" + self.client.clear(ClearRequest()) + + def get_traces(self) -> List[ResourceScopeSpan]: + """Get all traces that are currently stored in the collector + + Returns: + List of `ResourceScopeSpan` which is essentially a flat list containing all the spans and their related + scope and resources. + """ + + def get_export() -> List[ExportTraceServiceRequest]: + response: GetTracesResponse = self.client.get_traces(GetTracesRequest()) + serialized_traces: RepeatedScalarFieldContainer[bytes] = response.traces + return list(map(ExportTraceServiceRequest.FromString, serialized_traces)) + + def wait_condition(exported: List[ExportTraceServiceRequest], current: List[ExportTraceServiceRequest]) -> bool: + return 0 < len(exported) == len(current) + + exported_traces: List[ExportTraceServiceRequest] = _wait_for_content(get_export, wait_condition) + spans: List[ResourceScopeSpan] = [] + for exported_trace in exported_traces: + for resource_span in exported_trace.resource_spans: + for scope_span in resource_span.scope_spans: + for span in scope_span.spans: + spans.append(ResourceScopeSpan(resource_span, scope_span, span)) + return spans + + def get_metrics(self, present_metrics: Set[str]) -> List[ResourceScopeMetric]: + """Get all metrics that are currently stored in the mock collector. + + Returns: + List of `ResourceScopeMetric` which is a flat list containing all metrics and their related scope and + resources. + """ + + present_metrics_lower: Set[str] = {s.lower() for s in present_metrics} + + def get_export() -> List[ExportMetricsServiceRequest]: + response: GetMetricsResponse = self.client.get_metrics(GetMetricsRequest()) + serialized_metrics: RepeatedScalarFieldContainer[bytes] = response.metrics + return list(map(ExportMetricsServiceRequest.FromString, serialized_metrics)) + + def wait_condition( + exported: List[ExportMetricsServiceRequest], current: List[ExportMetricsServiceRequest] + ) -> bool: + received_metrics: Set[str] = set() + for exported_metric in current: + for resource_metric in exported_metric.resource_metrics: + for scope_metric in resource_metric.scope_metrics: + for metric in scope_metric.metrics: + received_metrics.add(metric.name.lower()) + return 0 < len(exported) == len(current) and present_metrics_lower.issubset(received_metrics) + + exported_metrics: List[ExportMetricsServiceRequest] = _wait_for_content(get_export, wait_condition) + metrics: List[ResourceScopeMetric] = [] + for exported_metric in exported_metrics: + for resource_metric in exported_metric.resource_metrics: + for scope_metric in resource_metric.scope_metrics: + for metric in scope_metric.metrics: + metrics.append(ResourceScopeMetric(resource_metric, scope_metric, metric)) + return metrics + + +def _wait_for_content(get_export: Callable[[], List[T]], wait_condition: Callable[[List[T], List[T]], bool]) -> List[T]: + # Verify that there is no more data to be received + deadline: datetime = datetime.now() + _TIMEOUT_DELAY + exported: List[T] = [] + + while deadline > datetime.now(): + try: + current_exported: List[T] = get_export() + if wait_condition(exported, current_exported): + return current_exported + exported = current_exported + + sleep(_WAIT_INTERVAL_SEC) + # pylint: disable=broad-exception-caught + except Exception: + _logger.exception("Error while reading content") + + raise RuntimeError("Timeout waiting for content") diff --git a/contract-tests/images/mock-collector/mock_collector_metrics_service.py b/contract-tests/images/mock-collector/mock_collector_metrics_service.py new file mode 100644 index 00000000..b20f6811 --- /dev/null +++ b/contract-tests/images/mock-collector/mock_collector_metrics_service.py @@ -0,0 +1,31 @@ +# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +# SPDX-License-Identifier: Apache-2.0 +from queue import Queue +from typing import List + +from grpc import ServicerContext +from typing_extensions import override + +from opentelemetry.proto.collector.metrics.v1.metrics_service_pb2 import ( + ExportMetricsServiceRequest, + ExportMetricsServiceResponse, +) +from opentelemetry.proto.collector.metrics.v1.metrics_service_pb2_grpc import MetricsServiceServicer + + +class MockCollectorMetricsService(MetricsServiceServicer): + _export_requests: Queue = Queue(maxsize=-1) + + def get_requests(self) -> List[ExportMetricsServiceRequest]: + with self._export_requests.mutex: + return list(self._export_requests.queue) + + def clear_requests(self) -> None: + with self._export_requests.mutex: + self._export_requests.queue.clear() + + @override + # pylint: disable=invalid-name + def Export(self, request: ExportMetricsServiceRequest, context: ServicerContext) -> ExportMetricsServiceResponse: + self._export_requests.put(request) + return ExportMetricsServiceResponse() diff --git a/contract-tests/images/mock-collector/mock_collector_server.py b/contract-tests/images/mock-collector/mock_collector_server.py new file mode 100644 index 00000000..21d60a1e --- /dev/null +++ b/contract-tests/images/mock-collector/mock_collector_server.py @@ -0,0 +1,35 @@ +# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +# SPDX-License-Identifier: Apache-2.0 +import atexit +from concurrent.futures import ThreadPoolExecutor + +from grpc import server +from mock_collector_metrics_service import MockCollectorMetricsService +from mock_collector_service import MockCollectorService +from mock_collector_service_pb2_grpc import add_MockCollectorServiceServicer_to_server +from mock_collector_trace_service import MockCollectorTraceService + +from opentelemetry.proto.collector.metrics.v1.metrics_service_pb2_grpc import add_MetricsServiceServicer_to_server +from opentelemetry.proto.collector.trace.v1.trace_service_pb2_grpc import add_TraceServiceServicer_to_server + + +def main() -> None: + mock_collector_server: server = server(thread_pool=ThreadPoolExecutor(max_workers=10)) + mock_collector_server.add_insecure_port("0.0.0.0:4315") + + trace_collector: MockCollectorTraceService = MockCollectorTraceService() + metrics_collector: MockCollectorMetricsService = MockCollectorMetricsService() + mock_collector: MockCollectorService = MockCollectorService(trace_collector, metrics_collector) + + add_TraceServiceServicer_to_server(trace_collector, mock_collector_server) + add_MetricsServiceServicer_to_server(metrics_collector, mock_collector_server) + add_MockCollectorServiceServicer_to_server(mock_collector, mock_collector_server) + + mock_collector_server.start() + atexit.register(mock_collector_server.stop, None) + print("Ready") + mock_collector_server.wait_for_termination(None) + + +if __name__ == "__main__": + main() diff --git a/contract-tests/images/mock-collector/mock_collector_service.py b/contract-tests/images/mock-collector/mock_collector_service.py new file mode 100644 index 00000000..bc5fe0e9 --- /dev/null +++ b/contract-tests/images/mock-collector/mock_collector_service.py @@ -0,0 +1,52 @@ +# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +# SPDX-License-Identifier: Apache-2.0 +from typing import List + +from grpc import ServicerContext +from mock_collector_metrics_service import MockCollectorMetricsService +from mock_collector_service_pb2 import ( + ClearRequest, + ClearResponse, + GetMetricsRequest, + GetMetricsResponse, + GetTracesRequest, + GetTracesResponse, +) +from mock_collector_service_pb2_grpc import MockCollectorServiceServicer +from mock_collector_trace_service import MockCollectorTraceService +from typing_extensions import override + +from opentelemetry.proto.collector.metrics.v1.metrics_service_pb2 import ExportMetricsServiceRequest +from opentelemetry.proto.collector.trace.v1.trace_service_pb2 import ExportTraceServiceRequest + + +class MockCollectorService(MockCollectorServiceServicer): + """Implements clear, get_traces, and get_metrics for the mock collector. + + Relies on metrics and trace collector services to collect the telemetry. + """ + + def __init__(self, trace_collector: MockCollectorTraceService, metrics_collector: MockCollectorMetricsService): + super().__init__() + self.trace_collector: MockCollectorTraceService = trace_collector + self.metrics_collector: MockCollectorMetricsService = metrics_collector + + @override + def clear(self, request: ClearRequest, context: ServicerContext) -> ClearResponse: + self.trace_collector.clear_requests() + self.metrics_collector.clear_requests() + return ClearResponse() + + @override + def get_traces(self, request: GetTracesRequest, context: ServicerContext) -> GetTracesResponse: + trace_requests: List[ExportTraceServiceRequest] = self.trace_collector.get_requests() + traces: List[bytes] = list(map(ExportTraceServiceRequest.SerializeToString, trace_requests)) + response: GetTracesResponse = GetTracesResponse(traces=traces) + return response + + @override + def get_metrics(self, request: GetMetricsRequest, context: ServicerContext) -> GetMetricsResponse: + metric_requests: List[ExportMetricsServiceRequest] = self.metrics_collector.get_requests() + metrics: List[bytes] = list(map(ExportTraceServiceRequest.SerializeToString, metric_requests)) + response: GetMetricsResponse = GetMetricsResponse(metrics=metrics) + return response diff --git a/contract-tests/images/mock-collector/mock_collector_service_pb2.py b/contract-tests/images/mock-collector/mock_collector_service_pb2.py new file mode 100644 index 00000000..2e519e57 --- /dev/null +++ b/contract-tests/images/mock-collector/mock_collector_service_pb2.py @@ -0,0 +1,38 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: mock_collector_service.proto +# Protobuf Python Version: 4.25.0 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1cmock_collector_service.proto\"\x0e\n\x0c\x43learRequest\"\x0f\n\rClearResponse\"\x12\n\x10GetTracesRequest\"#\n\x11GetTracesResponse\x12\x0e\n\x06traces\x18\x01 \x03(\x0c\"\x13\n\x11GetMetricsRequest\"%\n\x12GetMetricsResponse\x12\x0f\n\x07metrics\x18\x01 \x03(\x0c\x32\xb1\x01\n\x14MockCollectorService\x12(\n\x05\x63lear\x12\r.ClearRequest\x1a\x0e.ClearResponse\"\x00\x12\x35\n\nget_traces\x12\x11.GetTracesRequest\x1a\x12.GetTracesResponse\"\x00\x12\x38\n\x0bget_metrics\x12\x12.GetMetricsRequest\x1a\x13.GetMetricsResponse\"\x00\x62\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'mock_collector_service_pb2', _globals) +if _descriptor._USE_C_DESCRIPTORS == False: + DESCRIPTOR._options = None + _globals['_CLEARREQUEST']._serialized_start=32 + _globals['_CLEARREQUEST']._serialized_end=46 + _globals['_CLEARRESPONSE']._serialized_start=48 + _globals['_CLEARRESPONSE']._serialized_end=63 + _globals['_GETTRACESREQUEST']._serialized_start=65 + _globals['_GETTRACESREQUEST']._serialized_end=83 + _globals['_GETTRACESRESPONSE']._serialized_start=85 + _globals['_GETTRACESRESPONSE']._serialized_end=120 + _globals['_GETMETRICSREQUEST']._serialized_start=122 + _globals['_GETMETRICSREQUEST']._serialized_end=141 + _globals['_GETMETRICSRESPONSE']._serialized_start=143 + _globals['_GETMETRICSRESPONSE']._serialized_end=180 + _globals['_MOCKCOLLECTORSERVICE']._serialized_start=183 + _globals['_MOCKCOLLECTORSERVICE']._serialized_end=360 +# @@protoc_insertion_point(module_scope) diff --git a/contract-tests/images/mock-collector/mock_collector_service_pb2.pyi b/contract-tests/images/mock-collector/mock_collector_service_pb2.pyi new file mode 100644 index 00000000..76bd1d24 --- /dev/null +++ b/contract-tests/images/mock-collector/mock_collector_service_pb2.pyi @@ -0,0 +1,34 @@ +from google.protobuf.internal import containers as _containers +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from typing import ClassVar as _ClassVar, Iterable as _Iterable, Optional as _Optional + +DESCRIPTOR: _descriptor.FileDescriptor + +class ClearRequest(_message.Message): + __slots__ = () + def __init__(self) -> None: ... + +class ClearResponse(_message.Message): + __slots__ = () + def __init__(self) -> None: ... + +class GetTracesRequest(_message.Message): + __slots__ = () + def __init__(self) -> None: ... + +class GetTracesResponse(_message.Message): + __slots__ = ("traces",) + TRACES_FIELD_NUMBER: _ClassVar[int] + traces: _containers.RepeatedScalarFieldContainer[bytes] + def __init__(self, traces: _Optional[_Iterable[bytes]] = ...) -> None: ... + +class GetMetricsRequest(_message.Message): + __slots__ = () + def __init__(self) -> None: ... + +class GetMetricsResponse(_message.Message): + __slots__ = ("metrics",) + METRICS_FIELD_NUMBER: _ClassVar[int] + metrics: _containers.RepeatedScalarFieldContainer[bytes] + def __init__(self, metrics: _Optional[_Iterable[bytes]] = ...) -> None: ... diff --git a/contract-tests/images/mock-collector/mock_collector_service_pb2_grpc.py b/contract-tests/images/mock-collector/mock_collector_service_pb2_grpc.py new file mode 100644 index 00000000..d25f8fa6 --- /dev/null +++ b/contract-tests/images/mock-collector/mock_collector_service_pb2_grpc.py @@ -0,0 +1,138 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc + +import mock_collector_service_pb2 as mock__collector__service__pb2 + + +class MockCollectorServiceStub(object): + """Service definition for mock collector + """ + + def __init__(self, channel): + """Constructor. + + Args: + channel: A grpc.Channel. + """ + self.clear = channel.unary_unary( + '/MockCollectorService/clear', + request_serializer=mock__collector__service__pb2.ClearRequest.SerializeToString, + response_deserializer=mock__collector__service__pb2.ClearResponse.FromString, + ) + self.get_traces = channel.unary_unary( + '/MockCollectorService/get_traces', + request_serializer=mock__collector__service__pb2.GetTracesRequest.SerializeToString, + response_deserializer=mock__collector__service__pb2.GetTracesResponse.FromString, + ) + self.get_metrics = channel.unary_unary( + '/MockCollectorService/get_metrics', + request_serializer=mock__collector__service__pb2.GetMetricsRequest.SerializeToString, + response_deserializer=mock__collector__service__pb2.GetMetricsResponse.FromString, + ) + + +class MockCollectorServiceServicer(object): + """Service definition for mock collector + """ + + def clear(self, request, context): + """Clears all traces and metrics captured by mock collector, so it can be used for multiple tests. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def get_traces(self, request, context): + """Returns traces exported to mock collector + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def get_metrics(self, request, context): + """Returns metrics exported to mock collector + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + +def add_MockCollectorServiceServicer_to_server(servicer, server): + rpc_method_handlers = { + 'clear': grpc.unary_unary_rpc_method_handler( + servicer.clear, + request_deserializer=mock__collector__service__pb2.ClearRequest.FromString, + response_serializer=mock__collector__service__pb2.ClearResponse.SerializeToString, + ), + 'get_traces': grpc.unary_unary_rpc_method_handler( + servicer.get_traces, + request_deserializer=mock__collector__service__pb2.GetTracesRequest.FromString, + response_serializer=mock__collector__service__pb2.GetTracesResponse.SerializeToString, + ), + 'get_metrics': grpc.unary_unary_rpc_method_handler( + servicer.get_metrics, + request_deserializer=mock__collector__service__pb2.GetMetricsRequest.FromString, + response_serializer=mock__collector__service__pb2.GetMetricsResponse.SerializeToString, + ), + } + generic_handler = grpc.method_handlers_generic_handler( + 'MockCollectorService', rpc_method_handlers) + server.add_generic_rpc_handlers((generic_handler,)) + + + # This class is part of an EXPERIMENTAL API. +class MockCollectorService(object): + """Service definition for mock collector + """ + + @staticmethod + def clear(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/MockCollectorService/clear', + mock__collector__service__pb2.ClearRequest.SerializeToString, + mock__collector__service__pb2.ClearResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def get_traces(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/MockCollectorService/get_traces', + mock__collector__service__pb2.GetTracesRequest.SerializeToString, + mock__collector__service__pb2.GetTracesResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def get_metrics(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/MockCollectorService/get_metrics', + mock__collector__service__pb2.GetMetricsRequest.SerializeToString, + mock__collector__service__pb2.GetMetricsResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) diff --git a/contract-tests/images/mock-collector/mock_collector_trace_service.py b/contract-tests/images/mock-collector/mock_collector_trace_service.py new file mode 100644 index 00000000..68ed9a03 --- /dev/null +++ b/contract-tests/images/mock-collector/mock_collector_trace_service.py @@ -0,0 +1,31 @@ +# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +# SPDX-License-Identifier: Apache-2.0 +from queue import Queue +from typing import List + +from grpc import ServicerContext +from typing_extensions import override + +from opentelemetry.proto.collector.trace.v1.trace_service_pb2 import ( + ExportTraceServiceRequest, + ExportTraceServiceResponse, +) +from opentelemetry.proto.collector.trace.v1.trace_service_pb2_grpc import TraceServiceServicer + + +class MockCollectorTraceService(TraceServiceServicer): + _export_requests: Queue = Queue(maxsize=-1) + + def get_requests(self) -> List[ExportTraceServiceRequest]: + with self._export_requests.mutex: + return list(self._export_requests.queue) + + def clear_requests(self) -> None: + with self._export_requests.mutex: + self._export_requests.queue.clear() + + @override + # pylint: disable=invalid-name + def Export(self, request: ExportTraceServiceRequest, context: ServicerContext) -> ExportTraceServiceResponse: + self._export_requests.put(request) + return ExportTraceServiceResponse() diff --git a/contract-tests/images/mock-collector/protos/mock_collector_service.proto b/contract-tests/images/mock-collector/protos/mock_collector_service.proto new file mode 100644 index 00000000..d7187c44 --- /dev/null +++ b/contract-tests/images/mock-collector/protos/mock_collector_service.proto @@ -0,0 +1,35 @@ +syntax = "proto3"; + +// Service definition for mock collector +service MockCollectorService { + // Clears all traces and metrics captured by mock collector, so it can be used for multiple tests. + rpc clear (ClearRequest) returns (ClearResponse) {} + + // Returns traces exported to mock collector + rpc get_traces (GetTracesRequest) returns (GetTracesResponse) {} + + // Returns metrics exported to mock collector + rpc get_metrics (GetMetricsRequest) returns (GetMetricsResponse) {} +} + +// Empty request for clear rpc. +message ClearRequest {} + +// Empty response for clear rpc. +message ClearResponse {} + +// Empty request for get traces rpc. +message GetTracesRequest {} + +// Response for get traces rpc - all traces in byte form. +message GetTracesResponse{ + repeated bytes traces = 1; +} + +// Empty request for get metrics rpc. +message GetMetricsRequest {} + +// Response for get metrics rpc - all metrics in byte form. +message GetMetricsResponse { + repeated bytes metrics = 1; +} \ No newline at end of file diff --git a/contract-tests/images/mock-collector/pyproject.toml b/contract-tests/images/mock-collector/pyproject.toml new file mode 100644 index 00000000..76227044 --- /dev/null +++ b/contract-tests/images/mock-collector/pyproject.toml @@ -0,0 +1,24 @@ +[build-system] +requires = ["hatchling"] +build-backend = "hatchling.build" + +[project] +name = "mock-collector" +description = "Mock Collector used by contract tests for AWS OTEL Python Instrumentation" +version = "1.0.0" +license = "Apache-2.0" +requires-python = ">=3.8" + +dependencies = [ + "grpcio ~= 1.60.0", + "opentelemetry-proto==1.25.0", + "opentelemetry-sdk==1.25.0", + "protobuf==4.25.2", + "typing-extensions==4.9.0" +] + +[tool.hatch.build.targets.sdist] +include = ["*.py"] + +[tool.hatch.build.targets.wheel] +include = ["*.py"] diff --git a/contract-tests/images/mock-collector/requirements.txt b/contract-tests/images/mock-collector/requirements.txt new file mode 100644 index 00000000..e536e81f --- /dev/null +++ b/contract-tests/images/mock-collector/requirements.txt @@ -0,0 +1,5 @@ +grpcio==1.60.1 +opentelemetry-proto==1.25.0 +opentelemetry-sdk==1.25.0 +protobuf==4.25.2 +typing-extensions==4.9.0 \ No newline at end of file diff --git a/contract-tests/tests/pyproject.toml b/contract-tests/tests/pyproject.toml new file mode 100644 index 00000000..f648ab2a --- /dev/null +++ b/contract-tests/tests/pyproject.toml @@ -0,0 +1,35 @@ +[build-system] +requires = ["hatchling"] +build-backend = "hatchling.build" + +[project] +name = "contract-tests" +description = "Contract tests for AWS OTEL NodeJS Instrumentation" +version = "1.0.0" +license = "Apache-2.0" +requires-python = ">=3.8" + +dependencies = [ + "opentelemetry-proto==1.25.0", + "opentelemetry-sdk==1.25.0", + "testcontainers==3.7.1", + "grpcio==1.60.0", + "docker==7.1.0", + "mock-collector==1.0.0", + "requests==2.32.2" +] + +[project.optional-dependencies] +test = [] + +[tool.hatch.build.targets.sdist] +include = ["/test"] + +[tool.hatch.build.targets.wheel] +packages = ["test/amazon"] + +[tool.pytest.ini_options] +log_cli = true +log_cli_level = "INFO" +log_cli_format = "%(asctime)s [%(levelname)8s] %(message)s (%(filename)s:%(lineno)s)" +log_cli_date_format = "%Y-%m-%d %H:%M:%S" \ No newline at end of file diff --git a/contract-tests/tests/test/amazon/base/contract_test_base.py b/contract-tests/tests/test/amazon/base/contract_test_base.py new file mode 100644 index 00000000..77b907ba --- /dev/null +++ b/contract-tests/tests/test/amazon/base/contract_test_base.py @@ -0,0 +1,311 @@ +# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +# SPDX-License-Identifier: Apache-2.0 +import time +from logging import INFO, Logger, getLogger +from typing import Dict, List +from unittest import TestCase + +from docker import DockerClient +from docker.models.networks import Network, NetworkCollection +from docker.types import EndpointConfig +from mock_collector_client import MockCollectorClient, ResourceScopeMetric, ResourceScopeSpan +from requests import Response, request +from testcontainers.core.container import DockerContainer +from testcontainers.core.waiting_utils import wait_for_logs +from typing_extensions import override + +from amazon.utils.application_signals_constants import ERROR_METRIC, FAULT_METRIC, LATENCY_METRIC +from opentelemetry.proto.common.v1.common_pb2 import AnyValue, KeyValue + +NETWORK_NAME: str = "aws-application-signals-network" + +_logger: Logger = getLogger(__name__) +_logger.setLevel(INFO) +_MOCK_COLLECTOR_ALIAS: str = "collector" +_MOCK_COLLECTOR_NAME: str = "aws-application-signals-mock-collector-nodejs" +_MOCK_COLLECTOR_PORT: int = 4315 + +def can_convert_any_value_to_string(any_value_instance): + field_name = any_value_instance.WhichOneof('value') + + if field_name in ['string_value', 'bool_value', 'int_value', 'double_value']: + return True + + elif field_name == 'bytes_value': + # Check if bytes can be decoded to a string + try: + any_value_instance.bytes_value.decode('utf-8') + return True + except UnicodeDecodeError: + return False + + elif field_name == 'array_value': + # Check if all elements can be converted + return all(can_convert_any_value_to_string(item) for item in any_value_instance.array_value.values) + + elif field_name == 'kvlist_value': + # Check if all values can be converted + return all(can_convert_any_value_to_string(kv.value) for kv in any_value_instance.kvlist_value.values) + + else: + # Unknown field; cannot determine + return False + + +def any_value_to_string(any_value_instance): + field_name = any_value_instance.WhichOneof('value') + + if field_name == 'string_value': + # Already a string + return any_value_instance.string_value + + elif field_name == 'bool_value': + # Convert boolean to string + return str(any_value_instance.bool_value) + + elif field_name == 'int_value': + # Convert integer to string + return str(any_value_instance.int_value) + + elif field_name == 'double_value': + # Convert double to string + return str(any_value_instance.double_value) + + elif field_name == 'bytes_value': + # Attempt to decode bytes to string + try: + return any_value_instance.bytes_value.decode('utf-8') + except UnicodeDecodeError: + # Handle decoding error + return None + + elif field_name == 'array_value': + # Convert each element in the array to string + elements = [] + for item in any_value_instance.array_value.values: + item_str = any_value_to_string(item) + if item_str is not None: + elements.append(item_str) + else: + # Cannot convert an element; return None or handle accordingly + return None + return '[' + ', '.join(elements) + ']' + + elif field_name == 'kvlist_value': + # Convert each key-value pair to string + kv_pairs = [] + for kv in any_value_instance.kvlist_value.values: + key = kv.key + value_str = any_value_to_string(kv.value) + if value_str is not None: + kv_pairs.append(f'"{key}": {value_str}') + else: + # Cannot convert a value; return None or handle accordingly + return None + return '{' + ', '.join(kv_pairs) + '}' + + else: + # No field is set or unknown field; cannot convert + return None + +# pylint: disable=broad-exception-caught +class ContractTestBase(TestCase): + """Base class for implementing a contract test. + + This class will create all the boilerplate necessary to run a contract test. It will: 1.Create a mock collector + container that receives telemetry data of the application being tested. 2. Create an application container which + will be used to exercise the library under test. + + Several methods are provided that can be overridden to customize the test scenario. + """ + + application: DockerContainer + mock_collector: DockerContainer + mock_collector_client: MockCollectorClient + network: Network + + @classmethod + @override + def setUpClass(cls) -> None: + cls.addClassCleanup(cls.class_tear_down) + cls.network = NetworkCollection(client=DockerClient()).create(NETWORK_NAME) + mock_collector_networking_config: Dict[str, EndpointConfig] = { + NETWORK_NAME: EndpointConfig(version="1.22", aliases=[_MOCK_COLLECTOR_ALIAS]) + } + cls.mock_collector: DockerContainer = ( + DockerContainer(_MOCK_COLLECTOR_NAME) + .with_exposed_ports(_MOCK_COLLECTOR_PORT) + .with_name(_MOCK_COLLECTOR_NAME) + .with_kwargs(network=NETWORK_NAME, networking_config=mock_collector_networking_config) + ) + cls.mock_collector.start() + wait_for_logs(cls.mock_collector, "Ready", timeout=20) + cls.set_up_dependency_container() + + @classmethod + def class_tear_down(cls) -> None: + try: + cls.tear_down_dependency_container() + except Exception: + _logger.exception("Failed to tear down dependency container") + + try: + _logger.info("MockCollector stdout") + _logger.info(cls.mock_collector.get_logs()[0].decode()) + _logger.info("MockCollector stderr") + _logger.info(cls.mock_collector.get_logs()[1].decode()) + cls.mock_collector.stop() + except Exception: + _logger.exception("Failed to tear down mock collector") + + cls.network.remove() + + @override + def setUp(self) -> None: + self.addCleanup(self.tear_down) + application_networking_config: Dict[str, EndpointConfig] = { + NETWORK_NAME: EndpointConfig(version="1.22", aliases=self.get_application_network_aliases()) + } + self.application: DockerContainer = ( + DockerContainer(self.get_application_image_name()) + .with_exposed_ports(self.get_application_port()) + .with_env("OTEL_METRIC_EXPORT_INTERVAL", "1000") + .with_env("OTEL_AWS_APPLICATION_SIGNALS_ENABLED", "true") + .with_env("OTEL_METRICS_EXPORTER", "none") + .with_env("OTEL_EXPORTER_OTLP_PROTOCOL", "grpc") + .with_env("OTEL_BSP_SCHEDULE_DELAY", "1") + .with_env("OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT", f"http://collector:{_MOCK_COLLECTOR_PORT}") + .with_env("OTEL_EXPORTER_OTLP_TRACES_ENDPOINT", f"http://collector:{_MOCK_COLLECTOR_PORT}") + .with_env("OTEL_RESOURCE_ATTRIBUTES", self.get_application_otel_resource_attributes()) + .with_env("OTEL_TRACES_SAMPLER", "always_on") + .with_kwargs(network=NETWORK_NAME, networking_config=application_networking_config) + .with_name(self.get_application_image_name()) + ) + + extra_env: Dict[str, str] = self.get_application_extra_environment_variables() + for key in extra_env: + self.application.with_env(key, extra_env.get(key)) + self.application.start() + wait_for_logs(self.application, self.get_application_wait_pattern(), timeout=20) + self.mock_collector_client: MockCollectorClient = MockCollectorClient( + self.mock_collector.get_container_host_ip(), self.mock_collector.get_exposed_port(_MOCK_COLLECTOR_PORT) + ) + # Sleep for 100ms to ensure any startup metrics have been exported + # time.sleep(0.1) + time.sleep(5) + # Clear all start up metrics, so tests are only testing telemetry generated by their invocations. + self.mock_collector_client.clear_signals() + + def tear_down(self) -> None: + try: + _logger.info("Application stdout") + _logger.info(self.application.get_logs()[0].decode()) + _logger.info("Application stderr") + _logger.info(self.application.get_logs()[1].decode()) + self.application.stop() + except Exception: + _logger.exception("Failed to tear down application") + + self.mock_collector_client.clear_signals() + + def do_test_requests( + self, path: str, method: str, status_code: int, expected_error: int, expected_fault: int, **kwargs + ) -> None: + response: Response = self.send_request(method, path) + self.assertEqual(status_code, response.status_code) + + resource_scope_spans: List[ResourceScopeSpan] = self.mock_collector_client.get_traces() + self._assert_aws_span_attributes(resource_scope_spans, path, **kwargs) + self._assert_semantic_conventions_span_attributes(resource_scope_spans, method, path, status_code, **kwargs) + + metrics: List[ResourceScopeMetric] = self.mock_collector_client.get_metrics( + {LATENCY_METRIC, ERROR_METRIC, FAULT_METRIC} + ) + self._assert_metric_attributes(metrics, LATENCY_METRIC, 5000, **kwargs) + self._assert_metric_attributes(metrics, ERROR_METRIC, expected_error, **kwargs) + self._assert_metric_attributes(metrics, FAULT_METRIC, expected_fault, **kwargs) + + def send_request(self, method, path) -> Response: + address: str = self.application.get_container_host_ip() + port: str = self.application.get_exposed_port(self.get_application_port()) + url: str = f"http://{address}:{port}/{path}" + _logger.info("send request to url: " + url) + return request(method, url, timeout=20) + + def _get_attributes_dict(self, attributes_list: List[KeyValue]) -> Dict[str, AnyValue]: + _logger.info("Get the attributes dictionary ==============") + attributes_dict: Dict[str, AnyValue] = {} + for attribute in attributes_list: + key: str = attribute.key + value: AnyValue = attribute.value + # if can_convert_any_value_to_string(value): + _logger.info("key: " + key + " value: " + any_value_to_string(value)) + + if key in attributes_dict: + old_value: AnyValue = attributes_dict[key] + self.fail(f"Attribute {key} unexpectedly duplicated. Value 1: {old_value} Value 2: {value}") + attributes_dict[key] = value + return attributes_dict + + def _assert_str_attribute(self, attributes_dict: Dict[str, AnyValue], key: str, expected_value: str): + self.assertIn(key, attributes_dict) + actual_value: AnyValue = attributes_dict[key] + self.assertIsNotNone(actual_value) + self.assertEqual(expected_value, actual_value.string_value) + + def _assert_int_attribute(self, attributes_dict: Dict[str, AnyValue], key: str, expected_value: int) -> None: + self.assertIn(key, attributes_dict) + actual_value: AnyValue = attributes_dict[key] + self.assertIsNotNone(actual_value) + self.assertEqual(expected_value, actual_value.int_value) + + def check_sum(self, metric_name: str, actual_sum: float, expected_sum: float) -> None: + if metric_name is LATENCY_METRIC: + self.assertTrue(0 < actual_sum < expected_sum) + else: + self.assertEqual(actual_sum, expected_sum) + + # pylint: disable=no-self-use + # Methods that should be overridden in subclasses + @classmethod + def set_up_dependency_container(cls): + return + + @classmethod + def tear_down_dependency_container(cls): + return + + def get_application_port(self) -> int: + return 8080 + + def get_application_extra_environment_variables(self) -> Dict[str, str]: + return {} + + def get_application_network_aliases(self) -> List[str]: + return [] + + @staticmethod + def get_application_image_name() -> str: + return None + + def get_application_wait_pattern(self) -> str: + return "Ready" + + def get_application_otel_service_name(self) -> str: + return self.get_application_image_name() + + def get_application_otel_resource_attributes(self) -> str: + return "service.name=" + self.get_application_otel_service_name() + + def _assert_aws_span_attributes(self, resource_scope_spans: List[ResourceScopeSpan], path: str, **kwargs): + self.fail("Tests must implement this function") + + def _assert_semantic_conventions_span_attributes( + self, resource_scope_spans: List[ResourceScopeSpan], method: str, path: str, status_code: int, **kwargs + ): + self.fail("Tests must implement this function") + + def _assert_metric_attributes( + self, resource_scope_metrics: List[ResourceScopeMetric], metric_name: str, expected_sum: int, **kwargs + ): + self.fail("Tests must implement this function") diff --git a/contract-tests/tests/test/amazon/base/database_contract_test_base.py b/contract-tests/tests/test/amazon/base/database_contract_test_base.py new file mode 100644 index 00000000..7b7100ad --- /dev/null +++ b/contract-tests/tests/test/amazon/base/database_contract_test_base.py @@ -0,0 +1,159 @@ +# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +# SPDX-License-Identifier: Apache-2.0 +from typing import Dict, List + +from mock_collector_client import ResourceScopeMetric, ResourceScopeSpan +from typing_extensions import override + +from amazon.base.contract_test_base import ContractTestBase +from amazon.utils.application_signals_constants import ( + AWS_LOCAL_OPERATION, + AWS_LOCAL_SERVICE, + AWS_REMOTE_DB_USER, + AWS_REMOTE_OPERATION, + AWS_REMOTE_RESOURCE_IDENTIFIER, + AWS_REMOTE_RESOURCE_TYPE, + AWS_REMOTE_SERVICE, + AWS_SPAN_KIND, +) +from opentelemetry.proto.common.v1.common_pb2 import AnyValue, KeyValue +from opentelemetry.proto.metrics.v1.metrics_pb2 import ExponentialHistogramDataPoint, Metric +from opentelemetry.proto.trace.v1.trace_pb2 import Span +from opentelemetry.trace import StatusCode + +DATABASE_HOST: str = "mydb" +DATABASE_NAME: str = "testdb" +DATABASE_PASSWORD: str = "example" +DATABASE_USER: str = "root" +SPAN_KIND_CLIENT: str = "CLIENT" +SPAN_KIND_LOCAL_ROOT: str = "LOCAL_ROOT" + + +class DatabaseContractTestBase(ContractTestBase): + @staticmethod + def get_remote_service() -> str: + return None + + @staticmethod + def get_database_port() -> int: + return None + + def get_remote_resource_identifier(self) -> str: + return f"{DATABASE_NAME}|{DATABASE_HOST}|{self.get_database_port()}" + + @override + def get_application_extra_environment_variables(self) -> Dict[str, str]: + return { + "DB_HOST": DATABASE_HOST, + "DB_USER": DATABASE_USER, + "DB_PASS": DATABASE_PASSWORD, + "DB_NAME": DATABASE_NAME, + } + + def assert_drop_table_succeeds(self) -> None: + self.mock_collector_client.clear_signals() + self.do_test_requests("drop_table", "GET", 200, 0, 0, sql_command="DROP TABLE") + + def assert_create_database_succeeds(self) -> None: + self.mock_collector_client.clear_signals() + self.do_test_requests("create_database", "GET", 200, 0, 0, sql_command="CREATE DATABASE") + + def assert_select_succeeds(self) -> None: + self.mock_collector_client.clear_signals() + self.do_test_requests("select", "GET", 200, 0, 0, sql_command="SELECT") + + def assert_fault(self) -> None: + self.mock_collector_client.clear_signals() + self.do_test_requests("fault", "GET", 500, 0, 1, sql_command="SELECT DISTINCT") + + @override + def _assert_aws_span_attributes(self, resource_scope_spans: List[ResourceScopeSpan], path: str, **kwargs) -> None: + target_spans: List[Span] = [] + for resource_scope_span in resource_scope_spans: + # pylint: disable=no-member + if resource_scope_span.span.kind == Span.SPAN_KIND_CLIENT: + target_spans.append(resource_scope_span.span) + + self.assertEqual( + len(target_spans), 1, f"target_spans is {str(target_spans)}, although only one walue was expected" + ) + self._assert_aws_attributes(target_spans[0].attributes, **kwargs) + + @override + def _assert_semantic_conventions_span_attributes( + self, resource_scope_spans: List[ResourceScopeSpan], method: str, path: str, status_code: int, **kwargs + ) -> None: + target_spans: List[Span] = [] + for resource_scope_span in resource_scope_spans: + # pylint: disable=no-member + if resource_scope_span.span.kind == Span.SPAN_KIND_CLIENT: + target_spans.append(resource_scope_span.span) + + self.assertEqual(target_spans[0].name, kwargs.get("sql_command").split()[0]) + if status_code == 200: + self.assertEqual(target_spans[0].status.code, StatusCode.UNSET.value) + else: + self.assertEqual(target_spans[0].status.code, StatusCode.ERROR.value) + + self._assert_semantic_conventions_attributes(target_spans[0].attributes, kwargs.get("sql_command")) + + def _assert_semantic_conventions_attributes(self, attributes_list: List[KeyValue], command: str) -> None: + attributes_dict: Dict[str, AnyValue] = self._get_attributes_dict(attributes_list) + self.assertTrue(attributes_dict.get("db.statement").string_value.startswith(command)) + self._assert_str_attribute(attributes_dict, "db.system", self.get_remote_service()) + self._assert_str_attribute(attributes_dict, "db.name", DATABASE_NAME) + self._assert_str_attribute(attributes_dict, "net.peer.name", DATABASE_HOST) + self._assert_int_attribute(attributes_dict, "net.peer.port", self.get_database_port()) + self.assertTrue("server.address" not in attributes_dict) + self.assertTrue("server.port" not in attributes_dict) + self.assertTrue("db.operation" not in attributes_dict) + + @override + def _assert_aws_attributes( + self, attributes_list: List[KeyValue], expected_span_kind: str = SPAN_KIND_LOCAL_ROOT, **kwargs + ) -> None: + attributes_dict: Dict[str, AnyValue] = self._get_attributes_dict(attributes_list) + self._assert_str_attribute(attributes_dict, AWS_LOCAL_SERVICE, self.get_application_otel_service_name()) + # InternalOperation as OTEL does not instrument the basic server we are using, so the client span is a local + # root. + self._assert_str_attribute(attributes_dict, AWS_LOCAL_OPERATION, "InternalOperation") + self._assert_str_attribute(attributes_dict, AWS_REMOTE_SERVICE, self.get_remote_service()) + self._assert_str_attribute(attributes_dict, AWS_REMOTE_OPERATION, kwargs.get("sql_command")) + self._assert_str_attribute(attributes_dict, AWS_REMOTE_RESOURCE_TYPE, "DB::Connection") + self._assert_str_attribute(attributes_dict, AWS_REMOTE_DB_USER, DATABASE_USER) + self._assert_str_attribute( + attributes_dict, AWS_REMOTE_RESOURCE_IDENTIFIER, self.get_remote_resource_identifier() + ) + # See comment above AWS_LOCAL_OPERATION + self._assert_str_attribute(attributes_dict, AWS_SPAN_KIND, expected_span_kind) + + @override + def _assert_metric_attributes( + self, resource_scope_metrics: List[ResourceScopeMetric], metric_name: str, expected_sum: int, **kwargs + ) -> None: + target_metrics: List[Metric] = [] + for resource_scope_metric in resource_scope_metrics: + if resource_scope_metric.metric.name.lower() == metric_name.lower(): + target_metrics.append(resource_scope_metric.metric) + self.assertLessEqual( + len(target_metrics), + 2, + f"target_metrics is {str(target_metrics)}, although we expect less than or equal to 2 metrics", + ) + dp_list: List[ExponentialHistogramDataPoint] = [ + dp for target_metric in target_metrics for dp in target_metric.exponential_histogram.data_points + ] + self.assertEqual(len(dp_list), 2) + dependency_dp: ExponentialHistogramDataPoint = dp_list[0] + service_dp: ExponentialHistogramDataPoint = dp_list[1] + if len(dp_list[1].attributes) > len(dp_list[0].attributes): + dependency_dp = dp_list[1] + service_dp = dp_list[0] + self._assert_aws_attributes(dependency_dp.attributes, SPAN_KIND_CLIENT, **kwargs) + self.check_sum(metric_name, dependency_dp.sum, expected_sum) + + attribute_dict: Dict[str, AnyValue] = self._get_attributes_dict(service_dp.attributes) + # See comment on AWS_LOCAL_OPERATION in _assert_aws_attributes + self._assert_str_attribute(attribute_dict, AWS_LOCAL_OPERATION, "InternalOperation") + self._assert_str_attribute(attribute_dict, AWS_SPAN_KIND, SPAN_KIND_LOCAL_ROOT) + self.check_sum(metric_name, service_dp.sum, expected_sum) diff --git a/contract-tests/tests/test/amazon/http/__pycache__/http_test.cpython-312-pytest-8.3.2.pyc b/contract-tests/tests/test/amazon/http/__pycache__/http_test.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9fe2188559579e5a348ed9be643d04de26b82b82 GIT binary patch literal 10482 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 literal 0 HcmV?d00001 diff --git a/contract-tests/tests/test/amazon/http/__pycache__/http_test.cpython-312-pytest-8.3.3.pyc b/contract-tests/tests/test/amazon/http/__pycache__/http_test.cpython-312-pytest-8.3.3.pyc new file mode 100644 index 0000000000000000000000000000000000000000..26af07f4475e67e3a0a50f6914bf17f27a5dd794 GIT binary patch literal 9493 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 str: + return "aws-application-signals-tests-http-app" + + @override + def get_application_network_aliases(self) -> List[str]: + """ + This will be the target hostname of the clients making http requests in the application image, so that they + don't use localhost. + """ + return ["backend"] + + @override + def get_application_extra_environment_variables(self) -> Dict[str, str]: + """ + This does not appear to do anything, as it does not seem that OTEL supports peer service for Python. Keeping + for consistency with Java contract tests at this time. + """ + return {"OTEL_INSTRUMENTATION_COMMON_PEER_SERVICE_MAPPING": "backend=backend:8080"} + + def test_success(self) -> None: + self.do_test_requests("success", "GET", 200, 0, 0, request_method="GET", path_suffix="/success") + + def test_error(self) -> None: + self.do_test_requests("error", "GET", 400, 1, 0, request_method="GET", path_suffix="/error") + + def test_fault(self) -> None: + self.do_test_requests("fault", "GET", 500, 0, 1, request_method="GET", path_suffix="/fault") + + def test_success_post(self) -> None: + self.do_test_requests("success/postmethod", "POST", 200, 0, 0, request_method="POST", path_suffix="/success") + + def test_error_post(self) -> None: + self.do_test_requests("error/postmethod", "POST", 400, 1, 0, request_method="POST", path_suffix="/error") + + def test_fault_post(self) -> None: + self.do_test_requests("fault/postmethod", "POST", 500, 0, 1, request_method="POST", path_suffix="/fault") + + @override + def _assert_aws_span_attributes(self, resource_scope_spans: List[ResourceScopeSpan], path: str, **kwargs) -> None: + target_spans: List[Span] = [] + for resource_scope_span in resource_scope_spans: + # pylint: disable=no-member + if resource_scope_span.span.kind == Span.SPAN_KIND_CLIENT: + target_spans.append(resource_scope_span.span) + + self.assertEqual(len(target_spans), 1) + _logger.info(target_spans[0].attributes) + self._assert_aws_attributes(target_spans[0].attributes, kwargs.get("request_method"), kwargs.get("path_suffix")) + + def _assert_aws_attributes(self, attributes_list: List[KeyValue], method: str, endpoint: str) -> None: + attributes_dict: Dict[str, AnyValue] = self._get_attributes_dict(attributes_list) + self._assert_str_attribute(attributes_dict, AWS_LOCAL_SERVICE, self.get_application_otel_service_name()) + self._assert_str_attribute(attributes_dict, AWS_LOCAL_OPERATION, f"{method} {endpoint}") + self._assert_str_attribute(attributes_dict, AWS_REMOTE_SERVICE, "backend:8080") + self._assert_str_attribute(attributes_dict, AWS_REMOTE_OPERATION, f"{method} /backend") + self._assert_str_attribute(attributes_dict, AWS_SPAN_KIND, "CLIENT") + + @override + def _assert_semantic_conventions_span_attributes( + self, resource_scope_spans: List[ResourceScopeSpan], method: str, path: str, status_code: int, **kwargs + ) -> None: + target_spans: List[Span] = [] + for resource_scope_span in resource_scope_spans: + # pylint: disable=no-member + if resource_scope_span.span.kind == Span.SPAN_KIND_CLIENT: + target_spans.append(resource_scope_span.span) + + self.assertEqual(len(target_spans), 1) + self.assertEqual(target_spans[0].name, method) + self._assert_semantic_conventions_attributes(target_spans[0].attributes, method, path, status_code) + + def _assert_semantic_conventions_attributes( + self, attributes_list: List[KeyValue], method: str, endpoint: str, status_code: int + ) -> None: + attributes_dict: Dict[str, AnyValue] = self._get_attributes_dict(attributes_list) + self._assert_str_attribute(attributes_dict, SpanAttributes.NET_PEER_NAME, "backend") + self._assert_int_attribute(attributes_dict, SpanAttributes.NET_PEER_PORT, 8080) + self._assert_int_attribute(attributes_dict, SpanAttributes.HTTP_STATUS_CODE, status_code) + self._assert_str_attribute(attributes_dict, SpanAttributes.HTTP_URL, f"http://backend:8080/backend/{endpoint}") + self._assert_str_attribute(attributes_dict, SpanAttributes.HTTP_METHOD, method) + # http instrumentation is not respecting PEER_SERVICE + # self._assert_str_attribute(attributes_dict, SpanAttributes.PEER_SERVICE, "backend:8080") + + @override + def _assert_metric_attributes( + self, + resource_scope_metrics: List[ResourceScopeMetric], + metric_name: str, + expected_sum: int, + **kwargs, + ) -> None: + target_metrics: List[Metric] = [] + for resource_scope_metric in resource_scope_metrics: + if resource_scope_metric.metric.name.lower() == metric_name.lower(): + target_metrics.append(resource_scope_metric.metric) + + self.assertEqual(len(target_metrics), 1) + target_metric: Metric = target_metrics[0] + dp_list: List[ExponentialHistogramDataPoint] = target_metric.exponential_histogram.data_points + + + self.assertEqual(len(dp_list), 3) + + # Find the data point with the longest attributes list and assign it to service_dp + dependency_dp: ExponentialHistogramDataPoint = max(dp_list, key=lambda dp: len(dp.attributes)) + # Assign the remaining two elements to dependency_dp and other_dp + remaining_dps = [dp for dp in dp_list if dp != dependency_dp] + service_dp, other_dp = remaining_dps[0], remaining_dps[1] + + + _logger.info("DEBUG: data point 1") + attribute_dict: Dict[str, AnyValue] = self._get_attributes_dict(dependency_dp.attributes) + method: str = kwargs.get("request_method") + path_suffix: str = kwargs.get("path_suffix") + self._assert_str_attribute(attribute_dict, AWS_LOCAL_SERVICE, self.get_application_otel_service_name()) + self._assert_str_attribute(attribute_dict, AWS_LOCAL_OPERATION, f"{method} {path_suffix}") + self._assert_str_attribute(attribute_dict, AWS_REMOTE_SERVICE, "backend:8080") + self._assert_str_attribute(attribute_dict, AWS_REMOTE_OPERATION, f"{method} /backend") + self._assert_str_attribute(attribute_dict, AWS_SPAN_KIND, "CLIENT") + self.check_sum(metric_name, dependency_dp.sum, expected_sum) + + attribute_dict_service: Dict[str, AnyValue] = self._get_attributes_dict(service_dp.attributes) + attribute_dict_other: Dict[str, AnyValue] = self._get_attributes_dict(other_dp.attributes) + + # test AWS_LOCAL_OPERATION to be either "/backend" or "/success" in service_dp and other_dp + if f"{method} /backend" not in [attribute_dict_service.get(AWS_LOCAL_OPERATION), attribute_dict_other.get(AWS_LOCAL_OPERATION)]: + self._assert_str_attribute(attribute_dict_service, AWS_LOCAL_OPERATION, f"{method} /backend") + self._assert_str_attribute(attribute_dict_other, AWS_LOCAL_OPERATION, f"{method} {path_suffix}") + else: + self._assert_str_attribute(attribute_dict_service, AWS_LOCAL_OPERATION, f"{method} {path_suffix}") + self._assert_str_attribute(attribute_dict_other, AWS_LOCAL_OPERATION, f"{method} /backend") + + # Check additional attributes for service_dp + self._assert_str_attribute(attribute_dict_service, AWS_SPAN_KIND, "LOCAL_ROOT") + self.check_sum(metric_name, service_dp.sum, expected_sum) + + self._assert_str_attribute(attribute_dict_other, AWS_SPAN_KIND, "LOCAL_ROOT") + self.check_sum(metric_name, other_dp.sum, expected_sum) diff --git a/contract-tests/tests/test/amazon/requests/__pycache__/requests_test.cpython-312-pytest-8.3.2.pyc b/contract-tests/tests/test/amazon/requests/__pycache__/requests_test.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 0000000000000000000000000000000000000000..db5d38ffa012c26e8de1c4a3f4237f2df90700fa GIT binary patch literal 9567 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 literal 0 HcmV?d00001 diff --git a/contract-tests/tests/test/amazon/requests/__pycache__/requests_test.cpython-312-pytest-8.3.3.pyc b/contract-tests/tests/test/amazon/requests/__pycache__/requests_test.cpython-312-pytest-8.3.3.pyc new file mode 100644 index 0000000000000000000000000000000000000000..af8cab841c6bcc3be6e575be510dc3568f419179 GIT binary patch literal 9565 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 a-!nbmGpGOP`jTZYu$j7+KQR=ert`nKA>McZ literal 0 HcmV?d00001 diff --git a/contract-tests/tests/test/amazon/requests/requests_test.py b/contract-tests/tests/test/amazon/requests/requests_test.py new file mode 100644 index 00000000..5202fd83 --- /dev/null +++ b/contract-tests/tests/test/amazon/requests/requests_test.py @@ -0,0 +1,148 @@ +# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +# SPDX-License-Identifier: Apache-2.0 +from typing import Dict, List + +from mock_collector_client import ResourceScopeMetric, ResourceScopeSpan +from typing_extensions import override + +from amazon.base.contract_test_base import ContractTestBase +from amazon.utils.application_signals_constants import ( + AWS_LOCAL_OPERATION, + AWS_LOCAL_SERVICE, + AWS_REMOTE_OPERATION, + AWS_REMOTE_SERVICE, + AWS_SPAN_KIND, +) +from opentelemetry.proto.common.v1.common_pb2 import AnyValue, KeyValue +from opentelemetry.proto.metrics.v1.metrics_pb2 import ExponentialHistogramDataPoint, Metric +from opentelemetry.proto.trace.v1.trace_pb2 import Span +from opentelemetry.semconv.trace import SpanAttributes + + +class RequestsTest(ContractTestBase): + @override + @staticmethod + def get_application_image_name() -> str: + return "aws-application-signals-tests-requests-app" + + @override + def get_application_network_aliases(self) -> List[str]: + """ + This will be the target hostname of the clients making http requests in the application image, so that they + don't use localhost. + """ + return ["backend"] + + @override + def get_application_extra_environment_variables(self) -> Dict[str, str]: + """ + This does not appear to do anything, as it does not seem that OTEL supports peer service for Python. Keeping + for consistency with Java contract tests at this time. + """ + return {"OTEL_INSTRUMENTATION_COMMON_PEER_SERVICE_MAPPING": "backend=backend:8080"} + + def test_success(self) -> None: + self.do_test_requests("success", "GET", 200, 0, 0, request_method="GET") + + def test_error(self) -> None: + self.do_test_requests("error", "GET", 400, 1, 0, request_method="GET") + + def test_fault(self) -> None: + self.do_test_requests("fault", "GET", 500, 0, 1, request_method="GET") + + def test_success_post(self) -> None: + self.do_test_requests("success/postmethod", "POST", 200, 0, 0, request_method="POST") + + def test_error_post(self) -> None: + self.do_test_requests("error/postmethod", "POST", 400, 1, 0, request_method="POST") + + def test_fault_post(self) -> None: + self.do_test_requests("fault/postmethod", "POST", 500, 0, 1, request_method="POST") + + @override + def _assert_aws_span_attributes(self, resource_scope_spans: List[ResourceScopeSpan], path: str, **kwargs) -> None: + target_spans: List[Span] = [] + for resource_scope_span in resource_scope_spans: + # pylint: disable=no-member + if resource_scope_span.span.kind == Span.SPAN_KIND_CLIENT: + target_spans.append(resource_scope_span.span) + + self.assertEqual(len(target_spans), 1) + self._assert_aws_attributes(target_spans[0].attributes, kwargs.get("request_method"), path) + + def _assert_aws_attributes(self, attributes_list: List[KeyValue], method: str, endpoint: str) -> None: + attributes_dict: Dict[str, AnyValue] = self._get_attributes_dict(attributes_list) + self._assert_str_attribute(attributes_dict, AWS_LOCAL_SERVICE, self.get_application_otel_service_name()) + # InternalOperation as OTEL does not instrument the basic server we are using, so the client span is a local + # root. + self._assert_str_attribute(attributes_dict, AWS_LOCAL_OPERATION, "InternalOperation") + self._assert_str_attribute(attributes_dict, AWS_REMOTE_SERVICE, "backend:8080") + self._assert_str_attribute(attributes_dict, AWS_REMOTE_OPERATION, f"{method} /backend") + # See comment above AWS_LOCAL_OPERATION + self._assert_str_attribute(attributes_dict, AWS_SPAN_KIND, "LOCAL_ROOT") + + @override + def _assert_semantic_conventions_span_attributes( + self, resource_scope_spans: List[ResourceScopeSpan], method: str, path: str, status_code: int, **kwargs + ) -> None: + target_spans: List[Span] = [] + for resource_scope_span in resource_scope_spans: + # pylint: disable=no-member + if resource_scope_span.span.kind == Span.SPAN_KIND_CLIENT: + target_spans.append(resource_scope_span.span) + + self.assertEqual(len(target_spans), 1) + self.assertEqual(target_spans[0].name, method) + self._assert_semantic_conventions_attributes(target_spans[0].attributes, method, path, status_code) + + def _assert_semantic_conventions_attributes( + self, attributes_list: List[KeyValue], method: str, endpoint: str, status_code: int + ) -> None: + attributes_dict: Dict[str, AnyValue] = self._get_attributes_dict(attributes_list) + # TODO: requests instrumentation is not populating net peer attributes + # self._assert_str_attribute(attributes_dict, SpanAttributes.NET_PEER_NAME, "backend") + # self._assert_int_attribute(attributes_dict, SpanAttributes.NET_PEER_PORT, 8080) + self._assert_int_attribute(attributes_dict, SpanAttributes.HTTP_STATUS_CODE, status_code) + self._assert_str_attribute(attributes_dict, SpanAttributes.HTTP_URL, f"http://backend:8080/backend/{endpoint}") + self._assert_str_attribute(attributes_dict, SpanAttributes.HTTP_METHOD, method) + # TODO: request instrumentation is not respecting PEER_SERVICE + # self._assert_str_attribute(attributes_dict, SpanAttributes.PEER_SERVICE, "backend:8080") + + @override + def _assert_metric_attributes( + self, + resource_scope_metrics: List[ResourceScopeMetric], + metric_name: str, + expected_sum: int, + **kwargs, + ) -> None: + target_metrics: List[Metric] = [] + for resource_scope_metric in resource_scope_metrics: + if resource_scope_metric.metric.name.lower() == metric_name.lower(): + target_metrics.append(resource_scope_metric.metric) + + self.assertEqual(len(target_metrics), 1) + target_metric: Metric = target_metrics[0] + dp_list: List[ExponentialHistogramDataPoint] = target_metric.exponential_histogram.data_points + + self.assertEqual(len(dp_list), 2) + dependency_dp: ExponentialHistogramDataPoint = dp_list[0] + service_dp: ExponentialHistogramDataPoint = dp_list[1] + if len(dp_list[1].attributes) > len(dp_list[0].attributes): + dependency_dp = dp_list[1] + service_dp = dp_list[0] + attribute_dict: Dict[str, AnyValue] = self._get_attributes_dict(dependency_dp.attributes) + method: str = kwargs.get("request_method") + self._assert_str_attribute(attribute_dict, AWS_LOCAL_SERVICE, self.get_application_otel_service_name()) + # See comment on AWS_LOCAL_OPERATION in _assert_aws_attributes + self._assert_str_attribute(attribute_dict, AWS_LOCAL_OPERATION, "InternalOperation") + self._assert_str_attribute(attribute_dict, AWS_REMOTE_SERVICE, "backend:8080") + self._assert_str_attribute(attribute_dict, AWS_REMOTE_OPERATION, f"{method} /backend") + self._assert_str_attribute(attribute_dict, AWS_SPAN_KIND, "CLIENT") + self.check_sum(metric_name, dependency_dp.sum, expected_sum) + + attribute_dict: Dict[str, AnyValue] = self._get_attributes_dict(service_dp.attributes) + # See comment on AWS_LOCAL_OPERATION in _assert_aws_attributes + self._assert_str_attribute(attribute_dict, AWS_LOCAL_OPERATION, "InternalOperation") + self._assert_str_attribute(attribute_dict, AWS_SPAN_KIND, "LOCAL_ROOT") + self.check_sum(metric_name, service_dp.sum, expected_sum) diff --git a/contract-tests/tests/test/amazon/utils/application_signals_constants.py b/contract-tests/tests/test/amazon/utils/application_signals_constants.py new file mode 100644 index 00000000..9f3a625a --- /dev/null +++ b/contract-tests/tests/test/amazon/utils/application_signals_constants.py @@ -0,0 +1,20 @@ +# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +# SPDX-License-Identifier: Apache-2.0 +""" +Constants for attributes and metric names defined in Application Signals. +""" + +# Metric names +LATENCY_METRIC: str = "latency" +ERROR_METRIC: str = "error" +FAULT_METRIC: str = "fault" + +# Attribute names +AWS_LOCAL_SERVICE: str = "aws.local.service" +AWS_LOCAL_OPERATION: str = "aws.local.operation" +AWS_REMOTE_DB_USER: str = "aws.remote.db.user" +AWS_REMOTE_SERVICE: str = "aws.remote.service" +AWS_REMOTE_OPERATION: str = "aws.remote.operation" +AWS_REMOTE_RESOURCE_TYPE: str = "aws.remote.resource.type" +AWS_REMOTE_RESOURCE_IDENTIFIER: str = "aws.remote.resource.identifier" +AWS_SPAN_KIND: str = "aws.span.kind" diff --git a/dist/aws-aws-distro-opentelemetry-node-autoinstrumentation-0.1.0-dev0.tgz.backup b/dist/aws-aws-distro-opentelemetry-node-autoinstrumentation-0.1.0-dev0.tgz.backup new file mode 100644 index 0000000000000000000000000000000000000000..5b45cbadccbed30197a472348c8cf15573d1dd17 GIT binary patch literal 118545 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 literal 0 HcmV?d00001 diff --git a/dist/aws-aws-distro-opentelemetry-node-autoinstrumentation-0.1.0.tgz b/dist/aws-aws-distro-opentelemetry-node-autoinstrumentation-0.1.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..41d078292f4004d4cc8b2653691df6c5c13bcdc3 GIT binary patch literal 107783 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

vTUcrx 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

R}y}#8KzPgtyzKsZ~e>9W>!|LSg_N* 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 literal 0 HcmV?d00001 diff --git a/dist/contract_tests-1.0.0-py3-none-any.whl b/dist/contract_tests-1.0.0-py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..840d765822fa701b6b25b2f07f996eb9d76098ac GIT binary patch literal 11442 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 Date: Wed, 25 Sep 2024 09:53:51 -0700 Subject: [PATCH 2/2] add contract tests for instrumentation of the following: * aws sdk * http * mongoose * mongodb * mysql2 --- .idea/.gitignore | 5 - .idea/aws-otel-js-instrumentation.iml | 19 - .idea/codeStyles/Project.xml | 136 ---- .idea/codeStyles/codeStyleConfig.xml | 5 - .idea/misc.xml | 6 - .idea/modules.xml | 8 - .idea/prettier.xml | 6 - .idea/vcs.xml | 6 - contract-tests/README.md | 43 +- .../images/applications/aws-sdk/Dockerfile | 22 + .../images/applications/aws-sdk/package.json | 20 + .../images/applications/aws-sdk/server.js | 493 +++++++++++++++ .../images/applications/http/build.sh | 26 - .../images/applications/http/nodejs-http.yaml | 40 -- .../images/applications/http/package.json | 1 - .../images/applications/http/test.sh | 9 - .../images/applications/mongodb/Dockerfile | 21 + .../images/applications/mongodb/package.json | 14 + .../images/applications/mongodb/server.js | 164 +++++ .../images/applications/mongoose/Dockerfile | 22 + .../images/applications/mongoose/package.json | 15 + .../images/applications/mongoose/server.js | 171 +++++ .../images/applications/mysql2/Dockerfile | 21 + .../images/applications/mysql2/package.json | 15 + .../images/applications/mysql2/server.js | 101 +++ .../images/applications/requests/Dockerfile | 15 - .../applications/requests/pyproject.toml | 6 - .../applications/requests/requests_server.py | 62 -- .../applications/requests/requirements.txt | 4 - .../images/mock-collector/README.md | 8 +- .../tests/test/amazon/aws-sdk/aws_sdk_test.py | 585 ++++++++++++++++++ .../test/amazon/base/contract_test_base.py | 37 +- .../base/database_contract_test_base.py | 47 +- .../http_test.cpython-312-pytest-8.3.2.pyc | Bin 10482 -> 0 bytes .../http_test.cpython-312-pytest-8.3.3.pyc | Bin 9493 -> 0 bytes .../tests/test/amazon/http/http_test.py | 4 +- .../test/amazon/misc/configuration_test.py | 88 +++ .../misc/resource_attributes_test_base.py | 79 +++ .../misc/service_name_in_env_var_test.py | 24 + ...ervice_name_in_resource_attributes_test.py | 20 + .../amazon/misc/unknown_service_name_test.py | 20 + .../tests/test/amazon/mongodb/mongodb_test.py | 112 ++++ .../test/amazon/mongoose/mongoose_test.py | 103 +++ .../tests/test/amazon/mysql2/mysql2_test.py | 60 ++ ...requests_test.cpython-312-pytest-8.3.2.pyc | Bin 9567 -> 0 bytes ...requests_test.cpython-312-pytest-8.3.3.pyc | Bin 9565 -> 0 bytes .../test/amazon/requests/requests_test.py | 148 ----- ...-autoinstrumentation-0.1.0-dev0.tgz.backup | Bin 118545 -> 0 bytes ...lemetry-node-autoinstrumentation-0.1.0.tgz | Bin 107783 -> 0 bytes ...lemetry_distro-0.5.0.dev0-py3-none-any.whl | Bin 58271 -> 0 bytes dist/contract_tests-1.0.0-py3-none-any.whl | Bin 11442 -> 0 bytes dist/contract_tests-1.0.0.tar.gz | Bin 6825 -> 0 bytes dist/mock_collector-1.0.0-py3-none-any.whl | Bin 7733 -> 0 bytes dist/mock_collector-1.0.0.tar.gz | Bin 4948 -> 0 bytes scripts/set-up-contract-tests.sh | 5 +- 55 files changed, 2242 insertions(+), 574 deletions(-) delete mode 100644 .idea/.gitignore delete mode 100644 .idea/aws-otel-js-instrumentation.iml delete mode 100644 .idea/codeStyles/Project.xml delete mode 100644 .idea/codeStyles/codeStyleConfig.xml delete mode 100644 .idea/misc.xml delete mode 100644 .idea/modules.xml delete mode 100644 .idea/prettier.xml delete mode 100644 .idea/vcs.xml create mode 100644 contract-tests/images/applications/aws-sdk/Dockerfile create mode 100644 contract-tests/images/applications/aws-sdk/package.json create mode 100644 contract-tests/images/applications/aws-sdk/server.js delete mode 100755 contract-tests/images/applications/http/build.sh delete mode 100644 contract-tests/images/applications/http/nodejs-http.yaml delete mode 100755 contract-tests/images/applications/http/test.sh create mode 100644 contract-tests/images/applications/mongodb/Dockerfile create mode 100644 contract-tests/images/applications/mongodb/package.json create mode 100644 contract-tests/images/applications/mongodb/server.js create mode 100644 contract-tests/images/applications/mongoose/Dockerfile create mode 100644 contract-tests/images/applications/mongoose/package.json create mode 100644 contract-tests/images/applications/mongoose/server.js create mode 100644 contract-tests/images/applications/mysql2/Dockerfile create mode 100644 contract-tests/images/applications/mysql2/package.json create mode 100644 contract-tests/images/applications/mysql2/server.js delete mode 100644 contract-tests/images/applications/requests/Dockerfile delete mode 100644 contract-tests/images/applications/requests/pyproject.toml delete mode 100644 contract-tests/images/applications/requests/requests_server.py delete mode 100644 contract-tests/images/applications/requests/requirements.txt create mode 100644 contract-tests/tests/test/amazon/aws-sdk/aws_sdk_test.py delete mode 100644 contract-tests/tests/test/amazon/http/__pycache__/http_test.cpython-312-pytest-8.3.2.pyc delete mode 100644 contract-tests/tests/test/amazon/http/__pycache__/http_test.cpython-312-pytest-8.3.3.pyc create mode 100644 contract-tests/tests/test/amazon/misc/configuration_test.py create mode 100644 contract-tests/tests/test/amazon/misc/resource_attributes_test_base.py create mode 100644 contract-tests/tests/test/amazon/misc/service_name_in_env_var_test.py create mode 100644 contract-tests/tests/test/amazon/misc/service_name_in_resource_attributes_test.py create mode 100644 contract-tests/tests/test/amazon/misc/unknown_service_name_test.py create mode 100644 contract-tests/tests/test/amazon/mongodb/mongodb_test.py create mode 100644 contract-tests/tests/test/amazon/mongoose/mongoose_test.py create mode 100644 contract-tests/tests/test/amazon/mysql2/mysql2_test.py delete mode 100644 contract-tests/tests/test/amazon/requests/__pycache__/requests_test.cpython-312-pytest-8.3.2.pyc delete mode 100644 contract-tests/tests/test/amazon/requests/__pycache__/requests_test.cpython-312-pytest-8.3.3.pyc delete mode 100644 contract-tests/tests/test/amazon/requests/requests_test.py delete mode 100644 dist/aws-aws-distro-opentelemetry-node-autoinstrumentation-0.1.0-dev0.tgz.backup delete mode 100644 dist/aws-aws-distro-opentelemetry-node-autoinstrumentation-0.1.0.tgz delete mode 100644 dist/aws_opentelemetry_distro-0.5.0.dev0-py3-none-any.whl delete mode 100644 dist/contract_tests-1.0.0-py3-none-any.whl delete mode 100644 dist/contract_tests-1.0.0.tar.gz delete mode 100644 dist/mock_collector-1.0.0-py3-none-any.whl delete mode 100644 dist/mock_collector-1.0.0.tar.gz diff --git a/.idea/.gitignore b/.idea/.gitignore deleted file mode 100644 index b58b603f..00000000 --- a/.idea/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -# Default ignored files -/shelf/ -/workspace.xml -# Editor-based HTTP Client requests -/httpRequests/ diff --git a/.idea/aws-otel-js-instrumentation.iml b/.idea/aws-otel-js-instrumentation.iml deleted file mode 100644 index 06733307..00000000 --- a/.idea/aws-otel-js-instrumentation.iml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml deleted file mode 100644 index b77e2cf0..00000000 --- a/.idea/codeStyles/Project.xml +++ /dev/null @@ -1,136 +0,0 @@ - - - - \ No newline at end of file diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml deleted file mode 100644 index 79ee123c..00000000 --- a/.idea/codeStyles/codeStyleConfig.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml deleted file mode 100644 index d3a18e32..00000000 --- a/.idea/misc.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml deleted file mode 100644 index ac33f494..00000000 --- a/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/.idea/prettier.xml b/.idea/prettier.xml deleted file mode 100644 index b0c1c68f..00000000 --- a/.idea/prettier.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml deleted file mode 100644 index 35eb1ddf..00000000 --- a/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/contract-tests/README.md b/contract-tests/README.md index 7e6ff49b..f7746d27 100644 --- a/contract-tests/README.md +++ b/contract-tests/README.md @@ -1,42 +1,55 @@ -# Introduction +## Introduction This directory contain contract tests that exist to prevent regressions. They cover: + * [OpenTelemetry semantic conventions](https://github.com/open-telemetry/semantic-conventions/). * Application Signals-specific attributes. -# How it works? +## How it works? The tests present here rely on the auto-instrumentation of a sample application which will send telemetry signals to a mock collector. The tests will use the data collected by the mock collector to perform assertions and validate that the contracts are being respected. -# Types of tested frameworks +## Types of tested frameworks The frameworks and libraries that are tested in the contract tests should fall in the following categories (more can be added on demand): -* http-servers - applications meant to test http servers (e.g. Django). -* http-clients - applications meant to test http clients (e.g. requests). -* aws-sdk - Applications meant to test the AWS SDK (e.g. botocore). -* database-clients - Applications meant to test database clients (e.g. psychopg2). + +* http-servers - applications meant to test http servers (e.g. http module in node.js). +* aws-sdk - Applications meant to test the AWS SDK (e.g. AWS SDK for JavaScript v3). +* database-clients - Applications meant to test database clients (e.g. mysql2, Mongoose, Mongodb). When testing a framework, we will create a sample application. The sample applications are stored following this convention: `contract-tests/images/applications/`. -# Adding tests for a new library or framework +## Adding tests for a new library or framework The steps to add a new test for a library or framework are: + * Create a sample application. - * The sample application should be created in `contract-tests/images/applications/`. - * Implement a `pyproject.toml` (to ensure code style checks run), `Dockerfile`, and `requirements.txt` file. See the `requests` application for an example of this. + * The sample application should be created in `contract-tests/images/applications/`. + * Implement a node.js application and create a `Dockerfile` to containerize the application * Add a test class for the sample application. - * The test class should be created in `contract-tests/tests/amazon/`. - * The test class should extend `contract_test_base.py` + * The test class should be created in `contract-tests/tests/amazon/`. + * The test class should extend `contract_test_base.py` -# How to run the tests locally? +## How to run the tests locally? Pre-requirements: + * Have `docker` installed and running - verify by running the `docker` command. Steps: -* From `aws-otel-python-instrumentation` dir, execute: + +* From `aws-otel-js-instrumentation` dir, execute: + ```sh +# create a virtual environment in python for the tests +python3 -m venv venv +source venv/bin/activate +# build the instrumentation SDK ./scripts/build_and_install_distro.sh +# build the relevant images for sample app and build the contract tests ./scripts/set-up-contract-tests.sh +# run all the tests pytest contract-tests/tests -``` \ No newline at end of file +# exit the virtual python environment +deactivate +``` diff --git a/contract-tests/images/applications/aws-sdk/Dockerfile b/contract-tests/images/applications/aws-sdk/Dockerfile new file mode 100644 index 00000000..c4f3c62e --- /dev/null +++ b/contract-tests/images/applications/aws-sdk/Dockerfile @@ -0,0 +1,22 @@ +# Use an official Node.js runtime as the base image +FROM node:20-alpine +#FROM node:20 + +# Set the working directory inside the container +WORKDIR /aws-sdk + +# Copy the relevant files +COPY ./dist/$DISTRO /aws-sdk +COPY ./contract-tests/images/applications/aws-sdk /aws-sdk + + +ARG DISTRO +# Install dependencies +RUN npm install +RUN npm install ./${DISTRO} + +# Expose the port the app runs on +EXPOSE 8080 + +# Run the app with nodejs auto instrumentation +CMD ["node", "--require", "@aws/aws-distro-opentelemetry-node-autoinstrumentation/register", "server.js"] diff --git a/contract-tests/images/applications/aws-sdk/package.json b/contract-tests/images/applications/aws-sdk/package.json new file mode 100644 index 00000000..25ade2b9 --- /dev/null +++ b/contract-tests/images/applications/aws-sdk/package.json @@ -0,0 +1,20 @@ +{ + "name": "aws-sdk-forwarder", + "version": "1.0.0", + "main": "server.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "start": "node server.js" + }, + "author": "", + "license": "ISC", + "description": "", + "dependencies": { + "@aws-sdk/client-dynamodb": "^3.658.1", + "@aws-sdk/client-kinesis": "^3.658.1", + "@aws-sdk/client-s3": "^3.658.1", + "@aws-sdk/client-sqs": "^3.658.1", + "@smithy/node-http-handler": "^3.2.3", + "node-fetch": "^2.7.0" + } +} diff --git a/contract-tests/images/applications/aws-sdk/server.js b/contract-tests/images/applications/aws-sdk/server.js new file mode 100644 index 00000000..9f9ce9e7 --- /dev/null +++ b/contract-tests/images/applications/aws-sdk/server.js @@ -0,0 +1,493 @@ +// server.js +const http = require('http'); +const url = require('url'); +const fs = require('fs'); +const os = require('os'); +const ospath = require('path'); +const { NodeHttpHandler } =require('@smithy/node-http-handler'); + +const { S3Client, CreateBucketCommand, PutObjectCommand, GetObjectCommand } = require('@aws-sdk/client-s3'); +const { DynamoDBClient, CreateTableCommand, PutItemCommand } = require('@aws-sdk/client-dynamodb'); +const { SQSClient, CreateQueueCommand, SendMessageCommand, ReceiveMessageCommand } = require('@aws-sdk/client-sqs'); +const { KinesisClient, CreateStreamCommand, PutRecordCommand } = require('@aws-sdk/client-kinesis'); +const fetch = require('node-fetch'); + +const _PORT = 8080; +const _ERROR = 'error'; +const _FAULT = 'fault'; + +const _AWS_SDK_S3_ENDPOINT = process.env.AWS_SDK_S3_ENDPOINT; +const _AWS_SDK_ENDPOINT = process.env.AWS_SDK_ENDPOINT; +const _AWS_REGION = process.env.AWS_REGION; +const _FAULT_ENDPOINT = 'http://fault.test:8080'; + +process.env.AWS_ACCESS_KEY_ID = process.env.AWS_ACCESS_KEY_ID || 'testcontainers-localstack'; +process.env.AWS_SECRET_ACCESS_KEY = process.env.AWS_SECRET_ACCESS_KEY || 'testcontainers-localstack'; + +const noRetryConfig = { + maxAttempts: 0, + requestHandler: { + metadata: { handlerProtocol: 'http/1.1' }, + connectionTimeout: 3000, + socketTimeout: 3000, + }, +}; + +let statusCodeForFault = 200; + +async function prepareAwsServer() { + try { + // Initialize AWS SDK clients + const s3Client = new S3Client({ + endpoint: _AWS_SDK_S3_ENDPOINT, + region: _AWS_REGION, + forcePathStyle: true, + }); + + const ddbClient = new DynamoDBClient({ + endpoint: _AWS_SDK_ENDPOINT, + region: _AWS_REGION, + }); + + const sqsClient = new SQSClient({ + endpoint: _AWS_SDK_ENDPOINT, + region: _AWS_REGION, + }); + + const kinesisClient = new KinesisClient({ + endpoint: _AWS_SDK_ENDPOINT, + region: _AWS_REGION, + }); + + // Set up S3 + await s3Client.send( + new CreateBucketCommand({ + Bucket: 'test-put-object-bucket-name', + CreateBucketConfiguration: { LocationConstraint: _AWS_REGION }, + }) + ); + + await s3Client.send( + new CreateBucketCommand({ + Bucket: 'test-get-object-bucket-name', + CreateBucketConfiguration: { LocationConstraint: _AWS_REGION }, + }) + ); + + // Upload a file to S3 + const tempFileName = ospath.join(os.tmpdir(), 'tempfile'); + fs.writeFileSync(tempFileName, 'This is temp file for S3 upload'); + const fileStream = fs.createReadStream(tempFileName); + await s3Client.send( + new PutObjectCommand({ + Bucket: 'test-get-object-bucket-name', + Key: 'test_object', + Body: fileStream, + }) + ); + fs.unlinkSync(tempFileName); + + // Set up DynamoDB + await ddbClient.send( + new CreateTableCommand({ + TableName: 'put_test_table', + KeySchema: [{ AttributeName: 'id', KeyType: 'HASH' }], + AttributeDefinitions: [{ AttributeName: 'id', AttributeType: 'S' }], + BillingMode: 'PAY_PER_REQUEST', + }) + ); + + // Set up SQS + await sqsClient.send( + new CreateQueueCommand({ + QueueName: 'test_put_get_queue', + }) + ); + + // Set up Kinesis + await kinesisClient.send( + new CreateStreamCommand({ + StreamName: 'test_stream', + ShardCount: 1, + }) + ); + } catch (error) { + console.error('Unexpected exception occurred', error); + } +} + +const server = http.createServer(async (req, res) => { + const parsedUrl = url.parse(req.url); + const pathName = parsedUrl.pathname; + + if (req.method === 'GET') { + await handleGetRequest(req, res, pathName); + } else if (req.method === 'POST') { + await handlePostRequest(req, res, pathName); + } else if (req.method === 'PUT') { + await handlePutRequest(req, res, pathName); + } else { + res.writeHead(405); + res.end(); + } +}); + +async function handleGetRequest(req, res, path) { + if (path.includes('s3')) { + await handleS3Request(req, res, path); + } else if (path.includes('ddb')) { + await handleDdbRequest(req, res, path); + } else if (path.includes('sqs')) { + await handleSqsRequest(req, res, path); + } else if (path.includes('kinesis')) { + await handleKinesisRequest(req, res, path); + } else { + res.writeHead(404); + res.end(); + } +} + +// this can be served as the fake AWS service to generate fault responses +async function handlePostRequest(req, res, path) { + res.writeHead(statusCodeForFault); + res.end(); +} + +// this can be served as the fake AWS service to generate fault responses +async function handlePutRequest(req, res, path) { + res.writeHead(statusCodeForFault); + res.end(); +} + +async function handleS3Request(req, res, path) { + const s3Client = new S3Client({ + endpoint: _AWS_SDK_S3_ENDPOINT, + region: _AWS_REGION, + forcePathStyle: true, + }); + + if (path.includes(_ERROR)) { + res.statusCode = 400; + try { + // trigger error case with an invalid bucket name + await s3Client.send( + new CreateBucketCommand({ + Bucket: '-', + }) + ); + } catch (err) { + console.log('Expected exception occurred', err); + } + res.end(); + } else if (path.includes(_FAULT)) { + res.statusCode = 500; + // save the status code so that the current server will response correctly + // when the faultS3Client connect to it + statusCodeForFault = 500; + try { + const faultS3Client = new S3Client({ + endpoint: _FAULT_ENDPOINT, + region: _AWS_REGION, + forcePathStyle: true, + maxAttempts: 0, + requestHandler: { + metadata: { handlerProtocol: 'http/1.1' }, + connectionTimeout: 3000, + socketTimeout: 3000, + }, + }); + await faultS3Client.send( + new CreateBucketCommand({ + Bucket: 'valid-bucket-name', + }) + ); + } catch (err) { + console.log('Expected exception occurred', err); + } + res.end(); + } else if (path.includes('createbucket/create-bucket')) { + try { + await s3Client.send( + new CreateBucketCommand({ + Bucket: 'test-bucket-name', + CreateBucketConfiguration: { LocationConstraint: _AWS_REGION }, + }) + ); + res.statusCode = 200; + } catch (err) { + console.log('Error creating bucket', err); + res.statusCode = 500; + } + res.end(); + } else if (path.includes('createobject/put-object/some-object')) { + try { + const tempFileName = ospath.join(os.tmpdir(), 'tempfile'); + fs.writeFileSync(tempFileName, 'This is temp file for S3 upload'); + const fileStream = fs.createReadStream(tempFileName); + await s3Client.send( + new PutObjectCommand({ + Bucket: 'test-put-object-bucket-name', + Key: 'test_object', + Body: fileStream, + }) + ); + fs.unlinkSync(tempFileName); + res.statusCode = 200; + } catch (err) { + console.log('Error uploading file', err); + res.statusCode = 500; + } + res.end(); + } else if (path.includes('getobject/get-object/some-object')) { + try { + const data = await s3Client.send( + new GetObjectCommand({ + Bucket: 'test-get-object-bucket-name', + Key: 'test_object', + }) + ); + res.statusCode = 200; + res.end(); + } catch (err) { + console.log('Error getting object', err); + res.statusCode = 500; + res.end(); + } + } else { + res.statusCode = 404; + res.end(); + } +} + +async function handleDdbRequest(req, res, path) { + const ddbClient = new DynamoDBClient({ + endpoint: _AWS_SDK_ENDPOINT, + region: _AWS_REGION, + }); + + if (path.includes(_ERROR)) { + res.statusCode = 400; + try { + const item = { id: { S: '1' } }; + await ddbClient.send( + new PutItemCommand({ + TableName: 'invalid_table', + Item: item, + }) + ); + } catch (err) { + console.log('Expected exception occurred', err); + } + res.end(); + } else if (path.includes(_FAULT)) { + res.statusCode = 500; + statusCodeForFault = 500; + try { + const faultDdbClient = new DynamoDBClient({ + endpoint: _FAULT_ENDPOINT, + region: _AWS_REGION, + ...noRetryConfig, + }); + const item = { id: { S: '1' } }; + await faultDdbClient.send( + new PutItemCommand({ + TableName: 'invalid_table', + Item: item, + }) + ); + } catch (err) { + console.log('Expected exception occurred', err); + } + res.end(); + } else if (path.includes('createtable/some-table')) { + try { + await ddbClient.send( + new CreateTableCommand({ + TableName: 'test_table', + KeySchema: [{ AttributeName: 'id', KeyType: 'HASH' }], + AttributeDefinitions: [{ AttributeName: 'id', AttributeType: 'S' }], + BillingMode: 'PAY_PER_REQUEST', + }) + ); + res.statusCode = 200; + } catch (err) { + console.log('Error creating table', err); + res.statusCode = 500; + } + res.end(); + } else if (path.includes('putitem/putitem-table/key')) { + try { + const item = { id: { S: '1' } }; + await ddbClient.send( + new PutItemCommand({ + TableName: 'put_test_table', + Item: item, + }) + ); + res.statusCode = 200; + } catch (err) { + console.log('Error putting item', err); + res.statusCode = 500; + } + res.end(); + } else { + res.statusCode = 404; + res.end(); + } +} + +async function handleSqsRequest(req, res, path) { + const sqsClient = new SQSClient({ + endpoint: _AWS_SDK_ENDPOINT, + region: _AWS_REGION, + }); + + if (path.includes(_ERROR)) { + res.statusCode = 400; + try { + await sqsClient.send( + new SendMessageCommand({ + QueueUrl: 'http://error.test:8080/000000000000/sqserror', + MessageBody: _ERROR, + }) + ); + } catch (err) { + console.log('Expected exception occurred', err); + } + res.end(); + } else if (path.includes(_FAULT)) { + res.statusCode = 500; + statusCodeForFault = 500; + try { + const faultSqsClient = new SQSClient({ + endpoint: _FAULT_ENDPOINT, + region: _AWS_REGION, + ...noRetryConfig, + }); + await faultSqsClient.send( + new CreateQueueCommand({ + QueueName: 'invalid_test', + }) + ); + } catch (err) { + console.log('Expected exception occurred', err); + } + res.end(); + } else if (path.includes('createqueue/some-queue')) { + try { + await sqsClient.send( + new CreateQueueCommand({ + QueueName: 'test_queue', + }) + ); + res.statusCode = 200; + } catch (err) { + console.log('Error creating queue', err); + res.statusCode = 500; + } + res.end(); + } else if (path.includes('publishqueue/some-queue')) { + try { + await sqsClient.send( + new SendMessageCommand({ + QueueUrl: 'http://localstack:4566/000000000000/test_put_get_queue', + MessageBody: 'test_message', + }) + ); + res.statusCode = 200; + } catch (err) { + console.log('Error sending message', err); + res.statusCode = 500; + } + res.end(); + } else if (path.includes('consumequeue/some-queue')) { + try { + await sqsClient.send( + new ReceiveMessageCommand({ + QueueUrl: 'http://localstack:4566/000000000000/test_put_get_queue', + MaxNumberOfMessages: 1, + }) + ); + res.statusCode = 200; + } catch (err) { + console.log('Error receiving message', err); + res.statusCode = 500; + } + res.end(); + } else { + res.statusCode = 404; + res.end(); + } +} + +async function handleKinesisRequest(req, res, path) { + const kinesisClient = new KinesisClient({ + endpoint: _AWS_SDK_ENDPOINT, + region: _AWS_REGION, + }); + + if (path.includes(_ERROR)) { + res.statusCode = 400; + try { + await kinesisClient.send( + new PutRecordCommand({ + StreamName: 'invalid_stream', + Data: Buffer.from('test'), + PartitionKey: 'partition_key', + }) + ); + } catch (err) { + console.log('Expected exception occurred', err); + } + res.end(); + } else if (path.includes(_FAULT)) { + res.statusCode = 500; + statusCodeForFault = 500; + try { + const faultKinesisClient = new KinesisClient({ + endpoint: _FAULT_ENDPOINT, + region: _AWS_REGION, + requestHandler: new NodeHttpHandler({ + connectionTimeout: 3000, + socketTimeout: 3000, + }), + maxAttempts: 0, + }); + await faultKinesisClient.send( + new PutRecordCommand({ + StreamName: 'test_stream', + Data: Buffer.from('test'), + PartitionKey: 'partition_key', + }) + ); + } catch (err) { + console.log('Expected exception occurred', err); + } + res.end(); + } else if (path.includes('putrecord/my-stream')) { + try { + await kinesisClient.send( + new PutRecordCommand({ + StreamName: 'test_stream', + Data: Buffer.from('test'), + PartitionKey: 'partition_key', + }) + ); + res.statusCode = 200; + } catch (err) { + console.log('Error putting record', err); + res.statusCode = 500; + } + res.end(); + } else { + res.statusCode = 404; + res.end(); + } +} + +prepareAwsServer().then(() => { + server.listen(_PORT, '0.0.0.0', () => { + console.log('Server is listening on port', _PORT); + console.log('Ready'); + }); +}); diff --git a/contract-tests/images/applications/http/build.sh b/contract-tests/images/applications/http/build.sh deleted file mode 100755 index db6f2266..00000000 --- a/contract-tests/images/applications/http/build.sh +++ /dev/null @@ -1,26 +0,0 @@ -#!/usr/bin/env bash -export REGION='us-east-1' - -get_repo_link() { - repository_exists=$(aws ecr-public describe-repositories --repository-names $1 --region ${REGION} --query 'repositories[0].repositoryUri' --output text 2>&1) - if [[ $? -eq 0 ]]; then - # Repository exists, extract the repositoryUri - repositoryUri=$repository_exists - echo $repositoryUri - else - # Repository doesn't exist, create it and extract the repositoryUri - output=$(aws ecr-public create-repository --repository-name $1 --region ${REGION} --no-cli-pager) - repositoryUri=$(echo $output | jq -r '.repository.repositoryUri') - echo $repositoryUri - fi -} - -aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws - -repo_uri=$(get_repo_link nodejs-http) -echo "REPO is" ${repo_uri} - -docker build -t nodejs-http . -docker tag nodejs-http:latest ${repo_uri}:latest -docker push ${repo_uri}:latest - diff --git a/contract-tests/images/applications/http/nodejs-http.yaml b/contract-tests/images/applications/http/nodejs-http.yaml deleted file mode 100644 index cd962923..00000000 --- a/contract-tests/images/applications/http/nodejs-http.yaml +++ /dev/null @@ -1,40 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: http-nodejs-deployment - labels: - app: http-nodejs -spec: - replicas: 1 - selector: - matchLabels: - app: http-nodejs - template: - metadata: - labels: - app: http-nodejs - annotations: - instrumentation.opentelemetry.io/inject-nodejs: "true" - spec: - containers: - - name: http-nodejs - image: public.ecr.aws/e8l6r3w7/nodejs-http:latest - ports: - - containerPort: 8080 - env: - - name: NODE_ENV - value: "production" - ---- -apiVersion: v1 -kind: Service -metadata: - name: http-nodejs-service -spec: - selector: - app: http-nodejs # Corrected selector to match the app label - ports: - - protocol: TCP - port: 80 - targetPort: 8080 - type: LoadBalancer \ No newline at end of file diff --git a/contract-tests/images/applications/http/package.json b/contract-tests/images/applications/http/package.json index 6f6f9601..231edf01 100644 --- a/contract-tests/images/applications/http/package.json +++ b/contract-tests/images/applications/http/package.json @@ -10,6 +10,5 @@ "author": "", "license": "ISC", "dependencies": { - "@aws/aws-distro-opentelemetry-node-autoinstrumentation": "file:aws-aws-distro-opentelemetry-node-autoinstrumentation-0.1.0-dev0.tgz" } } diff --git a/contract-tests/images/applications/http/test.sh b/contract-tests/images/applications/http/test.sh deleted file mode 100755 index 2f5b8990..00000000 --- a/contract-tests/images/applications/http/test.sh +++ /dev/null @@ -1,9 +0,0 @@ -export OTEL_METRIC_EXPORT_INTERVAL=1000 -export OTEL_AWS_APPLICATION_SIGNALS_ENABLED=true -export OTEL_METRICS_EXPORTER=none -export OTEL_EXPORTER_OTLP_PROTOCOL=grpc -export OTEL_BSP_SCHEDULE_DELAY=1 -export OTEL_TRACES_SAMPLER=always_on -export OTEL_RESOURCE_ATTRIBUTES=service.name=test - -node --require @aws/aws-distro-opentelemetry-node-autoinstrumentation/register server.js diff --git a/contract-tests/images/applications/mongodb/Dockerfile b/contract-tests/images/applications/mongodb/Dockerfile new file mode 100644 index 00000000..968c8257 --- /dev/null +++ b/contract-tests/images/applications/mongodb/Dockerfile @@ -0,0 +1,21 @@ +# Use an official Node.js runtime as the base image +FROM node:20-alpine + +# Set the working directory inside the container +WORKDIR /mongodb + +# Copy the relevant files +COPY ./dist/$DISTRO /mongodb +COPY ./contract-tests/images/applications/mongodb /mongodb + + +ARG DISTRO +# Install dependencies +RUN npm install +RUN npm install ./${DISTRO} + +# Expose the port the app runs on +EXPOSE 8080 + +# Run the app with nodejs auto instrumentation +CMD ["node", "--require", "@aws/aws-distro-opentelemetry-node-autoinstrumentation/register", "server.js"] diff --git a/contract-tests/images/applications/mongodb/package.json b/contract-tests/images/applications/mongodb/package.json new file mode 100644 index 00000000..d540b5e1 --- /dev/null +++ b/contract-tests/images/applications/mongodb/package.json @@ -0,0 +1,14 @@ +{ + "name": "mongodb-forwarder", + "version": "1.0.0", + "main": "server.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "ISC", + "description": "", + "dependencies": { + "mongodb": "^6.9.0" + } +} diff --git a/contract-tests/images/applications/mongodb/server.js b/contract-tests/images/applications/mongodb/server.js new file mode 100644 index 00000000..d3d46a78 --- /dev/null +++ b/contract-tests/images/applications/mongodb/server.js @@ -0,0 +1,164 @@ +// Import necessary modules +const http = require('http'); +const { MongoClient } = require('mongodb'); +const process = require('process'); +const url = require('url'); // For parsing URL parameters + +// Constants +const PORT = 8080; +const FIND_DOCUMENT = 'find'; +const INSERT_DOCUMENT = 'insert_document'; +const DELETE_DOCUMENT = 'delete_document'; +const UPDATE_DOCUMENT = 'update_document'; +const FAULT = 'fault'; + +// Environment variables for database connection +const DB_HOST = process.env.DB_HOST; +const DB_USER = process.env.DB_USER; +const DB_PASS = process.env.DB_PASS; +const DB_NAME = process.env.DB_NAME; + +// MongoDB connection URI +const mongoURI = `mongodb://${DB_USER}:${DB_PASS}@${DB_HOST}:27017/${DB_NAME}?authSource=admin`; + +console.log("Connect to MongoDB using " + mongoURI); + +// Create a new MongoClient +const client = new MongoClient(mongoURI, { useUnifiedTopology: true }); + +// Function to prepare the database server +async function prepareDbServer() { + try { + // Connect to the MongoDB server + await client.connect(); + console.log('MongoDB connection established'); + + const db = client.db(DB_NAME); + const collection = db.collection('employees'); + + // Check if the collection exists + const collections = await db.listCollections({ name: 'employees' }).toArray(); + if (collections.length === 0) { + // Collection does not exist, create it and insert a document + await collection.insertOne({ id: 0, name: 'to-be-updated' }); + await collection.insertOne({ id: 1, name: 'A' }); + console.log('Employee collection created and document inserted'); + } else { + console.log('Employee collection already exists'); + } + // Start the server after preparing the database + startServer(); + } catch (err) { + console.error('Error preparing database server:', err); + } +} + +// Function to start the HTTP server +function startServer() { + const server = http.createServer((req, res) => { + // Handle the request + if (req.method === 'GET') { + (async () => { + try { + await handleGetRequest(req, res); + } catch (err) { + console.error('Error in request handler:', err); + res.statusCode = 500; + res.end(); + } + })(); + } else { + res.statusCode = 405; // Method Not Allowed + res.end(); + } + }); + + server.listen(PORT, '0.0.0.0', () => { + console.log(`Server is listening on port ${PORT}`); + console.log('Ready'); + }); +} + +// Function to handle GET requests +async function handleGetRequest(req, res) { + let statusCode = 200; + const parsedUrl = url.parse(req.url, true); // Parse URL and query parameters + const pathname = parsedUrl.pathname; + + try { + const db = client.db(DB_NAME); + const collection = db.collection('employees'); + + if (pathname.includes(FIND_DOCUMENT)) { + // Retrieve documents + const employees = await collection.find({}).toArray(); + statusCode = 200; + res.statusCode = statusCode; + res.setHeader('Content-Type', 'application/json'); + res.end(JSON.stringify(employees)); + } else if (pathname.includes(INSERT_DOCUMENT)) { + // Insert a new document into the employee collection + // Extract 'id' and 'name' from query parameters + const id = parseInt(parsedUrl.query.id) || 2; + const name = parsedUrl.query.name || 'B'; + + await collection.insertOne({ id: id, name: name }); + console.log('New employee inserted'); + statusCode = 200; + res.statusCode = statusCode; + res.end(); + } else if (pathname.includes(DELETE_DOCUMENT)) { + // Delete employee with id = 1 + await collection.deleteOne({ id: 1 }); + console.log('Employee with id=1 deleted'); + statusCode = 200; + res.statusCode = statusCode; + res.end(); + } else if (pathname.includes(UPDATE_DOCUMENT)) { + // Update an existing employee entry + const id = 0; + const name = 'updated_name'; + + const result = await collection.findOneAndUpdate( + { id: id }, // Find the employee by id + { $set: { name: name } }, // Update the name field + { returnOriginal: false, upsert: true } // Return the updated document, create it if it doesn't exist + ); + + if (result) { + console.log(`Employee with id=${id} updated to name=${name}`); + statusCode = 200; + res.setHeader('Content-Type', 'application/json'); + res.end(JSON.stringify(result.value)); // Return updated employee as response + } else { + console.log('Employee not found'); + statusCode = 404; + res.statusCode = statusCode; + res.end(); + } + } else if (pathname.includes(FAULT)) { + // Try to execute an invalid MongoDB command to trigger an error + try { + await db.command({ invalidCommand: 1 }); + statusCode = 200; + } catch (err) { + console.error('Expected Exception with Invalid Command occurred:', err); + statusCode = 500; + } + res.statusCode = statusCode; + res.end(); + } else { + statusCode = 404; + res.statusCode = statusCode; + res.end(); + } + } catch (err) { + console.error('Error handling request:', err); + statusCode = 500; + res.statusCode = statusCode; + res.end(); + } +} + +// Start the database preparation and server +prepareDbServer(); diff --git a/contract-tests/images/applications/mongoose/Dockerfile b/contract-tests/images/applications/mongoose/Dockerfile new file mode 100644 index 00000000..ee6a8a79 --- /dev/null +++ b/contract-tests/images/applications/mongoose/Dockerfile @@ -0,0 +1,22 @@ +# Use an official Node.js runtime as the base image +FROM node:20-alpine +#FROM node:20 + +# Set the working directory inside the container +WORKDIR /mongoose + +# Copy the relevant files +COPY ./dist/$DISTRO /mongoose +COPY ./contract-tests/images/applications/mongoose /mongoose + + +ARG DISTRO +# Install dependencies +RUN npm install +RUN npm install ./${DISTRO} + +# Expose the port the app runs on +EXPOSE 8080 + +# Run the app with nodejs auto instrumentation +CMD ["node", "--require", "@aws/aws-distro-opentelemetry-node-autoinstrumentation/register", "server.js"] diff --git a/contract-tests/images/applications/mongoose/package.json b/contract-tests/images/applications/mongoose/package.json new file mode 100644 index 00000000..566790f5 --- /dev/null +++ b/contract-tests/images/applications/mongoose/package.json @@ -0,0 +1,15 @@ +{ + "name": "mongoose-forwarder", + "version": "1.0.0", + "main": "server.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "start": "node server.js" + }, + "author": "", + "license": "ISC", + "description": "", + "dependencies": { + "mongoose": "^8.7.0" + } +} diff --git a/contract-tests/images/applications/mongoose/server.js b/contract-tests/images/applications/mongoose/server.js new file mode 100644 index 00000000..c39dcf81 --- /dev/null +++ b/contract-tests/images/applications/mongoose/server.js @@ -0,0 +1,171 @@ +// Import necessary modules +const http = require('http'); +const mongoose = require('mongoose'); +const process = require('process'); +const url = require('url'); // For parsing URL parameters + +// Constants +const PORT = 8080; +const FIND_DOCUMENT = 'find'; +const INSERT_DOCUMENT = 'insert_document'; +const DELETE_DOCUMENT = 'delete_document'; +const UPDATE_DOCUMENT = 'update_document'; +const FAULT = 'fault'; + +// Environment variables for database connection +const DB_HOST = process.env.DB_HOST; +const DB_USER = process.env.DB_USER; +const DB_PASS = process.env.DB_PASS; +const DB_NAME = process.env.DB_NAME; + +// MongoDB connection URI +const mongoURI = `mongodb://${DB_USER}:${DB_PASS}@${DB_HOST}:27017/${DB_NAME}?authSource=admin`; + +console.log("Connect to mongodb using " + mongoURI); +// Connect to MongoDB +mongoose.connect(mongoURI) + .then(() => { + console.log('MongoDB connection established'); + // Prepare the database server + prepareDbServer(); + }) + .catch(err => { + console.error('MongoDB connection error:', err); + }); + +// Define the Employee schema and model +const employeeSchema = new mongoose.Schema({ + id: Number, + name: String +}); + +const Employee = mongoose.model('Employee', employeeSchema); + +// Function to prepare the database server +async function prepareDbServer() { + try { + const collinfo = await mongoose.connection.db.listCollections({ name: 'employees' }).next(); + if (!collinfo) { + // Collection does not exist, create it and insert a document + const employee = new Employee({ id: 1, name: 'A' }); + await employee.save(); + console.log('Employee collection created and document inserted'); + } else { + console.log('Employee collection already exists'); + } + // Start the server after preparing the database + startServer(); + } catch (err) { + console.error('Error preparing database server:', err); + } +} + +// Function to start the HTTP server +function startServer() { + const server = http.createServer((req, res) => { + // Handle the request + if (req.method === 'GET') { + (async () => { + try { + await handleGetRequest(req, res); + } catch (err) { + console.error('Error in request handler:', err); + res.statusCode = 500; + res.end(); + } + })(); + } else { + res.statusCode = 405; // Method Not Allowed + res.end(); + } + }); + + server.listen(PORT, '0.0.0.0', () => { + console.log(`Server is listening on port ${PORT}`); + console.log('Ready'); + }); +} + +// Function to handle GET requests +async function handleGetRequest(req, res) { + let statusCode = 200; + const parsedUrl = url.parse(req.url, true); // Parse URL and query parameters + const pathname = parsedUrl.pathname; + + try { + if (pathname.includes(FIND_DOCUMENT)) { + // Use find operation to retrieve documents + const employees = await Employee.find({}); + statusCode = 200; + res.statusCode = statusCode; + res.setHeader('Content-Type', 'application/json'); + res.end(JSON.stringify(employees)); + } else if (pathname.includes(INSERT_DOCUMENT)) { + // Insert a new document into the employee collection + // Extract 'id' and 'name' from query parameters + const id = parseInt(parsedUrl.query.id) || 2; + const name = parsedUrl.query.name || 'B'; + + const newEmployee = new Employee({ id: id, name: name }); + await newEmployee.save(); + console.log('New employee inserted'); + statusCode = 200; + res.statusCode = statusCode; + res.end(); + } else if (pathname.includes(DELETE_DOCUMENT)) { + // Delete employee with id = 1 + await Employee.deleteOne({ id: 1 }); + console.log('Employee with id=1 deleted'); + statusCode = 200; + res.statusCode = statusCode; + res.end(); + } else if (pathname.includes(UPDATE_DOCUMENT)) { + try { + let id = 1; + let name = "updated_name" + const updatedEmployee = await Employee.findOneAndUpdate( + { id: id }, // Find the employee by id + { $set: { name: name } }, + { new: true, upsert: true } + ); + + if (updatedEmployee) { + console.log(`Employee with id=${id} updated to name=${name}`); + statusCode = 200; + } else { + console.log('Employee not found'); + statusCode = 404; + } + } catch (err) { + console.error('Error updating employee:', err); + statusCode = 500; + } + + res.statusCode = statusCode; + res.end(); + + } else if (pathname.includes(FAULT)) { + // We don't test this fault in our contract test because the span attributes are + // very different from other operations. + // Try to execute an invalid MongoDB command to trigger an error + try { + await mongoose.connection.db.command({ invalidCommand: 1 }); + statusCode = 200; + } catch (err) { + console.error('Expected Exception with Invalid Command occurred:', err); + statusCode = 500; + } + res.statusCode = statusCode; + res.end(); + } else { + statusCode = 404; + res.statusCode = statusCode; + res.end(); + } + } catch (err) { + console.error('Error handling request:', err); + statusCode = 500; + res.statusCode = statusCode; + res.end(); + } +} diff --git a/contract-tests/images/applications/mysql2/Dockerfile b/contract-tests/images/applications/mysql2/Dockerfile new file mode 100644 index 00000000..2e6ff46d --- /dev/null +++ b/contract-tests/images/applications/mysql2/Dockerfile @@ -0,0 +1,21 @@ +# Use an official Node.js runtime as the base image +FROM node:20-alpine + +# Set the working directory inside the container +WORKDIR /mysql2 + +# Copy the relevant files +COPY ./dist/$DISTRO /mysql2 +COPY ./contract-tests/images/applications/mysql2 /mysql2 + + +ARG DISTRO +# Install dependencies +RUN npm install +RUN npm install ./${DISTRO} + +# Expose the port the app runs on +EXPOSE 8080 + +# Run the app with nodejs auto instrumentation +CMD ["node", "--require", "@aws/aws-distro-opentelemetry-node-autoinstrumentation/register", "server.js"] diff --git a/contract-tests/images/applications/mysql2/package.json b/contract-tests/images/applications/mysql2/package.json new file mode 100644 index 00000000..edf0fcda --- /dev/null +++ b/contract-tests/images/applications/mysql2/package.json @@ -0,0 +1,15 @@ +{ + "name": "mysql-forwarder", + "version": "1.0.0", + "main": "server.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "start": "node server.js" + }, + "author": "", + "license": "ISC", + "description": "", + "dependencies": { + "mysql2": "^3.11.3" + } +} diff --git a/contract-tests/images/applications/mysql2/server.js b/contract-tests/images/applications/mysql2/server.js new file mode 100644 index 00000000..cbd80201 --- /dev/null +++ b/contract-tests/images/applications/mysql2/server.js @@ -0,0 +1,101 @@ +// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: Apache-2.0 + +const http = require('http'); +const mysql = require('mysql2/promise'); + +const SELECT = 'select'; +const CREATE_DATABASE = 'create_database'; +const DROP_TABLE = 'drop_table'; +const ERROR = 'error'; +const FAULT = 'fault'; +const PORT = 8080; + +const DB_HOST = process.env.DB_HOST; +const DB_USER = process.env.DB_USER; +const DB_PASS = process.env.DB_PASS; +const DB_NAME = process.env.DB_NAME; + +const pool = mysql.createPool({ + host: DB_HOST, + user: DB_USER, + password: DB_PASS, + database: DB_NAME, +}); + +async function prepareDbServer() { + try { + const connection = await pool.getConnection(); + + const [results] = await connection.execute("SHOW TABLES LIKE 'employee'"); + + if (results.length === 0) { + await connection.execute("CREATE TABLE employee (id int, name varchar(255))"); + await connection.execute("INSERT INTO employee (id, name) VALUES (1, 'A')"); + } + + connection.release(); + } catch (err) { + console.error('Error in prepareDbServer:', err); + throw err; + } +} + +async function main() { + try { + await prepareDbServer(); + + const server = http.createServer(async (req, res) => { + if (req.method === 'GET') { + let statusCode = 200; + const url = req.url; + let connection; + + try { + connection = await pool.getConnection(); + + if (url.includes(SELECT)) { + const [results] = await connection.execute("SELECT count(*) FROM employee"); + statusCode = results.length === 1 ? 200 : 500; + } else if (url.includes(DROP_TABLE)) { + await connection.execute("DROP TABLE IF EXISTS test_table"); + statusCode = 200; + } else if (url.includes(CREATE_DATABASE)) { + await connection.execute("CREATE DATABASE test_database"); + statusCode = 200; + } else if (url.includes(FAULT)) { + try { + await connection.execute("SELECT DISTINCT id, name FROM invalid_table"); + statusCode = 200; + } catch (err) { + console.error("Expected Exception with Invalid SQL occurred:", err); + statusCode = 500; + } + } else { + statusCode = 404; + } + } catch (err) { + console.error('Error handling request:', err); + statusCode = 500; + } finally { + if (connection) connection.release(); + } + + res.writeHead(statusCode); + res.end(); + } else { + res.writeHead(405); // Method Not Allowed + res.end(); + } + }); + + server.listen(PORT, () => { + console.log('Ready'); + }); + + } catch (err) { + console.error('Error in main:', err); + } +} + +main(); diff --git a/contract-tests/images/applications/requests/Dockerfile b/contract-tests/images/applications/requests/Dockerfile deleted file mode 100644 index 5a3d3fa3..00000000 --- a/contract-tests/images/applications/requests/Dockerfile +++ /dev/null @@ -1,15 +0,0 @@ -# Meant to be run from aws-otel-python-instrumentation/contract-tests. -# Assumes existence of dist/aws_opentelemetry_distro--py3-none-any.whl. -# Assumes filename of aws_opentelemetry_distro--py3-none-any.whl is passed in as "DISTRO" arg. -FROM python:3.10 -WORKDIR /requests -COPY ./dist/$DISTRO /requests -COPY ./contract-tests/images/applications/requests /requests - -ENV PIP_ROOT_USER_ACTION=ignore -ARG DISTRO -RUN pip install --upgrade pip && pip install -r requirements.txt && pip install ${DISTRO} --force-reinstall -RUN opentelemetry-bootstrap -a install - -# Without `-u`, logs will be buffered and `wait_for_logs` will never return. -CMD ["opentelemetry-instrument", "python", "-u", "./requests_server.py"] \ No newline at end of file diff --git a/contract-tests/images/applications/requests/pyproject.toml b/contract-tests/images/applications/requests/pyproject.toml deleted file mode 100644 index 7e010fb8..00000000 --- a/contract-tests/images/applications/requests/pyproject.toml +++ /dev/null @@ -1,6 +0,0 @@ -[project] -name = "requests-server" -description = "Simple server that relies on requests library" -version = "1.0.0" -license = "Apache-2.0" -requires-python = ">=3.8" \ No newline at end of file diff --git a/contract-tests/images/applications/requests/requests_server.py b/contract-tests/images/applications/requests/requests_server.py deleted file mode 100644 index 7c6a4aca..00000000 --- a/contract-tests/images/applications/requests/requests_server.py +++ /dev/null @@ -1,62 +0,0 @@ -# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. -# SPDX-License-Identifier: Apache-2.0 -import atexit -from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer -from threading import Thread - -from requests import Response, request -from typing_extensions import Tuple, override - -_PORT: int = 8080 -_NETWORK_ALIAS: str = "backend" -_SUCCESS: str = "success" -_ERROR: str = "error" -_FAULT: str = "fault" - - -class RequestHandler(BaseHTTPRequestHandler): - @override - # pylint: disable=invalid-name - def do_GET(self): - self.handle_request("GET") - - @override - # pylint: disable=invalid-name - def do_POST(self): - self.handle_request("POST") - - def handle_request(self, method: str): - status_code: int - if self.in_path(_NETWORK_ALIAS): - if self.in_path(_SUCCESS): - status_code = 200 - elif self.in_path(_ERROR): - status_code = 400 - elif self.in_path(_FAULT): - status_code = 500 - else: - status_code = 404 - else: - url: str = f"http://{_NETWORK_ALIAS}:{_PORT}/{_NETWORK_ALIAS}{self.path}" - response: Response = request(method, url, timeout=20) - status_code = response.status_code - self.send_response_only(status_code) - self.end_headers() - - def in_path(self, sub_path: str): - return sub_path in self.path - - -def main() -> None: - server_address: Tuple[str, int] = ("0.0.0.0", _PORT) - request_handler_class: type = RequestHandler - requests_server: ThreadingHTTPServer = ThreadingHTTPServer(server_address, request_handler_class) - atexit.register(requests_server.shutdown) - server_thread: Thread = Thread(target=requests_server.serve_forever) - server_thread.start() - print("Ready") - server_thread.join() - - -if __name__ == "__main__": - main() diff --git a/contract-tests/images/applications/requests/requirements.txt b/contract-tests/images/applications/requests/requirements.txt deleted file mode 100644 index 26d8b1c8..00000000 --- a/contract-tests/images/applications/requests/requirements.txt +++ /dev/null @@ -1,4 +0,0 @@ -opentelemetry-distro==0.46b0 -opentelemetry-exporter-otlp-proto-grpc==1.25.0 -typing-extensions==4.9.0 -requests~=2.0 diff --git a/contract-tests/images/mock-collector/README.md b/contract-tests/images/mock-collector/README.md index 75c6cb77..1ed8572e 100644 --- a/contract-tests/images/mock-collector/README.md +++ b/contract-tests/images/mock-collector/README.md @@ -1,9 +1,11 @@ ### Overview -MockCollector mimics the behaviour of the actual OTEL collector, but stores export requests to be retrieved by contract tests. +MockCollector mimics the behaviour of the actual OTEL collector, but stores export requests to be retrieved by contract tests. ### Protos + To build protos: + 1. Run `pip install grpcio grpcio-tools` -2. Change directory to `aws-otel-python-instrumentation/contract-tests/images/mock-collector/` -3. Run: `python -m grpc_tools.protoc -I./protos --python_out=. --pyi_out=. --grpc_python_out=. ./protos/mock_collector_service.proto` \ No newline at end of file +2. Change directory to `aws-otel-python-instrumentation/contract-tests/images/mock-collector/` +3. Run: `python -m grpc_tools.protoc -I./protos --python_out=. --pyi_out=. --grpc_python_out=. ./protos/mock_collector_service.proto` diff --git a/contract-tests/tests/test/amazon/aws-sdk/aws_sdk_test.py b/contract-tests/tests/test/amazon/aws-sdk/aws_sdk_test.py new file mode 100644 index 00000000..8773bb7c --- /dev/null +++ b/contract-tests/tests/test/amazon/aws-sdk/aws_sdk_test.py @@ -0,0 +1,585 @@ +# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +# SPDX-License-Identifier: Apache-2.0 +from logging import INFO, Logger, getLogger +from typing import Dict, List + +from docker.types import EndpointConfig +from mock_collector_client import ResourceScopeMetric, ResourceScopeSpan +from testcontainers.localstack import LocalStackContainer +from typing_extensions import override + +from amazon.base.contract_test_base import NETWORK_NAME, ContractTestBase +from amazon.utils.application_signals_constants import ( + AWS_LOCAL_OPERATION, + AWS_LOCAL_SERVICE, + AWS_REMOTE_OPERATION, + AWS_REMOTE_RESOURCE_IDENTIFIER, + AWS_REMOTE_RESOURCE_TYPE, + AWS_REMOTE_SERVICE, + AWS_SPAN_KIND, +) +from opentelemetry.proto.common.v1.common_pb2 import AnyValue, KeyValue +from opentelemetry.proto.metrics.v1.metrics_pb2 import ExponentialHistogramDataPoint, Metric +from opentelemetry.proto.trace.v1.trace_pb2 import Span +from opentelemetry.semconv.trace import SpanAttributes + +_logger: Logger = getLogger(__name__) +_logger.setLevel(INFO) + +_AWS_SQS_QUEUE_URL: str = "aws.sqs.queue.url" +_AWS_SQS_QUEUE_NAME: str = "aws.sqs.queue.name" +_AWS_KINESIS_STREAM_NAME: str = "aws.kinesis.stream.name" + +# pylint: disable=too-many-public-methods +class AWSSDKTest(ContractTestBase): + _local_stack: LocalStackContainer + + def get_application_extra_environment_variables(self) -> Dict[str, str]: + return { + "AWS_SDK_S3_ENDPOINT": "http://s3.localstack:4566", + "AWS_SDK_ENDPOINT": "http://localstack:4566", + "AWS_REGION": "us-west-2", + } + + @override + def get_application_network_aliases(self) -> List[str]: + return ["error.test", "fault.test"] + + @override + @staticmethod + def get_application_image_name() -> str: + return "aws-application-signals-tests-aws-sdk-app" + + @classmethod + @override + def set_up_dependency_container(cls): + local_stack_networking_config: Dict[str, EndpointConfig] = { + NETWORK_NAME: EndpointConfig( + version="1.22", + aliases=[ + "localstack", + "s3.localstack", + ], + ) + } + cls._local_stack: LocalStackContainer = ( + LocalStackContainer(image="localstack/localstack:3.5.0") + .with_name("localstack") + .with_services("s3", "sqs", "dynamodb", "kinesis") + .with_env("DEFAULT_REGION", "us-west-2") + .with_kwargs(network=NETWORK_NAME, networking_config=local_stack_networking_config) + ) + cls._local_stack.start() + + @classmethod + @override + def tear_down_dependency_container(cls): + _logger.info("LocalStack stdout") + _logger.info(cls._local_stack.get_logs()[0].decode()) + _logger.info("LocalStack stderr") + _logger.info(cls._local_stack.get_logs()[1].decode()) + cls._local_stack.stop() + + def test_s3_create_bucket(self): + self.do_test_requests( + "s3/createbucket/create-bucket", + "GET", + 200, + 0, + 0, + local_operation="GET /s3", + remote_service="AWS::S3", + remote_operation="CreateBucket", + remote_resource_type="AWS::S3::Bucket", + remote_resource_identifier="test-bucket-name", + request_specific_attributes={ + SpanAttributes.AWS_S3_BUCKET: "test-bucket-name", + }, + span_name="S3.CreateBucket", + ) + + def test_s3_create_object(self): + self.do_test_requests( + "s3/createobject/put-object/some-object", + "GET", + 200, + 0, + 0, + local_operation="GET /s3", + remote_service="AWS::S3", + remote_operation="PutObject", + remote_resource_type="AWS::S3::Bucket", + remote_resource_identifier="test-put-object-bucket-name", + request_specific_attributes={ + SpanAttributes.AWS_S3_BUCKET: "test-put-object-bucket-name", + }, + span_name="S3.PutObject", + ) + + def test_s3_get_object(self): + self.do_test_requests( + "s3/getobject/get-object/some-object", + "GET", + 200, + 0, + 0, + local_operation="GET /s3", + remote_service="AWS::S3", + remote_operation="GetObject", + remote_resource_type="AWS::S3::Bucket", + remote_resource_identifier="test-get-object-bucket-name", + request_specific_attributes={ + SpanAttributes.AWS_S3_BUCKET: "test-get-object-bucket-name", + }, + span_name="S3.GetObject", + ) + + def test_s3_error(self): + self.do_test_requests( + "s3/error", + "GET", + 400, + 1, + 0, + local_operation="GET /s3", + remote_service="AWS::S3", + remote_operation="CreateBucket", + remote_resource_type="AWS::S3::Bucket", + remote_resource_identifier="-", + request_specific_attributes={ + SpanAttributes.AWS_S3_BUCKET: "-", + }, + span_name="S3.CreateBucket", + ) + + def test_s3_fault(self): + self.do_test_requests( + "s3/fault", + "GET", + 500, + 0, + 1, + dp_count=3, + local_operation="GET /s3", + local_operation_2="PUT /valid-bucket-name", + remote_service="AWS::S3", + remote_operation="CreateBucket", + remote_resource_type="AWS::S3::Bucket", + remote_resource_identifier="valid-bucket-name", + request_specific_attributes={ + SpanAttributes.AWS_S3_BUCKET: "valid-bucket-name", + }, + span_name="S3.CreateBucket", + ) + + def test_dynamodb_create_table(self): + self.do_test_requests( + "ddb/createtable/some-table", + "GET", + 200, + 0, + 0, + local_operation="GET /ddb", + remote_service="AWS::DynamoDB", + remote_operation="CreateTable", + remote_resource_type="AWS::DynamoDB::Table", + remote_resource_identifier="test_table", + request_specific_attributes={ + SpanAttributes.AWS_DYNAMODB_TABLE_NAMES: ["test_table"], + }, + span_name="DynamoDB.CreateTable", + ) + + def test_dynamodb_put_item(self): + self.do_test_requests( + "ddb/putitem/putitem-table/key", + "GET", + 200, + 0, + 0, + local_operation="GET /ddb", + remote_service="AWS::DynamoDB", + remote_operation="PutItem", + remote_resource_type="AWS::DynamoDB::Table", + remote_resource_identifier="put_test_table", + request_specific_attributes={ + SpanAttributes.AWS_DYNAMODB_TABLE_NAMES: ["put_test_table"], + }, + span_name="DynamoDB.PutItem", + ) + + def test_dynamodb_error(self): + self.do_test_requests( + "ddb/error", + "GET", + 400, + 1, + 0, + local_operation="GET /ddb", + remote_service="AWS::DynamoDB", + remote_operation="PutItem", + remote_resource_type="AWS::DynamoDB::Table", + remote_resource_identifier="invalid_table", + request_specific_attributes={ + SpanAttributes.AWS_DYNAMODB_TABLE_NAMES: ["invalid_table"], + }, + span_name="DynamoDB.PutItem", + ) + + def test_dynamodb_fault(self): + self.do_test_requests( + "ddb/fault", + "GET", + 500, + 0, + 1, + dp_count=3, + local_operation="GET /ddb", + local_operation_2="POST /", # for the fake ddb service + remote_service="AWS::DynamoDB", + remote_operation="PutItem", + remote_resource_type="AWS::DynamoDB::Table", + remote_resource_identifier="invalid_table", + request_specific_attributes={ + SpanAttributes.AWS_DYNAMODB_TABLE_NAMES: ["invalid_table"], + }, + span_name="DynamoDB.PutItem", + ) + + def test_sqs_create_queue(self): + self.do_test_requests( + "sqs/createqueue/some-queue", + "GET", + 200, + 0, + 0, + local_operation="GET /sqs", + remote_service="AWS::SQS", + remote_operation="CreateQueue", + remote_resource_type="AWS::SQS::Queue", + remote_resource_identifier="test_queue", + request_specific_attributes={ + _AWS_SQS_QUEUE_NAME: "test_queue", + }, + span_name="SQS.CreateQueue", + ) + + def test_sqs_send_message(self): + self.do_test_requests( + "sqs/publishqueue/some-queue", + "GET", + 200, + 0, + 0, + select_span_kind=Span.SPAN_KIND_PRODUCER, + local_operation="GET /sqs", + remote_service="AWS::SQS", + remote_operation="SendMessage", + remote_resource_type="AWS::SQS::Queue", + remote_resource_identifier="test_put_get_queue", + request_specific_attributes={ + _AWS_SQS_QUEUE_URL: "http://localstack:4566/000000000000/test_put_get_queue", + }, + span_name="test_put_get_queue send", # the span name is decided by upstream, but doesn't matter for app signals + dependency_metric_span_kind="PRODUCER", + ) + + def test_sqs_receive_message(self): + self.do_test_requests( + "sqs/consumequeue/some-queue", + "GET", + 200, + 0, + 0, + select_span_kind=Span.SPAN_KIND_CONSUMER, + local_operation="GET /sqs", + remote_service="AWS::SQS", + remote_operation="ReceiveMessage", + remote_resource_type="AWS::SQS::Queue", + remote_resource_identifier="test_put_get_queue", + request_specific_attributes={ + _AWS_SQS_QUEUE_URL: "http://localstack:4566/000000000000/test_put_get_queue", + }, + span_name="test_put_get_queue receive", # the span name is decided by upstream, but doesn't matter for app signals + dependency_metric_span_kind="CONSUMER", + ) + + def test_sqs_error(self): + self.do_test_requests( + "sqs/error", + "GET", + 400, + 1, + 0, + select_span_kind=Span.SPAN_KIND_PRODUCER, + local_operation="GET /sqs", + remote_service="AWS::SQS", + remote_operation="SendMessage", + remote_resource_type="AWS::SQS::Queue", + remote_resource_identifier="sqserror", + request_specific_attributes={ + _AWS_SQS_QUEUE_URL: "http://error.test:8080/000000000000/sqserror", + }, + span_name="sqserror send", # the span name is decided by upstream, but doesn't matter for app signals + dependency_metric_span_kind="PRODUCER", + ) + + def test_sqs_fault(self): + self.do_test_requests( + "sqs/fault", + "GET", + 500, + 0, + 1, + dp_count=3, + local_operation="GET /sqs", + local_operation_2="POST /", + remote_service="AWS::SQS", + remote_operation="CreateQueue", + remote_resource_type="AWS::SQS::Queue", + remote_resource_identifier="invalid_test", + request_specific_attributes={ + _AWS_SQS_QUEUE_NAME: "invalid_test", + }, + span_name="SQS.CreateQueue", + ) + + def test_kinesis_put_record(self): + self.do_test_requests( + "kinesis/putrecord/my-stream", + "GET", + 200, + 0, + 0, + local_operation="GET /kinesis", + remote_service="AWS::Kinesis", + remote_operation="PutRecord", + remote_resource_type="AWS::Kinesis::Stream", + remote_resource_identifier="test_stream", + request_specific_attributes={ + _AWS_KINESIS_STREAM_NAME: "test_stream", + }, + span_name="Kinesis.PutRecord", + ) + + def test_kinesis_error(self): + self.do_test_requests( + "kinesis/error", + "GET", + 400, + 1, + 0, + local_operation="GET /kinesis", + remote_service="AWS::Kinesis", + remote_operation="PutRecord", + remote_resource_type="AWS::Kinesis::Stream", + remote_resource_identifier="invalid_stream", + request_specific_attributes={ + _AWS_KINESIS_STREAM_NAME: "invalid_stream", + }, + span_name="Kinesis.PutRecord", + ) + + def test_kinesis_fault(self): + self.do_test_requests( + "kinesis/fault", + "GET", + 500, + 0, + 1, + local_operation="GET /kinesis", + local_operation_2="POST /", + dp_count=3, + remote_service="AWS::Kinesis", + remote_operation="PutRecord", + remote_resource_type="AWS::Kinesis::Stream", + remote_resource_identifier="test_stream", + request_specific_attributes={ + _AWS_KINESIS_STREAM_NAME: "test_stream", + }, + span_name="Kinesis.PutRecord", + ) + + @override + def _assert_aws_span_attributes(self, resource_scope_spans: List[ResourceScopeSpan], path: str, **kwargs) -> None: + target_spans: List[Span] = [] + for resource_scope_span in resource_scope_spans: + # pylint: disable=no-member + selected_span_kind = kwargs.get("select_span_kind") or Span.SPAN_KIND_CLIENT + if resource_scope_span.span.kind == selected_span_kind: + target_spans.append(resource_scope_span.span) + + if selected_span_kind == Span.SPAN_KIND_CLIENT: + span_kind = "CLIENT"; + elif selected_span_kind == Span.SPAN_KIND_PRODUCER: + span_kind = "PRODUCER"; + elif selected_span_kind == Span.SPAN_KIND_CONSUMER: + span_kind = "CONSUMER"; + + self.assertEqual(len(target_spans), 1) + self._assert_aws_attributes( + target_spans[0].attributes, + kwargs.get("local_operation"), + kwargs.get("remote_service"), + kwargs.get("remote_operation"), + span_kind, + kwargs.get("remote_resource_type", "None"), + kwargs.get("remote_resource_identifier", "None"), + ) + + def _assert_aws_attributes( + self, + attributes_list: List[KeyValue], + local_operation: str, + remote_service: str, + remote_operation: str, + span_kind: str, + remote_resource_type: str, + remote_resource_identifier: str, + ) -> None: + attributes_dict: Dict[str, AnyValue] = self._get_attributes_dict(attributes_list) + self._assert_str_attribute(attributes_dict, AWS_LOCAL_SERVICE, self.get_application_otel_service_name()) + self._assert_str_attribute(attributes_dict, AWS_LOCAL_OPERATION, local_operation) + self._assert_str_attribute(attributes_dict, AWS_REMOTE_SERVICE, remote_service) + self._assert_str_attribute(attributes_dict, AWS_REMOTE_OPERATION, remote_operation) + if remote_resource_type != "None": + self._assert_str_attribute(attributes_dict, AWS_REMOTE_RESOURCE_TYPE, remote_resource_type) + if remote_resource_identifier != "None": + self._assert_str_attribute(attributes_dict, AWS_REMOTE_RESOURCE_IDENTIFIER, remote_resource_identifier) + self._assert_str_attribute(attributes_dict, AWS_SPAN_KIND, span_kind) + + @override + def _assert_semantic_conventions_span_attributes( + self, resource_scope_spans: List[ResourceScopeSpan], method: str, path: str, status_code: int, **kwargs + ) -> None: + target_spans: List[Span] = [] + for resource_scope_span in resource_scope_spans: + # pylint: disable=no-member + selected_span_kind = kwargs.get("select_span_kind") or Span.SPAN_KIND_CLIENT + if resource_scope_span.span.kind == selected_span_kind: + target_spans.append(resource_scope_span.span) + + self.assertEqual(len(target_spans), 1) + self.assertEqual(target_spans[0].name, kwargs.get("span_name")) + self._assert_semantic_conventions_attributes( + target_spans[0].attributes, + kwargs.get("rpc_service") if "rpc_service" in kwargs else kwargs.get("remote_service").split("::")[-1], + kwargs.get("remote_operation"), + status_code, + kwargs.get("request_specific_attributes", {}), + ) + + # pylint: disable=unidiomatic-typecheck + def _assert_semantic_conventions_attributes( + self, + attributes_list: List[KeyValue], + service: str, + operation: str, + status_code: int, + request_specific_attributes: dict, + ) -> None: + attributes_dict: Dict[str, AnyValue] = self._get_attributes_dict(attributes_list) + self._assert_str_attribute(attributes_dict, SpanAttributes.RPC_METHOD, operation) + self._assert_str_attribute(attributes_dict, SpanAttributes.RPC_SYSTEM, "aws-api") + self._assert_str_attribute(attributes_dict, SpanAttributes.RPC_SERVICE, service.split("::")[-1]) + self._assert_int_attribute(attributes_dict, SpanAttributes.HTTP_STATUS_CODE, status_code) + # TODO: aws sdk instrumentation is not respecting PEER_SERVICE + # self._assert_str_attribute(attributes_dict, SpanAttributes.PEER_SERVICE, "backend:8080") + for key, value in request_specific_attributes.items(): + if isinstance(value, str): + self._assert_str_attribute(attributes_dict, key, value) + elif isinstance(value, int): + self._assert_int_attribute(attributes_dict, key, value) + else: + self._assert_array_value_ddb_table_name(attributes_dict, key, value) + + @override + def _assert_metric_attributes( + self, + resource_scope_metrics: List[ResourceScopeMetric], + metric_name: str, + expected_sum: int, + **kwargs, + ) -> None: + target_metrics: List[Metric] = [] + for resource_scope_metric in resource_scope_metrics: + if resource_scope_metric.metric.name.lower() == metric_name.lower(): + target_metrics.append(resource_scope_metric.metric) + + self.assertEqual(len(target_metrics), 1) + target_metric: Metric = target_metrics[0] + dp_list: List[ExponentialHistogramDataPoint] = target_metric.exponential_histogram.data_points + dp_list_count: int = kwargs.get("dp_count", 2) + self.assertEqual(len(dp_list), dp_list_count) + + if (len(dp_list) == 2): + dependency_dp: ExponentialHistogramDataPoint = dp_list[0] + service_dp: ExponentialHistogramDataPoint = dp_list[1] + if len(dp_list[1].attributes) > len(dp_list[0].attributes): + dependency_dp = dp_list[1] + service_dp = dp_list[0] + attribute_dict: Dict[str, AnyValue] = self._get_attributes_dict(dependency_dp.attributes) + self._assert_str_attribute(attribute_dict, AWS_LOCAL_SERVICE, self.get_application_otel_service_name()) + self._assert_str_attribute(attribute_dict, AWS_LOCAL_OPERATION, kwargs.get("local_operation")) + self._assert_str_attribute(attribute_dict, AWS_REMOTE_SERVICE, kwargs.get("remote_service")) + self._assert_str_attribute(attribute_dict, AWS_REMOTE_OPERATION, kwargs.get("remote_operation")) + self._assert_str_attribute(attribute_dict, AWS_SPAN_KIND, kwargs.get("dependency_metric_span_kind") or "CLIENT") + remote_resource_type = kwargs.get("remote_resource_type", "None") + remote_resource_identifier = kwargs.get("remote_resource_identifier", "None") + if remote_resource_type != "None": + self._assert_str_attribute(attribute_dict, AWS_REMOTE_RESOURCE_TYPE, remote_resource_type) + if remote_resource_identifier != "None": + self._assert_str_attribute(attribute_dict, AWS_REMOTE_RESOURCE_IDENTIFIER, remote_resource_identifier) + self.check_sum(metric_name, dependency_dp.sum, expected_sum) + + attribute_dict: Dict[str, AnyValue] = self._get_attributes_dict(service_dp.attributes) + self._assert_str_attribute(attribute_dict, AWS_LOCAL_SERVICE, self.get_application_otel_service_name()) + self._assert_str_attribute(attribute_dict, AWS_LOCAL_OPERATION, kwargs.get("local_operation")) + self._assert_str_attribute(attribute_dict, AWS_SPAN_KIND, "LOCAL_ROOT") + self.check_sum(metric_name, service_dp.sum, expected_sum) + else: + dependency_dp: ExponentialHistogramDataPoint = max(dp_list, key=lambda dp: len(dp.attributes)) + # Assign the remaining two elements to dependency_dp and other_dp + remaining_dps = [dp for dp in dp_list if dp != dependency_dp] + service_dp, other_dp = remaining_dps[0], remaining_dps[1] + + attribute_dict: Dict[str, AnyValue] = self._get_attributes_dict(dependency_dp.attributes) + self._assert_str_attribute(attribute_dict, AWS_LOCAL_SERVICE, self.get_application_otel_service_name()) + self._assert_str_attribute(attribute_dict, AWS_LOCAL_OPERATION, kwargs.get("local_operation")) + self._assert_str_attribute(attribute_dict, AWS_REMOTE_SERVICE, kwargs.get("remote_service")) + self._assert_str_attribute(attribute_dict, AWS_REMOTE_OPERATION, kwargs.get("remote_operation")) + self._assert_str_attribute(attribute_dict, AWS_SPAN_KIND, kwargs.get("dependency_metric_span_kind") or "CLIENT") + remote_resource_type = kwargs.get("remote_resource_type", "None") + remote_resource_identifier = kwargs.get("remote_resource_identifier", "None") + if remote_resource_type != "None": + self._assert_str_attribute(attribute_dict, AWS_REMOTE_RESOURCE_TYPE, remote_resource_type) + if remote_resource_identifier != "None": + self._assert_str_attribute(attribute_dict, AWS_REMOTE_RESOURCE_IDENTIFIER, remote_resource_identifier) + self.check_sum(metric_name, dependency_dp.sum, expected_sum) + + attribute_dict_service: Dict[str, AnyValue] = self._get_attributes_dict(service_dp.attributes) + attribute_dict_other: Dict[str, AnyValue] = self._get_attributes_dict(other_dp.attributes) + + # test AWS_LOCAL_OPERATION to be either kwargs.get("local_operation_2") or kwargs.get("local_operation") in service_dp and other_dp + if kwargs.get("local_operation") not in [attribute_dict_service.get(AWS_LOCAL_OPERATION)]: + self._assert_str_attribute(attribute_dict_service, AWS_LOCAL_OPERATION, kwargs.get("local_operation_2")) + self._assert_str_attribute(attribute_dict_other, AWS_LOCAL_OPERATION, kwargs.get("local_operation")) + else: + self._assert_str_attribute(attribute_dict_service, AWS_LOCAL_OPERATION, kwargs.get("local_operation")) + self._assert_str_attribute(attribute_dict_other, AWS_LOCAL_OPERATION, kwargs.get("local_operation_2")) + + self._assert_str_attribute(attribute_dict_service, AWS_LOCAL_SERVICE, self.get_application_otel_service_name()) + self._assert_str_attribute(attribute_dict_service, AWS_SPAN_KIND, "LOCAL_ROOT") + self.check_sum(metric_name, service_dp.sum, expected_sum) + + self._assert_str_attribute(attribute_dict_other, AWS_LOCAL_SERVICE, self.get_application_otel_service_name()) + self._assert_str_attribute(attribute_dict_other, AWS_SPAN_KIND, "LOCAL_ROOT") + self.check_sum(metric_name, other_dp.sum, expected_sum) + + # pylint: disable=consider-using-enumerate + def _assert_array_value_ddb_table_name(self, attributes_dict: Dict[str, AnyValue], key: str, expect_values: list): + self.assertIn(key, attributes_dict) + actual_values: [AnyValue] = attributes_dict[key].array_value + self.assertEqual(len(actual_values.values), len(expect_values)) + for index in range(len(actual_values.values)): + self.assertEqual(actual_values.values[index].string_value, expect_values[index]) diff --git a/contract-tests/tests/test/amazon/base/contract_test_base.py b/contract-tests/tests/test/amazon/base/contract_test_base.py index 77b907ba..af6557c7 100644 --- a/contract-tests/tests/test/amazon/base/contract_test_base.py +++ b/contract-tests/tests/test/amazon/base/contract_test_base.py @@ -25,33 +25,6 @@ _MOCK_COLLECTOR_NAME: str = "aws-application-signals-mock-collector-nodejs" _MOCK_COLLECTOR_PORT: int = 4315 -def can_convert_any_value_to_string(any_value_instance): - field_name = any_value_instance.WhichOneof('value') - - if field_name in ['string_value', 'bool_value', 'int_value', 'double_value']: - return True - - elif field_name == 'bytes_value': - # Check if bytes can be decoded to a string - try: - any_value_instance.bytes_value.decode('utf-8') - return True - except UnicodeDecodeError: - return False - - elif field_name == 'array_value': - # Check if all elements can be converted - return all(can_convert_any_value_to_string(item) for item in any_value_instance.array_value.values) - - elif field_name == 'kvlist_value': - # Check if all values can be converted - return all(can_convert_any_value_to_string(kv.value) for kv in any_value_instance.kvlist_value.values) - - else: - # Unknown field; cannot determine - return False - - def any_value_to_string(any_value_instance): field_name = any_value_instance.WhichOneof('value') @@ -190,9 +163,8 @@ def setUp(self) -> None: self.mock_collector_client: MockCollectorClient = MockCollectorClient( self.mock_collector.get_container_host_ip(), self.mock_collector.get_exposed_port(_MOCK_COLLECTOR_PORT) ) - # Sleep for 100ms to ensure any startup metrics have been exported - # time.sleep(0.1) - time.sleep(5) + # Sleep for 3s to ensure any startup metrics have been exported + time.sleep(3) # Clear all start up metrics, so tests are only testing telemetry generated by their invocations. self.mock_collector_client.clear_signals() @@ -233,13 +205,12 @@ def send_request(self, method, path) -> Response: return request(method, url, timeout=20) def _get_attributes_dict(self, attributes_list: List[KeyValue]) -> Dict[str, AnyValue]: - _logger.info("Get the attributes dictionary ==============") + # _logger.info("Get the attributes dictionary ==============") attributes_dict: Dict[str, AnyValue] = {} for attribute in attributes_list: key: str = attribute.key value: AnyValue = attribute.value - # if can_convert_any_value_to_string(value): - _logger.info("key: " + key + " value: " + any_value_to_string(value)) + # _logger.info("key: " + key + " value: " + any_value_to_string(value)) if key in attributes_dict: old_value: AnyValue = attributes_dict[key] diff --git a/contract-tests/tests/test/amazon/base/database_contract_test_base.py b/contract-tests/tests/test/amazon/base/database_contract_test_base.py index 7b7100ad..6613f125 100644 --- a/contract-tests/tests/test/amazon/base/database_contract_test_base.py +++ b/contract-tests/tests/test/amazon/base/database_contract_test_base.py @@ -50,21 +50,43 @@ def get_application_extra_environment_variables(self) -> Dict[str, str]: "DB_NAME": DATABASE_NAME, } + # define tests for SQL database def assert_drop_table_succeeds(self) -> None: self.mock_collector_client.clear_signals() - self.do_test_requests("drop_table", "GET", 200, 0, 0, sql_command="DROP TABLE") + self.do_test_requests("drop_table", "GET", 200, 0, 0, sql_command="DROP TABLE", local_operation="GET /drop_table", span_name="DROP") def assert_create_database_succeeds(self) -> None: self.mock_collector_client.clear_signals() - self.do_test_requests("create_database", "GET", 200, 0, 0, sql_command="CREATE DATABASE") + self.do_test_requests("create_database", "GET", 200, 0, 0, sql_command="CREATE DATABASE", local_operation="GET /create_database", span_name="CREATE") def assert_select_succeeds(self) -> None: self.mock_collector_client.clear_signals() - self.do_test_requests("select", "GET", 200, 0, 0, sql_command="SELECT") + self.do_test_requests("select", "GET", 200, 0, 0, sql_command="SELECT", local_operation="GET /select", span_name="SELECT") def assert_fault(self) -> None: self.mock_collector_client.clear_signals() - self.do_test_requests("fault", "GET", 500, 0, 1, sql_command="SELECT DISTINCT") + self.do_test_requests("fault", "GET", 500, 0, 1, sql_command="SELECT DISTINCT", local_operation="GET /fault", span_name="SELECT") + + # define tests for MongoDB database + def assert_delete_document_succeeds(self, **kwargs) -> None: + self.mock_collector_client.clear_signals() + self.do_test_requests("delete_document", "GET", 200, 0, 0, **kwargs) + + def assert_insert_document_succeeds(self, **kwargs) -> None: + self.mock_collector_client.clear_signals() + self.do_test_requests("insert_document", "GET", 200, 0, 0, **kwargs) + + def assert_update_document_succeeds(self, **kwargs) -> None: + self.mock_collector_client.clear_signals() + self.do_test_requests("update_document", "GET", 200, 0, 0, **kwargs) + + def assert_find_document_succeeds(self, **kwargs) -> None: + self.mock_collector_client.clear_signals() + self.do_test_requests("find", "GET", 200, 0, 0, **kwargs) + + def assert_fault_non_sql(self, **kwargs) -> None: + self.mock_collector_client.clear_signals() + self.do_test_requests("fault", "GET", 500, 0, 1, **kwargs) @override def _assert_aws_span_attributes(self, resource_scope_spans: List[ResourceScopeSpan], path: str, **kwargs) -> None: @@ -89,16 +111,17 @@ def _assert_semantic_conventions_span_attributes( if resource_scope_span.span.kind == Span.SPAN_KIND_CLIENT: target_spans.append(resource_scope_span.span) - self.assertEqual(target_spans[0].name, kwargs.get("sql_command").split()[0]) + self.assertEqual(target_spans[0].name, kwargs.get("span_name")) if status_code == 200: self.assertEqual(target_spans[0].status.code, StatusCode.UNSET.value) else: self.assertEqual(target_spans[0].status.code, StatusCode.ERROR.value) - self._assert_semantic_conventions_attributes(target_spans[0].attributes, kwargs.get("sql_command")) + self._assert_semantic_conventions_attributes(target_spans[0].attributes, **kwargs) - def _assert_semantic_conventions_attributes(self, attributes_list: List[KeyValue], command: str) -> None: + def _assert_semantic_conventions_attributes(self, attributes_list: List[KeyValue], **kwargs) -> None: attributes_dict: Dict[str, AnyValue] = self._get_attributes_dict(attributes_list) + command = kwargs.get("db_operation") or kwargs.get("sql_command") self.assertTrue(attributes_dict.get("db.statement").string_value.startswith(command)) self._assert_str_attribute(attributes_dict, "db.system", self.get_remote_service()) self._assert_str_attribute(attributes_dict, "db.name", DATABASE_NAME) @@ -110,13 +133,11 @@ def _assert_semantic_conventions_attributes(self, attributes_list: List[KeyValue @override def _assert_aws_attributes( - self, attributes_list: List[KeyValue], expected_span_kind: str = SPAN_KIND_LOCAL_ROOT, **kwargs + self, attributes_list: List[KeyValue], expected_span_kind: str = SPAN_KIND_CLIENT, **kwargs ) -> None: attributes_dict: Dict[str, AnyValue] = self._get_attributes_dict(attributes_list) self._assert_str_attribute(attributes_dict, AWS_LOCAL_SERVICE, self.get_application_otel_service_name()) - # InternalOperation as OTEL does not instrument the basic server we are using, so the client span is a local - # root. - self._assert_str_attribute(attributes_dict, AWS_LOCAL_OPERATION, "InternalOperation") + self._assert_str_attribute(attributes_dict, AWS_LOCAL_OPERATION, kwargs.get("local_operation")) self._assert_str_attribute(attributes_dict, AWS_REMOTE_SERVICE, self.get_remote_service()) self._assert_str_attribute(attributes_dict, AWS_REMOTE_OPERATION, kwargs.get("sql_command")) self._assert_str_attribute(attributes_dict, AWS_REMOTE_RESOURCE_TYPE, "DB::Connection") @@ -124,7 +145,6 @@ def _assert_aws_attributes( self._assert_str_attribute( attributes_dict, AWS_REMOTE_RESOURCE_IDENTIFIER, self.get_remote_resource_identifier() ) - # See comment above AWS_LOCAL_OPERATION self._assert_str_attribute(attributes_dict, AWS_SPAN_KIND, expected_span_kind) @override @@ -153,7 +173,6 @@ def _assert_metric_attributes( self.check_sum(metric_name, dependency_dp.sum, expected_sum) attribute_dict: Dict[str, AnyValue] = self._get_attributes_dict(service_dp.attributes) - # See comment on AWS_LOCAL_OPERATION in _assert_aws_attributes - self._assert_str_attribute(attribute_dict, AWS_LOCAL_OPERATION, "InternalOperation") + self._assert_str_attribute(attribute_dict, AWS_LOCAL_OPERATION,kwargs.get("local_operation")) self._assert_str_attribute(attribute_dict, AWS_SPAN_KIND, SPAN_KIND_LOCAL_ROOT) self.check_sum(metric_name, service_dp.sum, expected_sum) diff --git a/contract-tests/tests/test/amazon/http/__pycache__/http_test.cpython-312-pytest-8.3.2.pyc b/contract-tests/tests/test/amazon/http/__pycache__/http_test.cpython-312-pytest-8.3.2.pyc deleted file mode 100644 index 9fe2188559579e5a348ed9be643d04de26b82b82..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10482 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 diff --git a/contract-tests/tests/test/amazon/http/__pycache__/http_test.cpython-312-pytest-8.3.3.pyc b/contract-tests/tests/test/amazon/http/__pycache__/http_test.cpython-312-pytest-8.3.3.pyc deleted file mode 100644 index 26af07f4475e67e3a0a50f6914bf17f27a5dd794..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9493 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 None: @@ -134,8 +134,6 @@ def _assert_metric_attributes( remaining_dps = [dp for dp in dp_list if dp != dependency_dp] service_dp, other_dp = remaining_dps[0], remaining_dps[1] - - _logger.info("DEBUG: data point 1") attribute_dict: Dict[str, AnyValue] = self._get_attributes_dict(dependency_dp.attributes) method: str = kwargs.get("request_method") path_suffix: str = kwargs.get("path_suffix") diff --git a/contract-tests/tests/test/amazon/misc/configuration_test.py b/contract-tests/tests/test/amazon/misc/configuration_test.py new file mode 100644 index 00000000..449b3e73 --- /dev/null +++ b/contract-tests/tests/test/amazon/misc/configuration_test.py @@ -0,0 +1,88 @@ +# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +# SPDX-License-Identifier: Apache-2.0 +import time +from typing import Dict, List + +from mock_collector_client import ResourceScopeMetric, ResourceScopeSpan +from requests import Response, request +from typing_extensions import override + +from amazon.base.contract_test_base import ContractTestBase +from amazon.utils.application_signals_constants import ERROR_METRIC, FAULT_METRIC, LATENCY_METRIC +from opentelemetry.sdk.metrics.export import AggregationTemporality + +# Tests in this class are supposed to validate that the SDK was configured in the correct way: It +# uses the X-Ray ID format. Metrics are deltaPreferred. Type of the metrics are exponentialHistogram + + +class ConfigurationTest(ContractTestBase): + @override + @staticmethod + def get_application_image_name() -> str: + return "aws-application-signals-tests-http-app" + + @override + def get_application_network_aliases(self) -> List[str]: + """ + This will be the target hostname of the clients making http requests in the application image, so that they + don't use localhost. + """ + return ["backend"] + + def test_configuration_metrics(self): + address: str = self.application.get_container_host_ip() + port: str = self.application.get_exposed_port(self.get_application_port()) + url: str = f"http://{address}:{port}/success" + response: Response = request("GET", url, timeout=20) + self.assertEqual(200, response.status_code) + metrics: List[ResourceScopeMetric] = self.mock_collector_client.get_metrics( + {LATENCY_METRIC, ERROR_METRIC, FAULT_METRIC} + ) + + self.assertEqual(len(metrics), 3) + for metric in metrics: + self.assertIsNotNone(metric.metric.exponential_histogram) + self.assertEqual(metric.metric.exponential_histogram.aggregation_temporality, AggregationTemporality.DELTA) + self.mock_collector_client.clear_signals() + + def test_xray_id_format(self): + """ + We are testing here that the X-Ray id format is always used by inspecting the traceid that + was in the span received by the collector, which should be consistent across multiple spans. + We are testing the following properties: + 1. Traceid is random + 2. First 32 bits of traceid is a timestamp + It is important to remember that the X-Ray traceId format had to be adapted to fit into the + definition of the OpenTelemetry traceid: + https://opentelemetry.io/docs/specs/otel/trace/api/#retrieving-the-traceid-and-spanid + Specifically for an X-Ray traceid to be a valid Otel traceId, the version digit had to be + dropped. Reference: + https://github.com/open-telemetry/opentelemetry-python-contrib/blob/main/sdk-extension/opentelemetry-sdk-extension-aws/src/opentelemetry/sdk/extension/aws/trace/aws_xray_id_generator.py + """ + + seen: List[str] = [] + for _ in range(100): + address: str = self.application.get_container_host_ip() + port: str = self.application.get_exposed_port(self.get_application_port()) + url: str = f"http://{address}:{port}/success" + response: Response = request("GET", url, timeout=20) + self.assertEqual(200, response.status_code) + + # Since we just made the request, the time in epoch registered in the traceid should be + # approximate equal to the current time in the test, since both run on the same host. + start_time_sec: int = int(time.time()) + + resource_scope_spans: List[ResourceScopeSpan] = self.mock_collector_client.get_traces() + target_span: ResourceScopeSpan = resource_scope_spans[0] + + self.assertTrue(target_span.span.trace_id.hex() not in seen) + seen.append(target_span.span.trace_id.hex()) + + # trace_id is bytes, so we convert it to hex string and pick the first 8 byte + # that represent the timestamp, then convert it to int for timestamp in second + trace_id_time_stamp_int: int = int(target_span.span.trace_id.hex()[:8], 16) + + # Give 2 minutes time range of tolerance for the trace timestamp + self.assertGreater(trace_id_time_stamp_int, start_time_sec - 60) + self.assertGreater(start_time_sec + 60, trace_id_time_stamp_int) + self.mock_collector_client.clear_signals() diff --git a/contract-tests/tests/test/amazon/misc/resource_attributes_test_base.py b/contract-tests/tests/test/amazon/misc/resource_attributes_test_base.py new file mode 100644 index 00000000..66e5d36c --- /dev/null +++ b/contract-tests/tests/test/amazon/misc/resource_attributes_test_base.py @@ -0,0 +1,79 @@ +# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +# SPDX-License-Identifier: Apache-2.0 +from typing import Dict, List + +from mock_collector_client import ResourceScopeMetric, ResourceScopeSpan +from requests import Response, request +from typing_extensions import override + +from amazon.base.contract_test_base import ContractTestBase +from amazon.utils.application_signals_constants import ERROR_METRIC, FAULT_METRIC, LATENCY_METRIC +from opentelemetry.proto.common.v1.common_pb2 import AnyValue +from opentelemetry.proto.metrics.v1.metrics_pb2 import Metric +from opentelemetry.proto.trace.v1.trace_pb2 import Span + + +def _get_k8s_attributes(): + return { + "k8s.namespace.name": "namespace-name", + "k8s.pod.name": "pod-name", + "k8s.deployment.name": "deployment-name", + } + + +# Tests consuming this class are supposed to validate that the agent is able to get the resource +# attributes through the environment variables OTEL_RESOURCE_ATTRIBUTES and OTEL_SERVICE_NAME +# +# These tests are structured with nested classes since it is only possible to change the +# resource attributes during the initialization of the OpenTelemetry SDK. + + +class ResourceAttributesTest(ContractTestBase): + @override + @staticmethod + def get_application_image_name() -> str: + return "aws-application-signals-tests-http-app" + + @override + def get_application_network_aliases(self) -> List[str]: + """ + This will be the target hostname of the clients making http requests in the application image, so that they + don't use localhost. + """ + return ["backend"] + + def do_test_resource_attributes(self, service_name): + address: str = self.application.get_container_host_ip() + port: str = self.application.get_exposed_port(self.get_application_port()) + url: str = f"http://{address}:{port}/success" + response: Response = request("GET", url, timeout=20) + self.assertEqual(200, response.status_code) + self.assert_resource_attributes(service_name) + + def assert_resource_attributes(self, service_name): + resource_scope_spans: List[ResourceScopeSpan] = self.mock_collector_client.get_traces() + metrics: List[ResourceScopeMetric] = self.mock_collector_client.get_metrics( + {LATENCY_METRIC, ERROR_METRIC, FAULT_METRIC} + ) + target_spans: List[Span] = [] + for resource_scope_span in resource_scope_spans: + # pylint: disable=no-member + if resource_scope_span.span.name == "tcp.connect": + target_spans.append(resource_scope_span.resource_spans) + + self.assertEqual(len(target_spans), 1) + attributes_dict: Dict[str, AnyValue] = self._get_attributes_dict(target_spans[0].resource.attributes) + for key, value in _get_k8s_attributes().items(): + self._assert_str_attribute(attributes_dict, key, value) + self._assert_str_attribute(attributes_dict, "service.name", service_name) + + target_metrics: List[Metric] = [] + for resource_scope_metric in metrics: + if resource_scope_metric.metric.name in ["Error", "Fault", "Latency"]: + target_metrics.append(resource_scope_metric.resource_metrics) + self.assertEqual(len(target_metrics), 3) + for target_metric in target_metrics: + metric_attributes_dict: Dict[str, AnyValue] = self._get_attributes_dict(target_metric.resource.attributes) + for key, value in _get_k8s_attributes().items(): + self._assert_str_attribute(metric_attributes_dict, key, value) + self._assert_str_attribute(metric_attributes_dict, "service.name", service_name) diff --git a/contract-tests/tests/test/amazon/misc/service_name_in_env_var_test.py b/contract-tests/tests/test/amazon/misc/service_name_in_env_var_test.py new file mode 100644 index 00000000..719855b3 --- /dev/null +++ b/contract-tests/tests/test/amazon/misc/service_name_in_env_var_test.py @@ -0,0 +1,24 @@ +# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +# SPDX-License-Identifier: Apache-2.0 +from typing import List + +from resource_attributes_test_base import ResourceAttributesTest, _get_k8s_attributes +from typing_extensions import override + + +class ServiceNameInEnvVarTest(ResourceAttributesTest): + @override + # pylint: disable=no-self-use + def get_application_extra_environment_variables(self) -> str: + return {"OTEL_SERVICE_NAME": "service-name-test"} + + @override + # pylint: disable=no-self-use + def get_application_otel_resource_attributes(self) -> str: + pairlist: List[str] = [] + for key, value in _get_k8s_attributes().items(): + pairlist.append(key + "=" + value) + return ",".join(pairlist) + + def test_service(self) -> None: + self.do_test_resource_attributes("service-name-test") diff --git a/contract-tests/tests/test/amazon/misc/service_name_in_resource_attributes_test.py b/contract-tests/tests/test/amazon/misc/service_name_in_resource_attributes_test.py new file mode 100644 index 00000000..923c2cfa --- /dev/null +++ b/contract-tests/tests/test/amazon/misc/service_name_in_resource_attributes_test.py @@ -0,0 +1,20 @@ +# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +# SPDX-License-Identifier: Apache-2.0 +from typing import List + +from resource_attributes_test_base import ResourceAttributesTest, _get_k8s_attributes +from typing_extensions import override + + +class ServiceNameInResourceAttributesTest(ResourceAttributesTest): + @override + # pylint: disable=no-self-use + def get_application_otel_resource_attributes(self) -> str: + pairlist: List[str] = [] + for key, value in _get_k8s_attributes().items(): + pairlist.append(key + "=" + value) + pairlist.append("service.name=service-name") + return ",".join(pairlist) + + def test_service(self) -> None: + self.do_test_resource_attributes("service-name") diff --git a/contract-tests/tests/test/amazon/misc/unknown_service_name_test.py b/contract-tests/tests/test/amazon/misc/unknown_service_name_test.py new file mode 100644 index 00000000..a5e4be1a --- /dev/null +++ b/contract-tests/tests/test/amazon/misc/unknown_service_name_test.py @@ -0,0 +1,20 @@ +# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +# SPDX-License-Identifier: Apache-2.0 +from typing import List + +from resource_attributes_test_base import ResourceAttributesTest, _get_k8s_attributes +from typing_extensions import override + + +class UnknownServiceNameTest(ResourceAttributesTest): + @override + # pylint: disable=no-self-use + def get_application_otel_resource_attributes(self) -> str: + pairlist: List[str] = [] + for key, value in _get_k8s_attributes().items(): + pairlist.append(key + "=" + value) + return ",".join(pairlist) + + def test_service(self) -> None: + # See https://github.com/aws-observability/aws-otel-js-instrumentation/blob/cec7306366a29ebb87cd303cb820abfe50cd5e30/aws-distro-opentelemetry-node-autoinstrumentation/src/aws-metric-attribute-generator.ts#L62-L66 + self.do_test_resource_attributes("unknown_service:node") diff --git a/contract-tests/tests/test/amazon/mongodb/mongodb_test.py b/contract-tests/tests/test/amazon/mongodb/mongodb_test.py new file mode 100644 index 00000000..d6164f7a --- /dev/null +++ b/contract-tests/tests/test/amazon/mongodb/mongodb_test.py @@ -0,0 +1,112 @@ +# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +# SPDX-License-Identifier: Apache-2.0 +from typing import Dict, List + +# from testcontainers.mysql import MySqlContainer +# from testcontainers.mongodb import MongoDbContainer +from testcontainers.core.container import DockerContainer +from typing_extensions import override + +from amazon.base.contract_test_base import NETWORK_NAME +from amazon.base.database_contract_test_base import ( + DATABASE_HOST, + DATABASE_PASSWORD, + DATABASE_USER, + SPAN_KIND_CLIENT, + DatabaseContractTestBase, +) +from amazon.utils.application_signals_constants import ( + AWS_LOCAL_OPERATION, + AWS_LOCAL_SERVICE, + AWS_REMOTE_OPERATION, + AWS_REMOTE_RESOURCE_IDENTIFIER, + AWS_REMOTE_RESOURCE_TYPE, + AWS_REMOTE_SERVICE, + AWS_SPAN_KIND, +) +from opentelemetry.proto.common.v1.common_pb2 import AnyValue, KeyValue + + +class MongodbTest(DatabaseContractTestBase): + @override + @classmethod + def set_up_dependency_container(cls) -> None: + cls.container = ( + DockerContainer("mongo:7.0.9") + .with_env("MONGO_INITDB_ROOT_USERNAME", DATABASE_USER) + .with_env("MONGO_INITDB_ROOT_PASSWORD", DATABASE_PASSWORD) + .with_kwargs(network=NETWORK_NAME) + .with_name(DATABASE_HOST) + ) + cls.container.start() + + @override + @classmethod + def tear_down_dependency_container(cls) -> None: + cls.container.stop() + + @override + @staticmethod + def get_remote_service() -> str: + return "mongodb" + + @override + @staticmethod + def get_database_port() -> int: + return 27017 + + @override + @staticmethod + def get_application_image_name() -> str: + return "aws-application-signals-tests-mongodb-app" + + def test_find_document_succeeds(self) -> None: + self.assert_find_document_succeeds(local_operation='GET /find', span_name='mongodb.find', db_operation='find', db_statement='statement') + + def test_delete_document_succeeds(self) -> None: + self.assert_delete_document_succeeds(local_operation='GET /delete_document', span_name='mongodb.delete', db_operation='delete') + + def test_insert_document_succeeds(self) -> None: + self.assert_insert_document_succeeds(local_operation='GET /insert_document', span_name='mongodb.insert', db_operation='insert') + + def test_update_document_succeeds(self) -> None: + # We don't know why "db.mongodb.collection" is set to "$cmd". It's probably a bug in upstream. + self.assert_update_document_succeeds(local_operation='GET /update_document', span_name='mongodb.findAndModify', db_operation='findAndModify', mongodb_collection='$cmd') + + + def test_fault(self) -> None: + # We don't know why "db.mongodb.collection" is set to "$cmd". It's probably a bug in upstream. + self.assert_fault_non_sql(local_operation='GET /fault', span_name='mongodb.invalidCommand', db_operation='invalidCommand', mongodb_collection='$cmd') + + @override + def _assert_aws_attributes( + self, attributes_list: List[KeyValue], expected_span_kind: str = SPAN_KIND_CLIENT, **kwargs + ) -> None: + attributes_dict: Dict[str, AnyValue] = self._get_attributes_dict(attributes_list) + self._assert_str_attribute(attributes_dict, AWS_LOCAL_SERVICE, self.get_application_otel_service_name()) + self._assert_str_attribute(attributes_dict, AWS_LOCAL_OPERATION, kwargs.get("local_operation")) + self._assert_str_attribute(attributes_dict, AWS_REMOTE_SERVICE, self.get_remote_service()) + self._assert_str_attribute(attributes_dict, AWS_REMOTE_OPERATION, kwargs.get("db_operation")) + self._assert_str_attribute(attributes_dict, AWS_REMOTE_RESOURCE_TYPE, "DB::Connection") + # We might need to revisit the assertation here + # Currently the value is 'testdb|172.31.0.3|27017' not the expected one 'testdb|mydb|27017' + # self._assert_str_attribute( + # attributes_dict, AWS_REMOTE_RESOURCE_IDENTIFIER, self.get_remote_resource_identifier() + # ) + self._assert_str_attribute(attributes_dict, AWS_SPAN_KIND, expected_span_kind) + + @override + def _assert_semantic_conventions_attributes(self, attributes_list: List[KeyValue], **kwargs) -> None: + attributes_dict: Dict[str, AnyValue] = self._get_attributes_dict(attributes_list) + self._assert_str_attribute(attributes_dict, "db.mongodb.collection", kwargs.get("mongodb_collection") or "employees") + self._assert_str_attribute(attributes_dict, "db.system", self.get_remote_service()) + self._assert_str_attribute(attributes_dict, "db.name", "testdb") + # the net.peer.name is currently set to be an ip address like '192.168.208.3' + # self._assert_str_attribute(attributes_dict, "net.peer.name", "mydb") + self.assertTrue("net.peer.name" in attributes_dict) #just checking the existence + self._assert_int_attribute(attributes_dict, "net.peer.port", self.get_database_port()) + self._assert_str_attribute(attributes_dict, "db.operation", kwargs.get("db_operation")) + self.assertTrue("db.statement" in attributes_dict) #just checking the existence + self.assertTrue("db.user" not in attributes_dict) + self.assertTrue("server.address" not in attributes_dict) + self.assertTrue("server.port" not in attributes_dict) diff --git a/contract-tests/tests/test/amazon/mongoose/mongoose_test.py b/contract-tests/tests/test/amazon/mongoose/mongoose_test.py new file mode 100644 index 00000000..7b284fdf --- /dev/null +++ b/contract-tests/tests/test/amazon/mongoose/mongoose_test.py @@ -0,0 +1,103 @@ +# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +# SPDX-License-Identifier: Apache-2.0 +from typing import Dict, List + +# from testcontainers.mysql import MySqlContainer +# from testcontainers.mongodb import MongoDbContainer +from testcontainers.core.container import DockerContainer +from typing_extensions import override + +from amazon.base.contract_test_base import NETWORK_NAME +from amazon.base.database_contract_test_base import ( + DATABASE_HOST, + DATABASE_PASSWORD, + DATABASE_USER, + SPAN_KIND_CLIENT, + DatabaseContractTestBase, +) +from amazon.utils.application_signals_constants import ( + AWS_LOCAL_OPERATION, + AWS_LOCAL_SERVICE, + AWS_REMOTE_OPERATION, + AWS_REMOTE_RESOURCE_IDENTIFIER, + AWS_REMOTE_RESOURCE_TYPE, + AWS_REMOTE_SERVICE, + AWS_SPAN_KIND, +) +from opentelemetry.proto.common.v1.common_pb2 import AnyValue, KeyValue + + +class MongooseTest(DatabaseContractTestBase): + @override + @classmethod + def set_up_dependency_container(cls) -> None: + cls.container = ( + DockerContainer("mongo:7.0.9") + .with_env("MONGO_INITDB_ROOT_USERNAME", DATABASE_USER) + .with_env("MONGO_INITDB_ROOT_PASSWORD", DATABASE_PASSWORD) + .with_kwargs(network=NETWORK_NAME) + .with_name(DATABASE_HOST) + ) + cls.container.start() + + @override + @classmethod + def tear_down_dependency_container(cls) -> None: + cls.container.stop() + + @override + @staticmethod + def get_remote_service() -> str: + return "mongoose" + + @override + @staticmethod + def get_database_port() -> int: + return 27017 + + @override + @staticmethod + def get_application_image_name() -> str: + return "aws-application-signals-tests-mongoose-app" + + def test_find_document_succeeds(self) -> None: + self.assert_find_document_succeeds(local_operation='GET /find', span_name='mongoose.Employee.find', db_operation='find') + + def test_delete_document_succeeds(self) -> None: + self.assert_delete_document_succeeds(local_operation='GET /delete_document', span_name='mongoose.Employee.deleteOne', db_operation='deleteOne') + + def test_insert_document_succeeds(self) -> None: + self.assert_insert_document_succeeds(local_operation='GET /insert_document', span_name='mongoose.Employee.save', db_operation='save') + + def test_update_document_succeeds(self) -> None: + self.assert_update_document_succeeds(local_operation='GET /update_document', span_name='mongoose.Employee.findOneAndUpdate', db_operation='findOneAndUpdate') + + + @override + def _assert_aws_attributes( + self, attributes_list: List[KeyValue], expected_span_kind: str = SPAN_KIND_CLIENT, **kwargs + ) -> None: + attributes_dict: Dict[str, AnyValue] = self._get_attributes_dict(attributes_list) + self._assert_str_attribute(attributes_dict, AWS_LOCAL_SERVICE, self.get_application_otel_service_name()) + self._assert_str_attribute(attributes_dict, AWS_LOCAL_OPERATION, kwargs.get("local_operation")) + self._assert_str_attribute(attributes_dict, AWS_REMOTE_SERVICE, self.get_remote_service()) + self._assert_str_attribute(attributes_dict, AWS_REMOTE_OPERATION, kwargs.get("db_operation")) + self._assert_str_attribute(attributes_dict, AWS_REMOTE_RESOURCE_TYPE, "DB::Connection") + self._assert_str_attribute( + attributes_dict, AWS_REMOTE_RESOURCE_IDENTIFIER, self.get_remote_resource_identifier() + ) + self._assert_str_attribute(attributes_dict, AWS_SPAN_KIND, expected_span_kind) + + @override + def _assert_semantic_conventions_attributes(self, attributes_list: List[KeyValue], **kwargs) -> None: + attributes_dict: Dict[str, AnyValue] = self._get_attributes_dict(attributes_list) + self._assert_str_attribute(attributes_dict, "db.mongodb.collection", "employees") + self._assert_str_attribute(attributes_dict, "db.system", self.get_remote_service()) + self._assert_str_attribute(attributes_dict, "db.name", "testdb") + self._assert_str_attribute(attributes_dict, "net.peer.name", "mydb") + self._assert_int_attribute(attributes_dict, "net.peer.port", self.get_database_port()) + self._assert_str_attribute(attributes_dict, "db.operation", kwargs.get("db_operation")) + self.assertTrue("db.statement" not in attributes_dict) + self.assertTrue("db.user" not in attributes_dict) + self.assertTrue("server.address" not in attributes_dict) + self.assertTrue("server.port" not in attributes_dict) diff --git a/contract-tests/tests/test/amazon/mysql2/mysql2_test.py b/contract-tests/tests/test/amazon/mysql2/mysql2_test.py new file mode 100644 index 00000000..a6b892bb --- /dev/null +++ b/contract-tests/tests/test/amazon/mysql2/mysql2_test.py @@ -0,0 +1,60 @@ +# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +# SPDX-License-Identifier: Apache-2.0 +from typing import Dict, List + +from testcontainers.mysql import MySqlContainer +from typing_extensions import override + +from amazon.base.contract_test_base import NETWORK_NAME +from amazon.base.database_contract_test_base import ( + DATABASE_HOST, + DATABASE_NAME, + DATABASE_PASSWORD, + DATABASE_USER, + DatabaseContractTestBase, +) + + +class Mysql2Test(DatabaseContractTestBase): + @override + @classmethod + def set_up_dependency_container(cls) -> None: + cls.container = ( + MySqlContainer(MYSQL_USER=DATABASE_USER, MYSQL_PASSWORD=DATABASE_PASSWORD, MYSQL_DATABASE=DATABASE_NAME) + .with_kwargs(network=NETWORK_NAME) + .with_name(DATABASE_HOST) + ) + cls.container.start() + + @override + @classmethod + def tear_down_dependency_container(cls) -> None: + cls.container.stop() + + @override + @staticmethod + def get_remote_service() -> str: + return "mysql" + + @override + @staticmethod + def get_database_port() -> int: + return 3306 + + @override + @staticmethod + def get_application_image_name() -> str: + return "aws-application-signals-tests-mysql2-app" + + def test_select_succeeds(self) -> None: + self.assert_select_succeeds() + + def test_drop_table_succeeds(self) -> None: + self.assert_drop_table_succeeds() + + def test_create_database_succeeds(self) -> None: + self.assert_create_database_succeeds() + + def test_fault(self) -> None: + self.assert_fault() + diff --git a/contract-tests/tests/test/amazon/requests/__pycache__/requests_test.cpython-312-pytest-8.3.2.pyc b/contract-tests/tests/test/amazon/requests/__pycache__/requests_test.cpython-312-pytest-8.3.2.pyc deleted file mode 100644 index db5d38ffa012c26e8de1c4a3f4237f2df90700fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9567 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 diff --git a/contract-tests/tests/test/amazon/requests/__pycache__/requests_test.cpython-312-pytest-8.3.3.pyc b/contract-tests/tests/test/amazon/requests/__pycache__/requests_test.cpython-312-pytest-8.3.3.pyc deleted file mode 100644 index af8cab841c6bcc3be6e575be510dc3568f419179..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9565 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 a-!nbmGpGOP`jTZYu$j7+KQR=ert`nKA>McZ diff --git a/contract-tests/tests/test/amazon/requests/requests_test.py b/contract-tests/tests/test/amazon/requests/requests_test.py deleted file mode 100644 index 5202fd83..00000000 --- a/contract-tests/tests/test/amazon/requests/requests_test.py +++ /dev/null @@ -1,148 +0,0 @@ -# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. -# SPDX-License-Identifier: Apache-2.0 -from typing import Dict, List - -from mock_collector_client import ResourceScopeMetric, ResourceScopeSpan -from typing_extensions import override - -from amazon.base.contract_test_base import ContractTestBase -from amazon.utils.application_signals_constants import ( - AWS_LOCAL_OPERATION, - AWS_LOCAL_SERVICE, - AWS_REMOTE_OPERATION, - AWS_REMOTE_SERVICE, - AWS_SPAN_KIND, -) -from opentelemetry.proto.common.v1.common_pb2 import AnyValue, KeyValue -from opentelemetry.proto.metrics.v1.metrics_pb2 import ExponentialHistogramDataPoint, Metric -from opentelemetry.proto.trace.v1.trace_pb2 import Span -from opentelemetry.semconv.trace import SpanAttributes - - -class RequestsTest(ContractTestBase): - @override - @staticmethod - def get_application_image_name() -> str: - return "aws-application-signals-tests-requests-app" - - @override - def get_application_network_aliases(self) -> List[str]: - """ - This will be the target hostname of the clients making http requests in the application image, so that they - don't use localhost. - """ - return ["backend"] - - @override - def get_application_extra_environment_variables(self) -> Dict[str, str]: - """ - This does not appear to do anything, as it does not seem that OTEL supports peer service for Python. Keeping - for consistency with Java contract tests at this time. - """ - return {"OTEL_INSTRUMENTATION_COMMON_PEER_SERVICE_MAPPING": "backend=backend:8080"} - - def test_success(self) -> None: - self.do_test_requests("success", "GET", 200, 0, 0, request_method="GET") - - def test_error(self) -> None: - self.do_test_requests("error", "GET", 400, 1, 0, request_method="GET") - - def test_fault(self) -> None: - self.do_test_requests("fault", "GET", 500, 0, 1, request_method="GET") - - def test_success_post(self) -> None: - self.do_test_requests("success/postmethod", "POST", 200, 0, 0, request_method="POST") - - def test_error_post(self) -> None: - self.do_test_requests("error/postmethod", "POST", 400, 1, 0, request_method="POST") - - def test_fault_post(self) -> None: - self.do_test_requests("fault/postmethod", "POST", 500, 0, 1, request_method="POST") - - @override - def _assert_aws_span_attributes(self, resource_scope_spans: List[ResourceScopeSpan], path: str, **kwargs) -> None: - target_spans: List[Span] = [] - for resource_scope_span in resource_scope_spans: - # pylint: disable=no-member - if resource_scope_span.span.kind == Span.SPAN_KIND_CLIENT: - target_spans.append(resource_scope_span.span) - - self.assertEqual(len(target_spans), 1) - self._assert_aws_attributes(target_spans[0].attributes, kwargs.get("request_method"), path) - - def _assert_aws_attributes(self, attributes_list: List[KeyValue], method: str, endpoint: str) -> None: - attributes_dict: Dict[str, AnyValue] = self._get_attributes_dict(attributes_list) - self._assert_str_attribute(attributes_dict, AWS_LOCAL_SERVICE, self.get_application_otel_service_name()) - # InternalOperation as OTEL does not instrument the basic server we are using, so the client span is a local - # root. - self._assert_str_attribute(attributes_dict, AWS_LOCAL_OPERATION, "InternalOperation") - self._assert_str_attribute(attributes_dict, AWS_REMOTE_SERVICE, "backend:8080") - self._assert_str_attribute(attributes_dict, AWS_REMOTE_OPERATION, f"{method} /backend") - # See comment above AWS_LOCAL_OPERATION - self._assert_str_attribute(attributes_dict, AWS_SPAN_KIND, "LOCAL_ROOT") - - @override - def _assert_semantic_conventions_span_attributes( - self, resource_scope_spans: List[ResourceScopeSpan], method: str, path: str, status_code: int, **kwargs - ) -> None: - target_spans: List[Span] = [] - for resource_scope_span in resource_scope_spans: - # pylint: disable=no-member - if resource_scope_span.span.kind == Span.SPAN_KIND_CLIENT: - target_spans.append(resource_scope_span.span) - - self.assertEqual(len(target_spans), 1) - self.assertEqual(target_spans[0].name, method) - self._assert_semantic_conventions_attributes(target_spans[0].attributes, method, path, status_code) - - def _assert_semantic_conventions_attributes( - self, attributes_list: List[KeyValue], method: str, endpoint: str, status_code: int - ) -> None: - attributes_dict: Dict[str, AnyValue] = self._get_attributes_dict(attributes_list) - # TODO: requests instrumentation is not populating net peer attributes - # self._assert_str_attribute(attributes_dict, SpanAttributes.NET_PEER_NAME, "backend") - # self._assert_int_attribute(attributes_dict, SpanAttributes.NET_PEER_PORT, 8080) - self._assert_int_attribute(attributes_dict, SpanAttributes.HTTP_STATUS_CODE, status_code) - self._assert_str_attribute(attributes_dict, SpanAttributes.HTTP_URL, f"http://backend:8080/backend/{endpoint}") - self._assert_str_attribute(attributes_dict, SpanAttributes.HTTP_METHOD, method) - # TODO: request instrumentation is not respecting PEER_SERVICE - # self._assert_str_attribute(attributes_dict, SpanAttributes.PEER_SERVICE, "backend:8080") - - @override - def _assert_metric_attributes( - self, - resource_scope_metrics: List[ResourceScopeMetric], - metric_name: str, - expected_sum: int, - **kwargs, - ) -> None: - target_metrics: List[Metric] = [] - for resource_scope_metric in resource_scope_metrics: - if resource_scope_metric.metric.name.lower() == metric_name.lower(): - target_metrics.append(resource_scope_metric.metric) - - self.assertEqual(len(target_metrics), 1) - target_metric: Metric = target_metrics[0] - dp_list: List[ExponentialHistogramDataPoint] = target_metric.exponential_histogram.data_points - - self.assertEqual(len(dp_list), 2) - dependency_dp: ExponentialHistogramDataPoint = dp_list[0] - service_dp: ExponentialHistogramDataPoint = dp_list[1] - if len(dp_list[1].attributes) > len(dp_list[0].attributes): - dependency_dp = dp_list[1] - service_dp = dp_list[0] - attribute_dict: Dict[str, AnyValue] = self._get_attributes_dict(dependency_dp.attributes) - method: str = kwargs.get("request_method") - self._assert_str_attribute(attribute_dict, AWS_LOCAL_SERVICE, self.get_application_otel_service_name()) - # See comment on AWS_LOCAL_OPERATION in _assert_aws_attributes - self._assert_str_attribute(attribute_dict, AWS_LOCAL_OPERATION, "InternalOperation") - self._assert_str_attribute(attribute_dict, AWS_REMOTE_SERVICE, "backend:8080") - self._assert_str_attribute(attribute_dict, AWS_REMOTE_OPERATION, f"{method} /backend") - self._assert_str_attribute(attribute_dict, AWS_SPAN_KIND, "CLIENT") - self.check_sum(metric_name, dependency_dp.sum, expected_sum) - - attribute_dict: Dict[str, AnyValue] = self._get_attributes_dict(service_dp.attributes) - # See comment on AWS_LOCAL_OPERATION in _assert_aws_attributes - self._assert_str_attribute(attribute_dict, AWS_LOCAL_OPERATION, "InternalOperation") - self._assert_str_attribute(attribute_dict, AWS_SPAN_KIND, "LOCAL_ROOT") - self.check_sum(metric_name, service_dp.sum, expected_sum) diff --git a/dist/aws-aws-distro-opentelemetry-node-autoinstrumentation-0.1.0-dev0.tgz.backup b/dist/aws-aws-distro-opentelemetry-node-autoinstrumentation-0.1.0-dev0.tgz.backup deleted file mode 100644 index 5b45cbadccbed30197a472348c8cf15573d1dd17..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 118545 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 diff --git a/dist/aws-aws-distro-opentelemetry-node-autoinstrumentation-0.1.0.tgz b/dist/aws-aws-distro-opentelemetry-node-autoinstrumentation-0.1.0.tgz deleted file mode 100644 index 41d078292f4004d4cc8b2653691df6c5c13bcdc3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 107783 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 diff --git a/dist/aws_opentelemetry_distro-0.5.0.dev0-py3-none-any.whl b/dist/aws_opentelemetry_distro-0.5.0.dev0-py3-none-any.whl deleted file mode 100644 index 1d33e8b9938cb795f66eec1e3050942cc182e6f1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 58271 zcmb@tQ;;TMfGpa!r)}G|ZCiiawr$(fwr$(CZTB>%`_Ar(xUsu0XCv-?sCuZ^%E&J> zzf46LP%u;=ARwrJkFX*r$VQL_2oMk_I1mu?zb^n=fS0`;gS~^Por|fBsjaDtlP80T zrL&8ZJ%a(j-Pr)(;^Jg!h6a1Ki6j;e>}5zhiew~% zK*n|vnP1W(r%8;K6m`H~Vt?`bBUCx^Ks?Te%*@Q(J#3AU?Pj2IW);--n4w6@GK&G} zDk-2LzZ*?n}|YjLDUMDjU$PTM^mxzk;QbqP67NtOFNZ|-8pIOY$s!Um9Lw(@H69%=gz zlze*360dwRa=Yb%bX|-eg+r^PGkGD8QV23=_sFOR=}MFfU=)b|^c0F^ z80XYtkV59TKfT16rb}rP8H&G!V-B_i?ZnZihfiH{0Jo{1ESVP)@>D5pq(u^9QH5Kv zFh-}c)Xm<(66-`1_>qy6XNEh`@}k8Wn}rmOEv7rZ)2t<tpGeb}xJm@RL6t!?a!X5ivH{@1ES0>T$MB89BO@j&&b z#CSb)bOo~y-QUgMWb3yAQhDMRdjfqJr)Zzt@dJi^Vmr~CyzazRl|R<@W4_bF#se_q zF#H6&e?}715qL;*Ybeb3{rX@n=(3H!56)?$LFvw7==q%oI~FSXU(ijT0zJlv^W;S? zS<4Pp^MKt$Q`t-<4ZNu2N3a$NlAfuK*^Lk5%rMa0Hm^lIa8PM3_@n2w3<_a&J1)AM z%Fp|7;8s|<2(+_T$TGU$bzB)I1Fj??MOV~gZy++8v! zflwyW-5Vz)FnwW}D43DdIYfRUrOKUpJKTj8eKUUd`S$}~N)($l5dBX7Q z9mng@V3wiAuq!$_hP2r=dsqi$^vV^fCeni!H&@T#d7O;5L@K`8a`fl8e`82KxaX1C ze~DyC4}CZh!zqCmdT4)i!&6F{Y#+`aDAzON1u3A%#?d3*8RsrQ6MK4QlM{x9l$wgdv&t&$2A(sQj($)L> z_{aC57bC$egBibacOcj(!)V$9jM@8IHMex6hsZh2M91D zZ?s}vmnt4|{uc*VyjoU17PHKPV{|=3!6CWRX)hTdW-Yz3bNR*>c zQ4b`(i?L?Z8FYa6k^L*cZH>V|U=Lx9}T%7BvrZ*n$ZoiBw3eCx0aLOOST z9{W{$;QqkuL~EpNU#M0=WHu66LbmcidwAi%B3waSNIBENG^Oj`nxHlvn2)rO=IPs? zD>E^QLw!I-Ftvi9XGe3jSc4GBCV?w;AV_$xr1Gu$m|xkogbsV7`wb(1WQgryb>`@< zvn_i?+7JmDb$cP}_%mngAkvS1Al3#gjpAkxFSi(L_XzlbCOte>*~Kdr+uXKk)-@Li z*}{Q;y^x^yr3Dyp9E7)#x5Ld}h371wiDtO}0X$hlrPYalhR-=m7PU6p?p?w$Y~km< ze4aU?DiI8|vRB$Q6#4CkYLgb-bkUNM4$w95m^g=ramGco&nkWE%k{{2@0=QspW*@$ ziZW%>Zk7C9QejbtI$Tn_E-Rx#g7`U29IAjbmj4YsbwQ-nnR@W7l!J^LZh2BEfj*>R zB4*Dgd99qmzLnu7)tGU-poh9A!K{1zLmuP@anEzw`ZKvy4F~ZB2sumxv36%C=)wG{ z@Su+c+1*Jfsq#%607;Mr@YF^-ciOeBSiKiOvbG0*Hq+Z&FZZ1P(Q4nYYr_%$g+)=O ztj~YIWM81tYZDB`>^oiAVRUGQt0tKILo_+Obi=M2HAe(jXx88V z(0hV9pqg*oAqJ!2q6E2KDmoDXE12r|TYT)4EG08|nsuCytW6(t*W(+HT7Mm!<3W|N z5e!yqtRDMNr#USJ1**NNe@=vRr+aNGmf zua$uk%t#}IRizxmP>FTC^b>(4xFit*(x%AwYeFYegq7}TJ@ABBqsRWm5rpq5dlPg% zQy^coSNDmDyJNcQHhne*&oPale5(#%S4S&FM=tEG8Bk{!!@h{$TMpbu_(0FYDN`3} zaiF0}CPm5*<1IN=!^(YWyqbRvdMg0uvj{VQOovWz?=;K3EG|lUH_Aid*&XuBET=~i zsOsZc@>uVMt#Mh4Gzuk8YKL+Q@9;=_ z-(k7q#!wt0jH=#OfKn9>2Cf!Kam9tO${6()d3Ue6Tw_ItlB4WVGG`&Rp%xSY?Cl2Z zT~9bFuPurXh{TMQv==2UUTw^l=r|d)bMraSpR+h*arbwKmzWq5C`8_fP{6FTL&O1T zXhvw_I!OSm2o!;EB2JVJR;)5%tc?Y6t0NtLXagtAkVMDQkX?q!g>Ql_w_HQfDGQUj ziz!sa+l8w2v+Q#yVu~m)!kcwueHiu!mAC@UrTt%RaL8@$wmwr`098#oR zL^I_6;SzvDa{Fm#CbhP4-qN_Imc<3;7jHDN)Ap0^kt23V4)r*2wb>gSFBGRji4imQ7^&;3>)mD9(Y?@{b9cd z2py98R6kEdMyt361JvK?OSniUyELRQBs1;Uj6Q(yPP5x>A9e$@-pF`d`Qx_!M*n?CBT7h+>Lh7i8$73=J?nN#E`iLE1$qrF3 zzybldG0MHLje{6xv2?4fVWG+M zjDm79FhYE6&!+7#2Ly~n3GSorbC`ct!3yR1?O(QY%Og}jf}v7Cc}Y$E3G>WwJgm?{ zt1))W;Akbaw8&$Qc+6C7MB+s1QC)7l;ULN;On65dJ=Ir$r?&_XA8-xGY$l~2!m>a7 zlisg&zu0(x`R@;;zCFR{hK0jZ9=?LBGZ`2p{Ziw28R+$fCtEC}ob;G!xFI#(cDg`a z0IelcjPamvrt^WWC%=b97Cx8es|Vrdt5Zt_cR|DklmHxq6;_-^q`6HPNW^qutlk~o`uv2gCD+X3t5LaHCk6@0BPUK zsT1j~CQO5RZ?#8N>-9oPw2_n90;hp49w z#Mi=ao`oF*DQi9{ZF}HffWhYP*6B@(hU&s{$ccMsRd-*k&1s7lg%fcXI(ZICqu!yxTxF~x00P~L)ROiju)6x8;PF4;fwNdB@MfFw~nY(n#mBsi|iGk99LVz^l zP;`ztk}#ltnKjZ%eZ!h9H7*HaYvEH8pX&9}CB79QILp^2jfWq*y_q$QH)&(CIR11+ ze2G8p2B1hnV>DhgQJtx*{;qjXTQ=3rlZF1!nx3?X9~DYY`^hKh0h3La_BTp#)p8ps z#x0$GYnky{z@^C}r!|&~Y)S_1db!uqDZ(UGL;(%w5eOdzW)4mi^~iMbvUSbOY`7sX zw8+kq*m|R?TS|?bCNqvpuLHzzYDms(w_&nT-g*d=#FIfmD`;+p+J#WIAX^vr(GgWB(WGxh;qE^Q5xp~urc zxq)MY7kqh+Mgzuj0#&H7ro8KN@p6){j*Te0FxKMWrwQU$F=}$Ev4Xij;f~Ft%(8f; z%6^Us6Ez7PSf2>5E%u(UC7kxm@HT{M~ol*y9O+pe(@TNS&H z5LN&{cw0A-moD!J-`6f(uFp)mv)qwSdS~hM)De7uhKJXho4*yZrh3*uGgI31n(Cm( zCG0k?N63L$8R=MJzj1iAB)Zohvd8XiP`p07>AdgjPi7x(4}LDa)+z`_-zVdXXd^}J zF>;I)6U@py_Pb{XJaa13W`DU(^>3JL)&J#5a)}#y=tmfXO?0HB^$*PP=XvoPgR+^@ zZX=|QUSb7uDxC2Z3#5*e9pX04P@uS@f>@ROaD@nybvXADU$omS0 zTdl?pceCRqE=+BtK=fiOP{TAD5<=}REO;@tYT?s*nV*DvLfY(yM@L%&8@8c8XXWF1%#s*dpY}a6EN^KtUv) zxm4Qxyq`d8uv@S|bV6@nvh+mu%(MdEpQj>>0_%w7`vGFRU%Hbk5voWZ?Maj0ErxfL zmGSYv6L&yODEDX7g(kCDn>hIcT^&0afi5SAjn*piN{Q5P0+_DR~$V@#T zy|lM&X!j4}x{-j07v_b%zh~L+2DV&u9sYTMz=ieUhTBV`bGKpU{Zf;z#0Qa0x_t)z zoc+Ztx%ofdXd)=q%iR`Hv-XQWM%L|ZwS0D!e zkylnd$}$a_&h#8B0HOB(IrG5UxFpb(?>>JNnJy6i)9{sLz~&`g8?Jv!x86=LLK)I+`%y}koGz$QIV$%R7dy=`oc*VK(sDe@MY>rD-y%s_9#kI$p-XuX^26Lx&LJN#R+TyM2EfI{`a| zd%eA%V;I-qC6*sIH){+T*uLJch_&D^gEpG!XW`eRgV*P0Dme)ZlCC%D8oe)8{V`6? zbSW=e)GhPuJb&FDndMpZYt3VrTYpE%R8QZUHy~Gjyr+}AX9FfQOmB5#outasToVt{ zuPq{B>7u6M*`AU%dahX*p8$+zev?|WW;IOhZ=>oO2z09h-!AJ(ff-??29HK-aC$^h zppi5H8j>S5?@+3UM&At01^oi1b+O+b$&d$?*YI$I-XGiEpD&kj0mNB5V-va2v3n9x z#iyd<{T?B@(@%Lvq{c^u8YL!mDb?S_R^01^h`k?5=&FNy!5<#pi@3u_(~~BZ=0p~C zZ#D>$$@)xXQwo>}?r>_&5)YK8SE_laLSd0%zTYAqbsw3P!0DJvBT%KCz0;v?P9 zVc|gRe<@jv_b?99fFTBmfkpg$@p?iz1EC_X94_wz5-rim`g>Q$xs5h&>_CND25CFB zXiZL}@_)~0vJMbaHwX}!?Asi##?&<)7bt=krGlbKWc~K-oEj(4jKwFD%2Dl))f3r* zsmav>XN+?jY0I-3R*w_k82a&$m;a_G^J=#{c2Ndb+b7&Sfh$%zY?mc7WJ%w&XB$KY z|CImq?ULBM+iU9@DXP0(SR0hJ>Q#H-8)HvX4IzM8?!f@KARIL=~lQY zQ)R=CWXR_d;*N3%TZ!hpsGsvn=l2a1y#F2dcHEYso=k$WLnBqH(Ja0XjQBT)OBQ_q zhI!)$_`ip{SugZN)G$Cm)CB)7CjK|!uCoKc&cMOR-q_UH+0xG3z}3al=3lH^qh*`C z$%*nkTQ|>bke|jhVOI4gs&a#7u>KeIkW9eFwK{znlum$qj2NjmO6~2KL7T}&BNNN< z?WqWJzTch1PE8($2_=FAmaRJ#*7Zi8=pm%h9@!D;ePjZuG#VgV4poBoWRfD7lN`2K z-DChQJ)ZYjhhf~w?`dpB5A|O3p~`VQnRQcC_s_(Be-K{Z$AtgJBkvtQxX?x7wOGbT zPKd79R!BH0ny6`bZ~~PQ5BWj1rcF^my&z1<`2J85Eg~(EGZjc}O2QXt$*Uo6hdvG3YM*nlYs`ojHi5&pRGo zODkjUO$YmNv!_KPhHQCqv7MFpX#8&#CPIJZmM1)(v!GHXetHlE1TuF;%s3ul-&nSzzj5MDJac&^kb2IK2QQF=en&UaJDq z%>>c?a7t2`C#@nv^f+w zCmQ(TfAk;Z(0`2=NoyrlqOV|L%kFN&o!h@I5mn|d4HQ40;|8u3+M88vT%CN9;VGn7 zfd{yBF0wD4AYIdusy5-P4V=}9QR`PRNN;ff_MmhF>Vya3Pbb)SHoW0AynIPL%AQ+f z_eW*$=%{UgB1YF|a5}+Q#4Y5kncsqYasIvoTH6cUi!N?1=`f#{7|N~Kx-wsw2u&tl zkzmWwMFKd2APYrALDr`cbS8x3PEJaGo*1suYql0r5JnTmUtfz(qU6muin<0D=oBcU zeJ1*VG*t+qP~-Wg8o!*O#aAp>luCRMdxOQ=c*y|6M)<|-P%t@QAv^5&SLQ=BsiW@+g-n*r!bVbcYSkHGJ`V>DhqEcJP zYh?I@F28J9lGpP-P=2o$^S#C#*C7Le16Ju>0^lxOp%p-oL5ym9Xm@n~&Rijty7a82 zVM*MNNtY1GXc??|yR<~7`GKe;j>Ln*Zh8*`?{@(cZ-Xjq}x!cQw-p-714G{Or^{+`eJX^I~v@qssw2s2=$f56?kmugmk;ap$uuI5t)}Rx*mNO9`%_X9Zsg z>KSy4SPynj5)R(dCbJZbcmkjhuGjXL&IAkgHuYM>+8_stB!8Ac-0dcFuGrfK4Pp`>qZCS4FI2_1{N zBG*b@t0T=tlDRp}PAG?SyqkGA4oqo(=mnF#hZC;*nu&B=#yvM;Q{du-9abZ6$N3Xh zBrCl^wAd1EMcaa`x4f?jdVZ`N3-=q;R?x-j7Ay!C9Ek+zZwU8HpO|KOOF-au1Tp~^y5^F7f9ZJvI= zwb3u_L$VP5yRb@;+PaCUP7y;FBO(QSVOnf`?Vq%zkc8LnLAhriP!nARD#EfZ6EN|vdfri!wBCau$h zC&0kLM#zF2DZ-fE+@1bgW`^d^%(IO8hE;O}w*36T;?W?`h#y327PjNS75AdBaX--m zVyv*RVeZBesw*HA$2UO^y%{^(h}NV0SGHp4C|rJE?V7d#knL z_g1w&aG~+t^P13bYF(N?IO(yiyljm*mMe0_saTWBg%z>Oy}n57jl4}WkD!<$?8FFL zUV?me{Y2HM@8;Q~$>X8hx#~v*Il@lN+usmm@oltE$#kQh_+oM`<6Q2j)%$-i_Of{@ z#guJlf9ai1)VP)1N)&Cmy4I-g)H9#UF>HK58QkQVSB{3`ah#%NhmuAgoz4vEWK2=a z8Wlu~E!GMsPrN(^1LT-mW>aPxe=JJB4n<^SI1$x)m$pn$=yORuu{|~Y%~O?gsIR&g z>n1J+Kee8DdFp%hYEE64wR>`RI6W5bSegLuaRbAtYHign$Klo*Us_PSO-b!04<#%H z8&m-30Wq5KZIb|Cy`LvJ<>IIw8WXr(<2M5L-H#Gj?VQ?U-oauk+uyn1>u2<%0*F2s zzbY!=rO1sr#}2_6T3k~cny5ant6TU5nijZ)gsaB0x+>@@PhJB6Y?|9~>aL9EGdm}g z*x;yN{hRJT!;ntbdvBZSZebt3qe;w_PinJc( z;8kK@_Cw8fjhEuzN#fNI#VBoVC_AX78LSKG(xMH=9NPQg>E=tyffWq#698aObl+NN zzqe9tW6=*?rcZ13R6ZHLwkulFe;U)ieqTjinR_}b@Yz1Dn|>sEfW1o29+g(;wtR#B zcl`-QaQU)%_H63xVhoXn56#G}Nu&;02~qARPj%jxvn zFW&OY@{!tl#;vEmlo*wk_fVdOfyqx>u~mZ@!*dDEnJ_VnahXx zu24xO>~8N#MeRh`W$0<@Jams&Umt>F?VAGCuG|D3q)%x}SXk}CIK%MP_pSWv2JC>e zR5a;F<{xLhyDBHa3uKi8W)!lvquP2)B2pPWefTqx7Y>ZaSOhiQZ(5hhL-n^WJD$w<9y@II(5~^{1Md96iC9 z8#wQiz`&|_A;sV+yN4b~MkYU;`J>5x=9jN-Vc&ixQRWjSZt<;+GLiF$ zB7`xEx(q@ONhYHvH>iRxR=|2wV0?Crl|W3dmAeRE@r=8jQ?!BpG8`gnjm3&E}=L;g8j_0=z=2MYD&VC|6Ga_KVx^ly0qJ5KB<%fGmGqw5sSI&HcI&iWKqrIEMwj$+1m z+?pF{H2xdHY0B#P-Dvry0)3ai*Rp%tBi{qZxcrB${jWCnKYL3h8e4Wp|3NYuNE0G>g6h%y*pf;lO!J0q@`hbIAVP%m zi{s?P$skfASAM?cl2WC|GL01kLF2@8T+RdrO+0G1Et>YU**5Qe(xVld;@3i@Oe$H> z)|hk7N>FwK!#2vOHu7cg*}=enA+&hg&7#Xb{lyK$U>5t&i9jvI=mq09ijOZK#QR43 z;GAk&r*CD5)?{sDO6ao6xRklhEVk+)yEVSSZeUNC>aHlO~fJuEMUXa#O zm=}{ru83^E>2zbSjXbRgj)>486ua%%*&E-+F4+^=G}>bgcH!v&`8epe5Lnlw8m}1vC}F- zWK6_?8p`1!qllcQPO}qDWLmU>h6vCo~u`X3`|>&D*$0;<`-_n_|?_+Onjl$5csks-60c zg(cSlj^~9x^DvfZ0J;Tj<5(pksD#@YJjFNFZx}q~aa5YYcdXAkfqYz4n(a|_7Vo|^ z0)l)qdKU585IuQ7+X{501;5@ugwgdYv{)nzyFpegD#&-&JYXa$mve`OS|btLjJ=iiFx0nNysO1tKa-J?;xT@pAN?o&7V51BGzCA(k^b^15vMv zigOj8Z?1Qz;J=Xe2XzRd_qMpUMIkD5!4dQXb%kTE29BBpD#kY2@!scNM7@PZGm{*K z#QQq@5oRmvyqXzpJW2#?!u0a8(M69ni-Ze#GY1(1Vz?88V$Pjs$hA%@Up?@k{#|&- z&qmy!Gi#>~eoH+8F|c&ws;&nbN|m?=YziuUWHugN(5x~}iROV$xQ^4*^8jrO9_U@5 z!t9)l@%T1Ee*V&DTn1;^ql~zSKY6SGUXm~)gxgT$DImMee(?C=G~=<@oDS;)Zsm#s zHKiK@R-Mz9G*Ix2wutCKTOx8exVn}HzN9*1mGg7^%)MeUI_?Z{u3(lWLqhY*iz_Velq`7Qxn9_#o=lq>f zux)w8%b3KU3UvGl9BhBHa0Bl;KeBy7G{Ye6bsl0v(ku^IM}NW^9Px|jwAQA}96=N( z!CEoeS(VZ+sP9vl+X;1bPcrSqMaeegF4kojRyv&!Thu{Ie-4)0%KXw>opu<$CzHqO zQszA1IeHU}d25_~4@wpWJ9v?_lP1dw%yDCuku6_(UUe|KO){xNAUGVu$7Gy z=&wG2QBGu=_S@W{E`G6eFki)-}VWWN0n2?RklNuJRx>@ucRb!VVGhE4(y1KBhG z*Mgt_AuC0^dbr~Mb*(L+fq-QGe>eaPj9e{kO#V}C)~F5GZ3-gweA0-|f|E8?dWlMt zr8@~00t=<63y*7GGijMVXm?#TKVR`!kC8_j%2mCE@Uq;^bbA`x85T|!p?^xiJ_P%15sL~PSfCvmjMB}= z7twuuMwa-!QAW6S3G_!Z$_VjLk=hn8SaQr0i98+JfV{0yGMqngEXPqv%9!FISQSrO z#9E^{=${#)Q#DfCn8ACn(3}tqbROwno&0WuGM7B!)ERYW9^F+ATV1+`@v5R=!l%bK zO}<2lslO3L<(ZhGU19+jo35%p-de!78M12$Ll%8sOv}H+o z$nNebt*3I@C}(rN`+1%hNm}CU=osV77URlI6&(Jzdvj&uj)#h_y*n2L$)s_Z@rm3HkIWQaTVk|3{lOi;Q1 z2K+9Eq4dvIBg?IQl+RLJ_SF`WC|FDb9WdLN%LVuB@b1oXeP)WurPgxfc>XlWz0{H) zD|_}@+>W^2o2>|J5d)IG^`OIcV)XXV^|V(R3~x!7gfjpMzrEU_l1&c93ke~$p{2-8 zQzUeV!rQ#d)!2J;L2zYCww-_5{T|8Nfk0R$xUf5ZL1iGdNo#n{5Y)$ae8seh*Gzoh&B zDSJ{?m8}0w4*b^YI2Y5wjF|plN)FgIDUUB!TW%P_6=0f?-NI5OC%55_7 zVd`{#-ge#bzr)eX?Pzysdymt6+pyBfvW4L2DKerLyZ28iQ%~@5!*nP+U=-nP7l?d9 zf|HroXBhk)FKraOVeCRK@1Z5zL_TI?Sk3S){T)$lWz0v}q%GA$T*8L-){1af&(~Sg z!AP= z`B94I9ZH@St%|qF1zVoakap!}k-j#CAHFHLgI#t`!n!R%I)p5bo8TqXpZGknJxw_T zAYm?Q1jD0CT_KL`%l$|{1`T!x%YhmkhG}w1n(B%ra2ZsuV1G2_auxe$_uvA1%=oTN zG=C$@Xs-9Ku#tx^Ph`9#HBGt&Ga1_05!!N!mY8I|@m)DabwFZ?apbd(n*7Tr9W%&9 zzD){tP*QyP=5l3lESx|k*&zD0?cE*H9#)}oG%-u8yRspA1p#mlAzn2$UK56E9r+27 zAZ(~R)_1`F1inJz2req* zKf=fOH?{d+0RMk(6rBGL^i4e+?44Zxljln`uN02Nk$&>}jKB%9BuBYh_K20(z_kmU z0)Tc}gej~WC`>|cTzjmAwO{=2rmG3ABtX=Pex+BR{VSWy4vihkVst6<*;i|tJ~HHn zH_U=KW{wrimng16{oCBAO2Lw&R&_w$i(jU)L(WHz{fr$k5cLGz7MX3($-kLk$nr1~4?{yf-6vYoS)T z*kQB(g)yx_DZeNls)1F7r7|&`(#yy{R}N3y&XUyDsVtimeg^4MpS-;Cb@A`&jPvX2 z=KskjRT<}{mc|Qa3aM$NwmqIP2NBTVFt4gQzdb!A+TSxPs$z}IBML{+!z2qBTo8Jo zCw`#5ozJvHcx3i+i}HEkzb4WkNjJJW;_qwkY5(`)|0MbFd2n#|Jni2$*!Jz`YCg;tM~~5K%9t^8 zq>e?ds=@NueUm)WAK~@y_r4yRoPK_c!G4Qo_2NQAOzeg`3@#N~(x1 zRyogFOhGg5U+^Y&!Yt<=Qa-T&0Srq}*zch_3T;XMvHo*lL+pi@ps67i#mwo^A~F#; zOLn@NO64LZ)-oBGigoR(wQgxlk(zUd*@ung7Q_qimcuwLj>3Uj=VX?KLG(`!`63H! zi6Bm;!4Y!?z2LSe>cZ9SY?Y*Y)xcR$4L7}dMD*R%!IzB?XCR3JJNF7>|zX~W- z3L%}*FkeuxrLeko22|DKz>62W=oUWY8{4-B?!FP7SQJNde4KidH&B*ZaMN5VSr>UHvO^ zK^RyW?CKMmsceYaJBtrQ)w&|wQCW4M>&xFd?n)SQzFYW{TApKxJv?kxn+lq@SH^J6 zJv7IkJJZsy`DAwGA-=9#+G{-Q(NO$cuu^aZ}qcunvmR(nt@37v0R?o$piL& z@ip-1JcJuDzvp$`Yg+DM!)oWwB>vlmLm*`IWmCGfjo!%h0fTP%F8STF}$;??n_3Jm^PsK|@{ z!+%k91LzA9i59Oh-khOyI@U{3SZNu{U;Ugp#qme_Gk&zFfqtZX86LezcBmUinSR!j z)6co}?-yu2`$An1b>H=4RbAbQL8|>VKN2w7w!ws9@JXJCacV1}-G-RD#Vr=uk38R6 zvNt4}?X#F;483&QDjV4e#l8+N;!5?}HkK%x9mj1=oa5atn?LXS0Z3m~w0}V!s+FQC zvOJEe+L1Whdt6WXii%S+Omk-|eyvy8if*njOBi^Yn}}<8Fu$h>`&|||Q3%N_@NwT% z-ASsZsilp=7|1W@LG-pp%tVe#cR|MGvCkVnI5_(?`M8@txryL{77Uk^w}q*gub+#0 zoL{^o>TtIM_yDlfsh%5-PyIz^76(X1c%|QB-tKmujTIY#nGwCVLB8BpC3)(|_9oxc zJ9&|7Xb@1E>l*#{|H6gQ)|fz!gh@Zog_jc0ZH4qB&O2TNV3qZaQG^-5#qd2PPaId;{H#|OA&cGw1vQ7UuI zBacsaF&sV1!V63mObHz|-C+6oS2GJrX;e5uJyje21cNe7*EA0Hr2HPgTiqX4)z3>t%;ld>r`z!4~MtC!_+K#XZpL)H{)v!_ernwydqVx{<_LNm3EeHqC2#s7}t@9%SfIN_W$%3!c`UWxMN zuv9O$@0!Ae-rrGOa^NGRiCzGo+TNmqAqRs{a3{nXfrwz*ag^6M#b8VJcLdc>-lD+Q z0R|7Qo2orHkHb<`+G13TbJ7>o6=*7czi)=h|2p#SbLa>A<}?d0?joOTdZ3&?i1Bvh zV3rPYz>&vk{hBApPiMWqhdRII(>}*F)Iug*N)HnqLV*seJT(x0u&FXpuUZZLM~$jN zB(8FMK^SEaQK>buCdHdpk2rbJzc}HMQT8Oxk;) z`9OtBo1AD)o<0Qv#m+IZ zfrwnLuC1)Cb>}#P?~rWkqSdZ(X5N15D~rS_&gSos21zf*igXhH8XKdG`^sTXhdauc zM$Ss)GG+BHE!grDL2p`EOO`^N4_QdAN+9=q#$340fot=tFQvHKVF~!i31h^4^GqR^ zCF#~xVcuCZkuvTq@N6X+A~q<)nos5wQ6?ptkwi!UDe)2pYWcWzE1Y4UaY|~OHBPgW z%&ApZY9w~@01>cUrJ%`*t^=Xovt`SVUN^svMl>v<9RD=w*jkJOLPc_X-Um+iJ3s5q zdX{B@h+cf~eD+3=eJG)B1)_}>4xPn#ln0!2Xm{X<)6OZc#T$I#Juzb!Yn?OsH^l

vTUcrx z>8+ph(eJPdD;{%Nv`(L-f)Us3$_b=IK@Q2JTN_GQiK3F=+XSYiijT=y~3_djW5srgC@b)sVC2gKxkPK1Jif*^BR&6(bRZ z%y0eW%AU(G=8VWO_{pn3TSt$+Ys0T6&rq7I-VYIQ;^V=j?-6})wgJ{3_B7>NrHqfQ zwlhO16HS{>55H^8&5y7`U~13g`f_iUn4KH~1Kd+6?B{ zQu;{3WT`G#tx>aq)uA3~(KdA%iFKE99FH&ZS)*Xd5=+RIOb2lz;hoO;@Fp$#Q$(OV4uP!nP!GSZVI+%!x8`5LOwkTynAicI-=jM+x+aPch$=!Rifng5>H2Dj8& z&hzL$huA)MrV`NcQQNo8vW#Jq-?MB$zbfM=hMe9O4JU50xL4bN5;py zpi_}-C&mm+I)}nv3_98m($t((${FQzBPw0cPniGv?W!yeb-{?eTmA8yRagHDB>QWP zY2Mp?_2OO>2$o6dzTZOYixYoNnYV83!Ud$-i!le&H6ss?Q;tgHF30=Cu5Ic^ueRu~ zBov}0!1zOG`uLJ;a;4>D$S!N&@Aa^p##`34x)c)){DJ#p%#49O-?dw=wnxfIi&tNosaA<--!eyNUt&vQZ z#bAY2Dm!@XE(8Gg0gfRqyr*?lnFk~Q+k=1v9ZNrTQuTWeHG_;sgRls~7xpz9#g-Y> zPSnA^ajTN`8(!7Q+20lr{R6> z8gEDS{(&NYw7bAF%I)(0d;&b_FXA~M1*{8m{{uUZFWa5U$0^B}pc!4JSrhy_mpYr-Qr0_gJuLYam1iuKHC5vz9z>BZP zACp9l|6a`GBP$gP1nl=+h)$4*(PlMojnT)LiMF8#>p|iGDF|4e!CyP**e|@-{I=1r z!p~{fFOd&9Z@olThfEDm(=k|>`{05^EhygriXHEn^$pvAen`iHwo|D&6g-itXCNvB zBo%}Xet~E$o(Z6VqIt+i8mSGtXP6oa{?j1EzDl-A13~1E>NDb(PIX7cOMSkRV@DS7 z<;%xse^DnJIM`JZA9wz{$G~uZoMfk(lLxb!H9e>ijIJyOS{mRQ(?$cGK6uz-=KJs( zCJnxtZ-;seYME>0SvrX~!g1Z>o`RmQ;0+udb}Zjkn1TV4H_bk!1TMeXR9S;V4aqiv zy9A!@D-opmgAc$<*+Q@5j%g=|w*ckZcK^lCPb>!-jYc`rvr%s}J7`o=nBE5}myO%7dI;cxi&wBVU%#-=j`<|#vW_u{h%qPS-M z{*v)rUxM=-pgqx|jTtXZ+h#=*0+L1JK;DmL327F9Rfov5u0yYE_{awcLN>U4Z z9ZXk3X30^Yhoq39wO*63Q$NfSs&Ndmo< zah;t$)417}#sp#q7+%i0stJzDuo!TZV05)e8eAzlJtc-_A1OZK!3ZA(5q*x8VW7|_ zevh@wq(8HS;DeW`4$ndn*u=?2+hnDfgsWu!^y%iWQCXDTsopkA?|;k`oOgPd>0UGH z(*jfqV*m^>1+?F2ipo_accs!VtRWMJ`Uu+Ydna`tj{Z~@`0q@uj%4c$r#i4?JfK<8 zj~;cMlwf>7tsup#@xQx}wI{fczBkYC@F^Q1*}YIY^ln=ep_tnTo4y=0!3Z@50838# z%raBcFpdH7m$Q^Ia1UYGD2^QkQ6@dk5p#S-y4d;L?);{Dg8J@c_wsUbUQ+C9R=97C zOBGwdnBvA5IOx%Dr;6af`iO{bRUT1MZ5)HK$P_lNSKfNU*8hYp+)}@LPJD`?_SU|! z-zsgI-L6t{5-UGhz$s$LdRA1k8ueQeOHt8NvzKd37nFo4@)~vJ6wkU*6;TjP=?HTm zK5!6Hk(K0fy#|?9`3a=IB2onXeI=USMM+gv17TDLG_(|0;_V?@LsxRmBF)Txny*(wxACv729vKaw}*rpc!nN{e=2dbysPCJZop)Gs6{&`GW4hIRX4 zfzy^yir@y6Lz+@Hm!ng6G8*6nvfdGlcHH7W#0@B{j9lR*G8z0$q6zV0l=7)Q)3&5n z?pIkK?sw{@wnbp0deeLsvi8KcWSJq{PPEAu>9T_GLh-OZ#p)+%Y^sDjN z9&HYz#Vx0X8rZueP`ikwMHSH^qWZsfHo;^m0B-%gte4)Q6XCfui{em zm-tSKUspswzgEx^B?EXEng?|!%{M&QpWAX0J2oR{d|A$vwFHpv-lBGl3{-k!ZSfD^ zzWXDoX*hOaMjo5R>c!>D;P*FL*27^0&L`BwOnA5T%y%PyOv*~2K6p_$T%BMfIjI^R zZ?oZWWH9M0lMv4%QiqbzpA=>1PwiLRzf#$oCUHKET(`hbYNt5-MexBrAtLu`l4gkd z%>g1|t5kW>LY%)FKl~fyon)idhLb(mkuA!{8OG&PXLjqpGH%xjvg)2kN2JP#6?3*t zSZ==KR~&aKFF?obG&V2ZgYLiFvCR-vOT?@d!sf{VXa@8s$K^yOB$Ds_&9cu6PzfoL#JS=ijMb6FBK(Cly5|#IB$vBPo7sKtB94IVy z-kxB9yVnxS>$OUSe2^95P1G_8+7ms370mV#28%8*Qt@Zj9M{m2jEn_U5Gyvr)LM|N zjnJO&ZW2(Q^Q1m!_$N%rQoCNdjzP!ssxah+@b=k)hxD==vQ{a-ttT3R?F9ktV0pZ_ zDyabpKw|0C z(Z(jZ+b;VVz;{R``HsvHp}P@YUKJV0&irG~s=0)80h&@6`XH`gg;QsJ4`gD5r6|i- zhq;!Ow$*6R8JyR5H5A!t`@0@%aFg$^C(wJEMUj5}z_tBfqMJyyIFpiookEjVKI5i}d=H~QBZ40j^CSX_WGvTds$TrsE*)%hm)h*qa+~LmmgC})Yer{ zcX9j5`A2+t-rN-$hNFgb(ROq{o8SFf_;pEZsFUSD`l2~3ioj8Uj}zqmzTh{pF#G4;t9?CL5pTmsCo?r z9RMGqzd9saZ(E1g_jm8Yi|P~j?KV-7V;+D0V&m0edD9C~i`Zm0A?b9j-6BChg*)Ud z%skN5kdyZajk#cO|2a7N6*G;4#x3x{mrEce_qr zs^Wr5TWpOC<+-bMF84`Ga>_8>d;z(R+?GgAGV5$IO$?Yo)(v12K4fGC|C~Riy`q@c#Os981F!Z?q$O1AEG!M+DIbIDLA8pN0{pCAM>&-wb zvhUWSQ{y?IZXYrHN z$7_Eof470sFL|G)x|~2fA^a1gqNj7fqyw**8`3%|Vb9VV^KvmN8b7CFt%!Sh&GxmW zzFb61g@hpts85eepX8nfC z+x6-8@paR*&%oj{CGp|xAw3i$qSU2mlF1%$Ye?n=e}e z=%?2&%s880T}Cj~tN#^1fI$Mt$I&p5TiVARaB{u*S8DhvlmO!186uKSl2{qX6n}nd z_!tAHimmj(8x5CMgO6*5kjvnyux)H<8ReP%LE9loWApR!+1uK;@EhT7DR*Pz^LJYZ zM)3Rbm-*6aC(yUnS>-$g*FR<^IOZV{^R(VGQ7;l_9ddkL|LykTk{3Ma_4mK22GAGM zb6Wm2ao1q}{9*n7-E{j;WZ{2!09CDR4@Ca{^8lj3D+ediyWeUTefl9};KloeRqF7n zTYA!MuIaeCV(DwP8zQaSOP z$F2CO(HIj13m*=UiR<;3!cfiS`3#R;XZ1aP-Aw9H2u?x6lE9m&&=6l>q8$@x?eA@I zUym`VZUiuNvNkej7pssHQN$Rd2zK)n%PzqVnN_aJI7=zLlxGbY29RrXI}@5$so2m^ zozvIQGJen~a1c}}rR&;U5k+#zwv5K=Sx?fRcV04XJi2(g9r@=E1&uYVgnoyFeVq8c)oFnBujIA=n?n6x&QFP^({ z_$Zhhm&hP_?U+`aex{4fzn-g+N(Ir=X=D=GUt+6Y?j~IjY6aj{SdkwJ7|!Z7IPDFF zrZ&&jm(SiUUc2PR+o>IS2_uCEtC;EGV#Et8pXjHai-1Cy(exg&sDS_s1fEW7->EF{ zX`oF?c8s0vDwqQ+9wGVl09_^%jX_w_Pml9-Sc*k!>leC|CbS$3f2{aR%sp&TG^N zFhpR3a7>KELm&-G#fuc{@*yh?Boq5@{BhUm=`}#n7cw106$p|Nj+)uo26U|%kmzba z05HmfX8&NPLCAO$3QAt&#~=4r**Z+}horzMNL;wuuWw*s zWgXO~x~>3ETMp5Z3@k|t0V`(CqouA|7{rtBzkB$g`n!sIe@O0wwC`NU)yvb}w|8)H zaPg2z$HCpp^G{4M|1O85(v6>_uj4_t^rni>{Lo>4J(43e3$_^fgX3K|l(a?{iuOh0 zVu!X8U4%>RCIe;9vWz|?ASX(q%>G`KMA4KU7z7;eAI zHhfG1!Q$LspFvQHmoK(2-K57yMjM-{WLn4zVIHB*Nm-f-nI>Q|q($tGTSqakre-$1f2{YQA$0W@;n+%(gWSt2 z$%HV+Tm`0oWkN&cZoasv;|Lvw6%D23%JtJOx9Nz7T#{%izYK=*L5wMd`J!zm{ZjIu z6yKER0S65W8ZuM?6Y>IMXj%UbdWI=zyp zSwFjmdXorcMY%_TI1`&7+^ecCNh?)}z~Z>HK(M~1$TAkS1460O14jl-i-gG-mIH}P zm~p!jsCNBY)I0;L6yyMyGhH*^hTEk=VRKe<6O!Tq*-Q zb&!ePjiP4Uv7972^j+!m2M%u)>g6byS9@272r9PJk}&k$_JPg2->T%-`^n48iGECr z76MSxsT)h?I<6SP7_nU~ix6LkHNF;v^3`|=^bihCxY%3@(pKKWGLTod2DPdTXpi=f zd-nitO027@<4}HX0DJ#2wH-RNflQM~WOvKW z9eWAoE}UjO+B6t=k50G8GLWcLt6``VBrK&Ox&w((CR8CPQP4<(Rw-Y)s*)$DFlHG= z0n9uTzXF>;(qBOWC&RwoIN0zOu%cG6xsZ)GzcA7=(aGU)V;;LXiae`Pv)l%@=LJck zx+$`<@F-yZkcub>H+5ra@d8ElJK&(afeY|GwfT^nxsVHi`hZ3OOrf@v6cRIJq(8dA zEZU?(XM}+xgK&m+)dfv7YO@c(tfn&~kuX-`R*;j#W$AL$NLV1MaLjc(ax|}mxOqK( zfptY;neoA?H23}x(Jt@}#=$#Y?*UDf21tVFm-B0@LQqdFfb8)AW>8^)2?RWO_=snW zYlBR|8M04g0;@V|$|iTU1$p;2$134b0{EWRvl5Nk++_qn2)IC30^yXn z)0jX5*_^4pb~+qCOap=y{H(XQ_ONIovt2aAu5okJ18EQ@bT}QXFOrHq*s8MME=y@X znif-%FH2>&bmgG9na8seHkel79rb>&JMN49u2%qFr_x})MwoI~-IsGqniIm-&R~ep zz+o03H_*pmu#ILhdJqkqeZg^vl8pX5$A5cOF_plZkkCAW7z9yuQ_mkAEXVRqg8Pqe z7;9UaYL7o2QOWE`L9p}3JzrxUGov7}Hvi zlOxXaQPmwWpWo$5gT;?@*l2U^(hgxWhLLRD^Zy}gM;(jCN5H1*q9z9Rrlw=+{wR;v z#V5EX0#qx{ThVC`dM4zbN4?uO$*TE;qyUoCpXyG_w+IVFKukNJVMUv*w;v%ly{7d6 z&1FUC6T+TxXLSGN-DTg~Yz{)yzbdBU6wp1&?74t^52w)_WIA*JBZLysJny*a(T-iV zWol(aI1dcFT$gz9c&Hi!m^bw_&8u@Qk#mcaCQH>|l!J>g$g>9D=_pRwxR%5iG+$zq zj2?gX;@I{NGBB(yR`gU(S8`1@zdT_GCq88g3CLZ`0XdOj)v_r;*Ehg$$_PkN8NWbR zNToQlP;9#epSJEz8v%~M-xzP)d|W+E+e@jZYdt$37;PsnLsE7|_T%Y2?6jEsoo{b3RA)5#_Q{8@9G;a>3J3GLob&1*Aso@reR&)vFp z%X$!O_LZ8&cHygB`DGq0`xoE2GDx4k-=!m8TseHAjTKoQ&0~KNY7|&n{`E21R}(C7 zJx6!+#h>x(^I{8q4!!Gm4*P|L#?!TNrtHs4h;tIGH}W09@@Eg$gXh~G?thg*Z|=*Y z2Lb&fnn3;E$)NwgquBo;NU2tlw*BY+>b_KkPKtyf6PPdbN0LLlW#KabYjNGo0T;no z7b2b~E-yN-y^Z_Gs}gzvEu(D-9b}Dt%n9iT&~*1wH1MU1OZw7PA1RyVt2ALDP#A&n=3WI|$Dvf(QlmMRrvRdIUyh}rJWuFx zVNZ=*!}u7hY>6`wC01P8I7IwPLC8S(DA(+P_D=tB-zd%F_^cFO+J4zBi`k--`S^=a z@e)ba69!Exk7S`v$srutXbuEGzA6VOKM#MA&>}!lsdZ&ZKw@P4Yd%O>2-LD=wUP-U zN3g}$rX*28r>C1>3)ji>5xg3leySOl`_F@fH@ zQjqsT3z#R176QS=3O^RUfMg-o<}!#pe(y?+Wb(~Ynq%Fr-6|q%Y<(f56UF38o;?uh z-vsmWVWxaE4D50{_sH!{%HOD2YQ&;)kI;$ZGq)2W9>PvXLZOeAX-@S3K9fTk@M@aD zirs=6`8SqB@K_e8@Cr8WVM#odiZyzKwUGD?XgYoHnKp66+#B9wL*?n_6~#Ox1L%W6 z&XU1DUK=c)v2vm~ zXX12w?Si%8^fx~_5EyD5%3!d3z(ixBYt`S$o|DF$ajA&*t>5tp!v3q@S1G$cCh`H= z!4|Z52I^=ec5!%|E-IiJ$TfdGEv+=_#p`NLI}6G;)a8)CiuQ40URX|>i+ybL} zay?`tYI8TSyZdGwzx^$=>x*J4-`S#({P>AMlos?!fi%hu{mpu5xs6$Hv8}x4S-pmN zG5h>+V-eKQR65Pn<=`HE*ldc#LzfL>HrLF_@d@Ol-}k>>@j3qLQOAEyhxmVei~lK6 z{qJIL-TxCvpRIKJ9}b7_o8AMlUaP&d8eAaEM+8McOY(6vY(rpS4o(g0aWMzZ+uB|6 zA9zwrJt)?-(|HQdu^ZL(?}ttIG05-?iT!J;2m&1j%l#N7F`kC)0)fFSmPqik zDU(J?0K9QgkOT|*_SM`)?fGsAWj^Ewzi4N^vK;?niUhL0-RxoL_aGv=R7l-?@P_k# z>@*;mS#MYbItPmdh|Z`Tu!1*Og$vGq~Olk~+izUyGI5Bin z9^jy>R9p0rDbzs=gkUDahPa4i@BHp)?S9;9LRYqY+$L~VrBk*38pCbu=i8too73n` z_a@dKQ+ozDdg#Lzw9_lYjM(Q)H zm~YVT-|(yy%{?y@<3nBwOXGZw8B(j*$wAt&^9->u57F`_!giGyac61d$z|(gWvAZ{-f6G+)+nO(TNAXth||Q90qg~%+{Rk-M;+u8j~H=_4h@XySb{V{xJQ1 z>MeaVk@YNU^fkcR6%yw4h%z<{X4iF&XoD>bYA8vF2wZI}tYCqEkWL7SntDD!g2JZk zwrMBt*z2jC(-;#&d?WjfNr6gFsm%;6aXQ9jm$MsXb5x70i6p`2BW;#w*DJpQ8N5dn zf7eF6NqBt$sYJjflwrbD6(UjUFeyE->ZkHb?|>gI@?DqGEN*xBJFj*z;K1z}KStCWB>RmQ&M zLn2cm4u)G_euT)PiS(Pcoe|cg4i66ocHIVK8zDPsYp%}iSpGXANNT%x%jm+*=6awi zcAB$~AE6>uGlCtuGUO>(?75$9-*t=e<&%vz8{raZlH>=-ra%?NveIIBMqk{Pbq z>qfVfY4TwiBYHNpvOIJ&wea1_;XEIp;p4W~)#Gl}b@$bSyOLRVs%w4SD#8~VPV^8Y ztjoI&kmf~5z2-UfD1N#A&mhK9%BJrZqsJykE;UUEPLBH_c@LUr6A78+dC5A}{sL zo)*>$oSaWQMPC8*3tUE}&4mMqPv4yms8 z%#6=qp)Sf`qzPwCkp=d^-?1qk()^;hHZE}luRfk7`4nPqr}+;YGfWmeO)*57_&`H` zAeU2uF%5D}TLudmc2P&FaIYd4CIL(wfUzW>(l(XFLd_BvGI{>j(7^B|z7c&M8IWn7 zxB#blb>EM)n$3;DmP19x`Y7T`a4*?nB2CB$|7W?%z|qhWKO9_)SKlTLutK?7;l7X5 ze8es_Qq4^b0R(5O%6TryJ=cYcqn;+pisr;{ui5nnO|8_{@r`EB4JC#eL! zW1+DsnCX|GRLI~cO2h;L8~Li|liz&jwAEi!MOrDl<)rLSICaC=MMjf6V1< zD$Xdi7Spu(cR{k%953&aiWPnxCKQyrqo#;L>NaQWy-2&UnR>3X$XU8=9C9PMLiVPsE%4YaCM zU+sUg4h9x~L7T5LZ@c;%r{$wz7A-hoH`Qxq^3K(Nz^1Z6tJ*mw_rx!F&ad9>7__NJ zYVpm)FukII^$A?j*?D0wfnu3Y_1p9BObXL0KlQgM1vibO2n?HK%yPtJv^h&#f8q#U z{FDxZOoBgzl|f`|y0lMc942j2Nu|5q6HJig#GIabEFFMsowGz=&o15aD>AL~Jg1zV zplyq6GT|g%@7leTf5zHb%&UCsy7K0tInbNj$@hDPrU-x|=cM$_$7k2|^r}C+dR2y+BH*z2 z%}|=;njzSckg*OH$^EZ!c@shqPoQD-K828Hn?S5huyD#%|I@?d?S62A85is<6jPBz zunqKRa~v`(T;q3xu37MU#hSDCmvp;N+$WiW+@k_EG)@f zW!S~N+0v$4Y3CNtN1~9$KDX5ESMy@(0DX@=pcjujLeUXId4q5hlG*?ud9P(%|5h0B z3udX|JOFg8h7_w+nr%eT;^p(k?d+L(m@#^oS*IMr7$8p^VglYuupBCZtv+5Jm`y@| zl>!cnUY}~qJcwH1s$Jxq8`YkUJP3gvgoZpZc#`bq$o#dO8>ri)Ir1z}5p%J@K5T8BXiItE2w|xbiT2g@Is^^mZ2Tg*!pMR40-0Q3w zioq&1*Ebs&8&*85&?PoR>}qac*#kH16%DZ~*Hrf7jlk0!^VQ{)`(~A-QDx}Z!;^KK z8C=exJRjSoal0W8vJ|jTf0;%?g_d=(3iWYoUut$E(zaW=AA=YdAUUi8+tOV}+ zkqboPZpO45l!~lLjG5P(oy{t?9CVQ@zeL_|P#_l7hJS8Jx{wZ2xqBh6+s(I>T6a2< z^JN^E9!U(O?W()TVMB2Y^a1aOSCfko*r< z#KqXb(cISN-((Vbq8@U94hdwATi4!P^$|QEa!<~QoJ~x7OF&HLI*^529QVN`upsptEr&I4>pxqvC`S881`$?N?bie}| zt8!}KJxbrzN8g*MFsV7(F&?RU7$iF%5gl?%s?_JdmMyaQ1v@lwfBrb}{m*2Y|JTj% z?<;5>?X7f;%=N8|4W0gDADrty29_g@g`=&_wx)FARts|1r)r&(iq{zVF{YS-iJm`j zDxRrJmW1^9f||nchV-?~l|%8v?joM)$|g*e51*G^avKrP&gE+DF3<_@uJYUM^x}7~ z4DL;@5BDxNch7sihoW@u>@x4H@0ZW--F>~suU!q!EpE;XZe{K+@4@e@>+3R6?k=xN z?u_ec=ZdQS%KeCHtS=W&b}!FQ-4|gFt`8?~ zS9QqeXsIlmDVIlPj;}jMZ#5vv*YnqRX6q$vEun#{uWk;NtS007xbw@=$9RnAq3oa; zCaU%sEiO$hj0scrFlH&+-Yn*776v0aZp(4&z*+|n3`#+!Q5E|^@QRI=?dGBr)>Uh$ zM-Cke=Vp2;t#sjeq4@&vJrn3Hy`FW3>uwG;ZYiC5EZ8oN$Zp;+Q~u=^)B4LXW_xw! z+yYu*_6hy;UyLq~hn8KL&Q#hWd+FUA7RTPHr0BV;x>S>ONKi7g7H)(6wY^G0Cl-;$ z=2}{RldVplShSANg3qNOIzQyW>s(5HP36)?o-rsVv_IykqTPd%>Cojzax%ThTViG522b6V_?w~WWpds$vG~@Da zv`0ELJvp;PINcW4sQyIo$;_|#9YOHZF8^du0)*~-iEE?Ref?yjR zZ@{UcsjaM&X#(4apqG`$4)1LQyHlY#99Iw&I4ft;JCz2NGLgVMYg`P;fltqnFccmS zh`V3`?J&4UItY7clu@PMy-2sKT;Q8e;*l~Xz92tMp=MMPxw0v!(acOMs-xa#_D)$fvj0x*?3jgq{dA;_pZDa%=O309Wdc4Qi9L5!5Yo8F`91eXO~bNll=F0@NnYJULGe{i8Z46LEOSPW~<=P8ty55~}!8GDoRXc16bqaaV zl>a7OL+R7KsZAJ;5r&manb$M!)PnDk*QegIjU`cP|2xWwTKX~&+Kj+N2}WvmHRYXz zeTG4gL>FE?2@O{`KE69c<^gL6xplnpM{f!&^|IC(tIs&|Vr7Lc1<9%DA@?`obP+0L zq&`@KJ7o2&d^af%JkM7InS{L*_y*`e19XldOX1flvEXDq6SQPzOoV}Jqv1efo@f(W z`CO<-AckQ0K4CD%mvj}GsC4xPG^9KEN19BSr+P4@mMGaf(lJ5i-0)G@4{Idqq%DY! zbF}>xPNBRrn6Q$OmdCOB#1>A2{w(duEZ<_7a8k_7c^JSZhi#-&P+d_ZZ42kza;>O8 zHwzo~06OCPyHhNJ78pf*EDCLh)w zciz-hUEu3za|t4|RNl!5+jubX%j3GT1VYH=XbVXD#XFg7AXo+g5gEKR7HW#(`!k{- z5PD;3QYcoC*sb5$U=>`y)@%P}A%nv-YLf}1^51| z8Uzv^XC+d^uVPSHuMkKLOSgCL!tqxb|~(#%9hV-bs=Gpd3{gIoZld-B`^8w z0UMyw56)y}Z_=Wfv?lOpRyrsZ&K1^2wB_Jn*+meI7$ih{n#UG2Sx7yzJ&Eu7x}c?{* zW+3YH&pVMb<$ZknZK4CXTD>D=b?-uJnsV@f z!Z8Q(pnJRG#Z=0W$p_stz?jNj=G19jX zuP1}`q}w|FuB-wcjkaM-zknxa^AQnDz_L=Kjs{0CL|E!TS$XxGiH1Z(-17~zBPAWD zHI}?Hm&h~EkVsr!nERmtzIVtal1zp@ZAB!GbYzeI%&f)Sl6+h%%{AP2-Qhm%wNt=9 zcn|m@_U9b#IJTnDoke}x1YrJ$RJ>N4z#yT&IG4`G3z6nto=QhpnNYL}mZW70(?|il z`DQsy+7mc+B?;IPqx=MqZIh?RITIsE1Cg$oegBrzns|=z!*XDgNOv~F zRhac}oNflPj>67v<7(NDbcQ64eZ)I`Bcl4NMDfN~XyYTwahM`cho&Ss?2HgkW!Oyt5?!WIOpKXV z)Xm+g7-E=>^D!}4FqI!!kfjH74d;^7L;o1oaoTk0gmAQ(qrNSfb_17Cvn3~tnFj|> zw>t;dw|%$iz#O100K(ikTt#X9xt3;}-MX5XaM`pSc54q4_GX>bVqv~kYcm=Rn>43D zl;&lOu*_78+^MHyRlIvSB4l;9X+~UblOKTd*l@eCG4!?>q)*~FG5WYd5lT$zRsEzp z5&SNklZNCF;fes^mRHY64@%o6Qv!N}LO@ZTAmtJNakRB)Dp;2Dd5sFfz)5-x zj%o*sD*pb>i6rJ?r> zWA=7ObdcU>c!wM?WO+}<(D0qH374f8|Beeu)tEyyGvoHxB;(>#IG?EeT4UO7xy3x^ znJUz~qHSY~{G+QPM$V;7Llr%7foTk{IlE{-nFg8C?vLXLEWwMu%uTj^ktDDK31w1o zZu?RXTI=*;V{!#Q$05)P`pch&*L)i`n`fmKIj33f)(vKQ8dKhkz~VwmvZ`t=+9`=S zny0J)lnGN-G4bB|1F|$yt2Kj0ogf=`Y)oEJj6wHT8MTQ!2>>$DnVAbB+o8{rYc~xz zTSo*g5tas4(Q~h$oLbV79t?iS4$&LcY3y9U3~3b(Nk_a+*^L=506=_lY(H`2o}|03 zlECJ!vvw43JPvsZ=H>6j7-lir*MQiSv3@X7ill}*ec4OSvA5$~+T_>)Mr`o8Plr=d?NofQSbwAu8oP>5@vB|7o0jN;BG>*$|Gk+qz@$!W zFS7jCw&w}nsc~Mpc+azS7?JkQGUbZYCD^XT-Nr`9K?oH%%!|ICB~G_~`sq>ZRjAFr z*I@6xs1$|jy80u68A^@SGjF3X+!|xS%B* zt&aJWMy-d16n#`R!_pMA!{~P^PN0MqCJO@z@^xXG{XiPCPH(->hzs_h_^(puh78e| z-Su?LZX?105rROLl}TIGfShzF$n>VHBj6IeYkvj5^D<0>PZKjix$J73E8!@T6o^4RUI1}`+xLfgvfGMiB+mPVoz@E;`}yl z+674;G3LOG?@1R6v|xc*m2RL{pp8T z->TW2tXrO+-XEOb&fg!n|5}d!fN6do{KG~`KYgu{o8-?FAx6D z7ytST%j(;|2HP)GFcK{_{ltij!wpe*8HE>_>`7js%Gn&$Zuw zd{}Qe+?Z`^yS0;I8g@pknNi!2Lf0b=BhT^NmJDFdk4&*|u`4bHNy1!k@ivtp8y2p8 zCC1}KJn=EWa%6S7;UmV#?|#k(ue7hrgA`FJQwOPlC=pGUd)HrEpq|N~ zrJ$O^2U1z(5d!Wtv3f#}-210+Buzvd^VliIX<>;(f8u-<{&;_{lsfE1hucvtbMmja zp0YR#>UWM+s;`NciX>+qygO7coe;Ot_tN3#CfDB+ z#kw@AfOYHJo6*nr)6MfE6AT>?NlHDZf(wd5^E7dI`r z?U1)8iRaa-H8j87TGF>y#Pev=->T-6i4<)O%sN&W7F^kW?zQdqm)|T=SI^fYRGdMevXJ3&;DCZ`^1~HRy

R}y}#8KzPgtyzKsZ~e>9W>!|LSg_N* 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 diff --git a/dist/contract_tests-1.0.0-py3-none-any.whl b/dist/contract_tests-1.0.0-py3-none-any.whl deleted file mode 100644 index 840d765822fa701b6b25b2f07f996eb9d76098ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11442 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 literal 0 HcmV?d00001 diff --git a/dist/aws_opentelemetry_distro-0.5.0.dev0-py3-none-any.whl b/dist/aws_opentelemetry_distro-0.5.0.dev0-py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..1d33e8b9938cb795f66eec1e3050942cc182e6f1 GIT binary patch literal 58271 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