Skip to content

Commit c0f519c

Browse files
committed
add contract tests for instrumentation of the following:
* aws sdk * http * mongoose * mongodb * mysql2
1 parent 3d13263 commit c0f519c

Some content is hidden

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

55 files changed

+2242
-574
lines changed

.idea/.gitignore

Lines changed: 0 additions & 5 deletions
This file was deleted.

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

Lines changed: 0 additions & 19 deletions
This file was deleted.

.idea/codeStyles/Project.xml

Lines changed: 0 additions & 136 deletions
This file was deleted.

.idea/codeStyles/codeStyleConfig.xml

Lines changed: 0 additions & 5 deletions
This file was deleted.

.idea/misc.xml

Lines changed: 0 additions & 6 deletions
This file was deleted.

.idea/modules.xml

Lines changed: 0 additions & 8 deletions
This file was deleted.

.idea/prettier.xml

Lines changed: 0 additions & 6 deletions
This file was deleted.

.idea/vcs.xml

Lines changed: 0 additions & 6 deletions
This file was deleted.

contract-tests/README.md

Lines changed: 28 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,55 @@
1-
# Introduction
1+
## Introduction
22

33
This directory contain contract tests that exist to prevent regressions. They cover:
4+
45
* [OpenTelemetry semantic conventions](https://github.com/open-telemetry/semantic-conventions/).
56
* Application Signals-specific attributes.
67

7-
# How it works?
8+
## How it works?
89

910
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.
1011

11-
# Types of tested frameworks
12+
## Types of tested frameworks
1213

1314
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).
15+
16+
* http-servers - applications meant to test http servers (e.g. http module in node.js).
17+
* aws-sdk - Applications meant to test the AWS SDK (e.g. AWS SDK for JavaScript v3).
18+
* database-clients - Applications meant to test database clients (e.g. mysql2, Mongoose, Mongodb).
1819

1920
When testing a framework, we will create a sample application. The sample applications are stored following this convention: `contract-tests/images/applications/<framework-name>`.
2021

21-
# Adding tests for a new library or framework
22+
## Adding tests for a new library or framework
2223

2324
The steps to add a new test for a library or framework are:
25+
2426
* 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+
* The sample application should be created in `contract-tests/images/applications/<framework-name>`.
28+
* Implement a node.js application and create a `Dockerfile` to containerize the application
2729
* 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+
* The test class should be created in `contract-tests/tests/amazon/<framework-name>`.
31+
* The test class should extend `contract_test_base.py`
3032

31-
# How to run the tests locally?
33+
## How to run the tests locally?
3234

3335
Pre-requirements:
36+
3437
* Have `docker` installed and running - verify by running the `docker` command.
3538

3639
Steps:
37-
* From `aws-otel-python-instrumentation` dir, execute:
40+
41+
* From `aws-otel-js-instrumentation` dir, execute:
42+
3843
```sh
44+
# create a virtual environment in python for the tests
45+
python3 -m venv venv
46+
source venv/bin/activate
47+
# build the instrumentation SDK
3948
./scripts/build_and_install_distro.sh
49+
# build the relevant images for sample app and build the contract tests
4050
./scripts/set-up-contract-tests.sh
51+
# run all the tests
4152
pytest contract-tests/tests
42-
```
53+
# exit the virtual python environment
54+
deactivate
55+
```
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 /aws-sdk
7+
8+
# Copy the relevant files
9+
COPY ./dist/$DISTRO /aws-sdk
10+
COPY ./contract-tests/images/applications/aws-sdk /aws-sdk
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)