|
1 | | -# Introduction |
| 1 | +## Introduction |
2 | 2 |
|
3 | 3 | This directory contain contract tests that exist to prevent regressions. They cover: |
| 4 | + |
4 | 5 | * [OpenTelemetry semantic conventions](https://github.com/open-telemetry/semantic-conventions/). |
5 | 6 | * Application Signals-specific attributes. |
6 | 7 |
|
7 | | -# How it works? |
| 8 | +## How it works? |
8 | 9 |
|
9 | 10 | 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 |
|
11 | | -# Types of tested frameworks |
| 12 | +## Types of tested frameworks |
12 | 13 |
|
13 | 14 | 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). |
18 | 19 |
|
19 | 20 | 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 |
|
21 | | -# Adding tests for a new library or framework |
| 22 | +## Adding tests for a new library or framework |
22 | 23 |
|
23 | 24 | The steps to add a new test for a library or framework are: |
| 25 | + |
24 | 26 | * 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 |
27 | 29 | * 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` |
30 | 32 |
|
31 | | -# How to run the tests locally? |
| 33 | +## How to run the tests locally? |
32 | 34 |
|
33 | 35 | Pre-requirements: |
| 36 | + |
34 | 37 | * Have `docker` installed and running - verify by running the `docker` command. |
35 | 38 |
|
36 | 39 | Steps: |
37 | | -* From `aws-otel-python-instrumentation` dir, execute: |
| 40 | + |
| 41 | +* From `aws-otel-js-instrumentation` dir, execute: |
| 42 | + |
38 | 43 | ```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 |
39 | 48 | ./scripts/build_and_install_distro.sh |
| 49 | +# build the relevant images for sample app and build the contract tests |
40 | 50 | ./scripts/set-up-contract-tests.sh |
| 51 | +# run all the tests |
41 | 52 | pytest contract-tests/tests |
42 | | -``` |
| 53 | +# exit the virtual python environment |
| 54 | +deactivate |
| 55 | +``` |
0 commit comments