- 🌍 Localstack Terraform Test Runner 🚀
- 🎯 Purpose
- 🔧 Installation
- 🏃 How to Run
- 🔍 How to Run Test Cases
- 🔢 Default Environment Variables for Terraform Tests
- ⚙️ Options
- 🔐 Services
This utility serves as a test runner designed specifically for Localstack and Terraform. By leveraging it, users can execute test cases from the Hashicorp Terraform provider AWS against a Localstack Instance.
The primary objective behind this project is to segregate test cases from the Localstack repo and execute them against Localstack. This helps in obtaining parity metrics.
- 📦 Clone the repository (including submodules):
git clone [email protected]:localstack/localstack-terraform-test.git --recurse-submodules
- 🔀 Ensure you're on the latest version of the submodules:
git submodule update --init --recursive
- 🚀 Install dependencies:
make install
- 🔑 (Pro-image only) Set the LOCALSTACK_AUTH_TOKENenvironment variable.
- Apply the patch to the Terraform provider AWS:
python -m terraform_pytest.main patch
- Construct a testing binary for the Golang module:
python -m terraform_pytest.main build -s s3
- Now you're all set to utilize the python -m pytestcommands to list and execute test cases derived from Golang.
- 📋 List all test cases from a specific service:
python -m pytest terraform-provider-aws/internal/service/<service> --collect-only -q
- 🚀 Execute a particular test case:
python -m pytest terraform-provider-aws/internal/service/<service>/<test-file> -k <test-case-name> --ls-start
or
python -m pytest terraform-provider-aws/internal/service/<service>/<test-file>::<test-case-name> --ls-start
- You can prepend additional environment variables to the command. For instance:
AWS_ALTERNATE_REGION='us-west-2' python -m pytest terraform-provider-aws/internal/service/<service>/<test-file>::<test-case-name> --ls-start
| Variable | Default Value | 
|---|---|
| TF_ACC | 1 | 
| AWS_ACCESS_KEY_ID | test | 
| AWS_SECRET_ACCESS_KEY | test | 
| AWS_DEFAULT_REGION | us-west-1 | 
| AWS_ALTERNATE_ACCESS_KEY_ID | test | 
| AWS_ALTERNATE_SECRET_ACCESS_KEY | test | 
| AWS_ALTERNATE_REGION | us-east-2 | 
| AWS_THIRD_SECRET_ACCESS_KEY | test | 
| AWS_THIRD_ACCESS_KEY_ID | test | 
| AWS_THIRD_REGION | eu-west-1 | 
- --ls-start: Initializes the Localstack instance before test case execution. It triggers the CLI:
localstack start -d
- --gather-metrics: Gathers raw test metrics for a specific run. But first, make sure you manually install the extension:
localstack extensions init
localstack extensions install "git+https://github.com/localstack/localstack-moto-test-coverage/#egg=collect-raw-metric-data-extension&subdirectory=collect-raw-metric-data-extension"
Remember to set the SERVICE environment variable for naming the metric file.
Executing this test suite is a time-intensive process. To cater to this, the following mechanisms are in place:
| Mechanism | Description | 
|---|---|
| Blacklisting | Services devoid of tests are blacklisted to avoid needless execution. | 
| Ignored | Services might have test cases, but if they all fail leading to timeouts, they're marked as non-functional and bypassed. Refer to terraform_pytest/utils.py. | 
| Partitioning | Some services are extensive and get divided into partitions. Each partition holds a unique subset of tests for that particular service. |