forked from toolshed/docs.coopcloud.tech
		
	docs: automation for int suite
This commit is contained in:
		| @ -54,11 +54,42 @@ go test ./pkg/recipe -v -run TestGetVersionLabelLocalDoesNotUseTimeoutLabel | |||||||
|  |  | ||||||
| ## Integration tests | ## Integration tests | ||||||
|  |  | ||||||
| ### Install dependencies | ### Running on the CI server | ||||||
|  |  | ||||||
| We use [`bats`](https://bats-core.readthedocs.io/en/stable/), you can install | Based on | ||||||
| the required dependencies with the following. You also need a working | [R020](https://docs.coopcloud.tech/federation/resolutions/passed/020/), we have | ||||||
| installation of Docker and Go (not covered in this section). | automated running the integration test suite. Here's the TLDR; | ||||||
|  |  | ||||||
|  | * We have a donated CI server (tysm `@mirsal` 💝) standing at the ready, | ||||||
|  |   `int.coopcloud.tech`. | ||||||
|  | * We run the entire integration suite nightly via our Drone CI/CD configuration [here](https://git.coopcloud.tech/coop-cloud/abra/src/branch/main/.drone.yml) (see "`name: integration test`" stanza) | ||||||
|  |  | ||||||
|  | What follows is a listing of how this was achieved so that we can collectivise | ||||||
|  | the maintenance. | ||||||
|  |  | ||||||
|  | On the server, we have: | ||||||
|  |  | ||||||
|  | * Created an `abra` user with `docker` permissions | ||||||
|  | * Ran `apt install bats bats-file bats-assert bats-support jq make git golang-1.21 wget bash` | ||||||
|  | * Installed `bats-core` from source, following the instructions below | ||||||
|  | * Docker was already installed on the machine, so nothing to do there | ||||||
|  | * `docker login` with the `thecoopcloud` details so we don't get rate limited | ||||||
|  |  | ||||||
|  | The drone configuration was wired up as follows: | ||||||
|  |  | ||||||
|  | * Generated a SSH key and put the public key part in `~/.ssh/authorize_keys` | ||||||
|  | * Added that public key part as a "deploy key" in the abra repo (so we can do `ssh://` git remote pulls) | ||||||
|  | * Added the private key part as a Drone secret which is available in build so that the build can SSH over to the server to run commands. That was done like so: `drone secret add --repository coop-cloud/abra --name abra_int_private_key --data @id_ed25519` | ||||||
|  |  | ||||||
|  | Please ask `@decentral1se` or on the Matrix channels for SSH access to the machine. | ||||||
|  |  | ||||||
|  | ### Running them locally | ||||||
|  |  | ||||||
|  | #### Install dependencies | ||||||
|  |  | ||||||
|  | We use [`bats`](https://bats-core.readthedocs.io/en/stable/) to run the tests. | ||||||
|  | You can install the required dependencies with the following. You also need a | ||||||
|  | working installation of Docker and Go >= 1.16 (not covered in this section). | ||||||
|  |  | ||||||
| ``` | ``` | ||||||
| apt install bats-file bats-assert bats-support jq make git | apt install bats-file bats-assert bats-support jq make git | ||||||
| @ -75,12 +106,14 @@ cd bats-core | |||||||
| sudo ./install.sh /usr/local | sudo ./install.sh /usr/local | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
| ### Setup Test Server | #### Setup Test Server | ||||||
|  |  | ||||||
| For many tests an actual server is needed, where apps can be deployed. You can | For some tests an actual server is needed, where apps can be deployed. You can | ||||||
| either use a local one or a remote test server. | either use a local one or a remote test server. There is also a way to run or | ||||||
|  | skip tests that require a remote server. This is covered below in the | ||||||
|  | [filtering tests](#filter-tests_1) section. | ||||||
|  |  | ||||||
| #### With remote test server | ##### Remote swarm | ||||||
|  |  | ||||||
| ``` | ``` | ||||||
| export ABRA_TEST_DOMAIN="test.example.com" | export ABRA_TEST_DOMAIN="test.example.com" | ||||||
| @ -89,14 +122,9 @@ export ABRA_DIR="$HOME/.abra_test" | |||||||
|  |  | ||||||
| `ABRA_TEST_DOMAIN` should also have a DNS A record for `*.test.example.com` | `ABRA_TEST_DOMAIN` should also have a DNS A record for `*.test.example.com` | ||||||
| which points to the same server so that the test suite can deploy apps freely. | which points to the same server so that the test suite can deploy apps freely. | ||||||
| It's advised that you re-use the same server and therefore the same Traefik | The test suite does not deploy Traefik for you. | ||||||
| deployment for running your integration tests. The test suite does not deploy |  | ||||||
| Traefik for you. Then you'll have more stable results. |  | ||||||
|  |  | ||||||
| You probably don't want to run the entire test suite though, it takes a while. | ##### Local swarm | ||||||
| Try the following for starters. |  | ||||||
|  |  | ||||||
| #### With local swarm |  | ||||||
|  |  | ||||||
| When running the test suite localy you need a running docker swarm setup: | When running the test suite localy you need a running docker swarm setup: | ||||||
|  |  | ||||||
| @ -128,10 +156,11 @@ bats -Tp tests/integration/autocomplete.bats | |||||||
|  |  | ||||||
| ### Tagging tests | ### Tagging tests | ||||||
|  |  | ||||||
| When a test actually deploys something to a server, we tag it with the following: | When a test actually deploys something, we tag it as "slow". When the test | ||||||
|  | requires public DNS, we use "dns". There may be more tags we write more tests. | ||||||
|  |  | ||||||
| ``` | ``` | ||||||
| # bats test_tags=slow | # bats test_tags=slow,dns | ||||||
| @test "..." { | @test "..." { | ||||||
|   ... |   ... | ||||||
| } | } | ||||||
| @ -166,14 +195,17 @@ bats -Tp tests/integration --filter "validate app argument" | |||||||
| You can filter on tags. | You can filter on tags. | ||||||
|  |  | ||||||
| ``` | ``` | ||||||
| bats -Tp tests/integration --filter-tags "\!slow" # only fast tests | bats -Tp tests/integration --filter-tags \!slow      # only fast tests | ||||||
| bats -Tp tests/integration --filter-tags "slow"   # only slow tests | bats -Tp tests/integration --filter-tags slow        # only slow tests | ||||||
|  | bats -Tp tests/integration --filter-tags slow,\!dns  # slow but no DNS tests | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
| You can also only run the previously failed tests. | You can also only run the previously failed tests. | ||||||
|  |  | ||||||
| ``` | ``` | ||||||
| bats -TP tests/integration --filter-status failed | mkdir -p tests/integration/.bats/run-logs | ||||||
|  | bats -Tp tests/integration                        # run tests | ||||||
|  | bats -Tp tests/integration --filter-status failed # re-run only failed | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
| ### Debug tests | ### Debug tests | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user