Skip to content

Commit 3d13263

Browse files
committed
add contract tests
1 parent cec7306 commit 3d13263

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

51 files changed

+1996
-1
lines changed

.idea/.gitignore

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/aws-otel-js-instrumentation.iml

Lines changed: 19 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/codeStyles/Project.xml

Lines changed: 136 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/codeStyles/codeStyleConfig.xml

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/misc.xml

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/modules.xml

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/prettier.xml

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/vcs.xml

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

contract-tests/README.md

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
# Introduction
2+
3+
This directory contain contract tests that exist to prevent regressions. They cover:
4+
* [OpenTelemetry semantic conventions](https://github.com/open-telemetry/semantic-conventions/).
5+
* Application Signals-specific attributes.
6+
7+
# How it works?
8+
9+
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.
10+
11+
# Types of tested frameworks
12+
13+
The frameworks and libraries that are tested in the contract tests should fall in the following categories (more can be added on demand):
14+
* http-servers - applications meant to test http servers (e.g. Django).
15+
* http-clients - applications meant to test http clients (e.g. requests).
16+
* aws-sdk - Applications meant to test the AWS SDK (e.g. botocore).
17+
* database-clients - Applications meant to test database clients (e.g. psychopg2).
18+
19+
When testing a framework, we will create a sample application. The sample applications are stored following this convention: `contract-tests/images/applications/<framework-name>`.
20+
21+
# Adding tests for a new library or framework
22+
23+
The steps to add a new test for a library or framework are:
24+
* Create a sample application.
25+
* The sample application should be created in `contract-tests/images/applications/<framework-name>`.
26+
* Implement a `pyproject.toml` (to ensure code style checks run), `Dockerfile`, and `requirements.txt` file. See the `requests` application for an example of this.
27+
* Add a test class for the sample application.
28+
* The test class should be created in `contract-tests/tests/amazon/<framework-name>`.
29+
* The test class should extend `contract_test_base.py`
30+
31+
# How to run the tests locally?
32+
33+
Pre-requirements:
34+
* Have `docker` installed and running - verify by running the `docker` command.
35+
36+
Steps:
37+
* From `aws-otel-python-instrumentation` dir, execute:
38+
```sh
39+
./scripts/build_and_install_distro.sh
40+
./scripts/set-up-contract-tests.sh
41+
pytest contract-tests/tests
42+
```
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# Use an official Node.js runtime as the base image
2+
FROM node:20-alpine
3+
#FROM node:20
4+
5+
# Set the working directory inside the container
6+
WORKDIR /http
7+
8+
# Copy the relevant files
9+
COPY ./dist/$DISTRO /http
10+
COPY ./contract-tests/images/applications/http /http
11+
12+
13+
ARG DISTRO
14+
# Install dependencies
15+
RUN npm install
16+
RUN npm install ./${DISTRO}
17+
18+
# Expose the port the app runs on
19+
EXPOSE 8080
20+
21+
# Run the app with nodejs auto instrumentation
22+
CMD ["node", "--require", "@aws/aws-distro-opentelemetry-node-autoinstrumentation/register", "server.js"]

0 commit comments

Comments
 (0)