blob: 8ac69e5b210ffebafb02e5c3bd4a04907fd7d741 [file] [log] [blame] [view]
# Tests
The tests directory contains integration tests that require a pre-seeded
database.
Each tests/<group> contains a seed.txt file at tests/<group>/seed.txt, which is
used by the docker seeddb container to setup the test database.
The tests can be run using tests/<group>/run.sh.
## Search Tests
The tests/search/scripts directory contains test scripts \*.txt that are run
using tests/search/run.sh.
These scripts follow the format:
```
Test name A
search query A
Expected result A1
Expected result A2
Test name B
search query B
Expected result B1
Expected result B2
...
```
Each test set is separated by a newline. Comments (lines that being with a #),
are ignored.
The imported by counts for a dataset can also be updated in
search/importedby.txt. The file has the format:
```
<package-path>, <imported-by-count>
```
It is expected that the modules for these packages are in
tests/search/seed.txt.
## Symbol History API Tests
The tests/api/scripts directory contains tests that are run
using tests/api/run.sh.
The tests compare API data for a module `tests/api/testdata` with the API
history on the frontend versions page. The frontend that is used for comparison
must have `GO_DISCOVERY_SERVE_STATS` set so that the
`/<path>?tab=versions&content=json` endpoint is available.
### Adding a package
Data in `tests/api/testdata` is generated by running:
```
go run tests/api/main.go generate [module path]:[package path suffix]
```
For example, `go run tests/api/main.go generate github.com/julieqiu/api-demo:pkg` for package
`github.com/julieqiu/api-demo/pkg`.
This data can now be used to check the API history on a frontend by running:
```
go run tests/api/main.go compare [module path]:[package path suffix]
```
## Screentest
The screentest/ directory contains visual diff tests for pages on pkg.go.dev.
Tests are written for the screentest tool from golang.org/x/website.
See the [command](https://pkg.go.dev/golang.org/x/website/cmd/screentest) docs for
more information.
### Running the tests
In order to run the tests, run this command from the root of the repository:
```
./tests/screentest/run.sh <env>
```
`./tests/screentest/run.sh ci` sets up a series of docker containers that run a
postgres database, frontend, and headless chrome, and runs the screentest using
headless chrome.
Tests in `./tests/screentest/testcases.ci.txt` run only for CI and local runs of the
screentest. These tests may rely on mocked data, like the vuln page tests.
Tests in `./tests/screentest/testcases.txt` run for all environments and
are suitable for tests with data that is consistent between environments or
static pages.
### Updating the tests
Update screen shot diffs using the following:
1. Run `./tests/screentest/run.sh -update ci` to collect the updated screenshots.
2. Optionally use `./tests/screentest/run.sh -update -run <test> ci` to update specific tests.
3. Copy the new screenshots from `./tests/screentest/output` into `./tests/screentest/testdata/testcases`
### Understanding Test Failures
If the tests fail with diffs, a file with the diffs will be created in the
testdata directory that show the cause of the failure.
Use `./devtools/docker/compose.sh logs` to get detailed logs of the docker containers.
### Troubleshooting
If docker fails with "connect: cannot assign requested address" during `run.sh`,
try running it again. It will eventually succeed. Do not pass the '-rm' flag so that
prior state is preserved.
You can also try reducing the value of cmdgonetlimit in devtools/docker/compose.yaml.