Tests
Unit tests
Change into the repo directory and run unit tests:
go test -short ./...Integration tests
Integration tests require:
- docker compose
- terraform >= 1.2.0
- Chrome
The following runs integration tests:
go test ./internal/integration...The tests first stands up external services using docker compose:
- postgres (integration tests require a real database)
- squid cache (speeds up tests by caching terraform providers)
- GCP pub/sub emulator (necessary for the GCP pub/sub integration test)
Disable headless mode
Browser-based tests spawn a headless Chrome process. In certain situations it can be useful to disable headless mode, e.g. if a test is stuck on a certain page and you want to know which page. To disable headless mode:
export tofutf_E2E_HEADLESS=falseMore verbose logging
By default, the integration tests don't print the logs from the tofutf daemons they spawn. To enable logging with a verbosity of 1, set the following environment variable:
export tofutf_INTEGRATION_TEST_ENABLE_LOGGER=yes go test -v ./internal/integrationBecause the tests run in parallel and each test runs its own daemon, you'll see the logs from multiple daemons intermingled. You'll instead probably want to run one test at a time, and to stop at the first failing test:
export tofutf_INTEGRATION_TEST_ENABLE_LOGGER=yes go test -v ./internal/integration -parallel 1 -failfastThis can be helpful for diagnosing the cause of a failing test.
API tests
Tests from the go-tfe (opens in a new tab) project are routinely run to ensure tofutf correctly implements the documented Terraform Cloud API.
The make task:
make go-tfe-testsperforms the following steps:
- Starts a docker compose stack of
tofutfd, postgres, and squid - Runs a subset of
go-tfetests against that stack
The tests require the following environment variables:
GITHUB_POLICY_SET_IDENTIFIER: set to a github repo on which the tests can create webhooks.OAUTH_CLIENT_GITHUB_TOKEN: a personal access token with permissions to create webhooks on the above repo.
You can instead manually invoke API tests using the scripts in
./hack. The tests first requiretofutfdto be running athttps://tofutf.localhost:8080, with a site token set tosite-token. These settings can be overridden with the environment variablesTFE_ADDRESSandTFE_TOKEN.
The tests create webhooks on the github repository specified in
GITHUB_POLICY_SET_IDENTIFIER. The tests should delete the webhooks once they're finished. However, should the tests fail and/or panic, then the webhooks won't be deleted and you'll quickly run into the maximum limit of 20 webhooks Github imposes and you'll need to delete them manually.