mirror of
https://github.com/docker-mailserver/docker-mailserver.git
synced 2024-01-19 02:48:50 +00:00
tests(CI): Adjust Makefile & GHA workflow to support new test layout
These updates support running tests that have been relocated into `serial` and `parallel/set*` directories. - `make tests` now calls the two make targets beneath it. The only difference is that `serial` continues the "1 test at a time" approach used prior to this PR, while the `parallel` target increases the `--jobs` arg to run multiple tests concurrently (_configured by `PARALLEL_JOBS`_). - The `test/%` target leverages Bash syntax magic to ease running single tests without providing the exact path. - This syntax also supports providing multiple test names (eg: `make test/clamav,template`) to run. - `**` (globstar) allows for future improvements that can group multiple test files into sub-directories by their scope (eg: anti-spam, ssl, etc). --- chore: Add `shopt -s globstar` to other targets I realized that other targets should have this as well in case it is not set. It is better to be more explicit here than to have weird errors due to `**` not expanding properly. --- fix(Makefile): Add back `.PHONY` targets I encountered `make` telling me the target was already up-to-date, which of course is nonsense. I therefore added back the `.PHONY` targets to ensure tests are always run. --- docs: Added instructions for running a single test See https://github.com/docker-mailserver/docker-mailserver/pull/2857/files#r1008582760
This commit is contained in:
parent
59127e2b25
commit
2cd534a1ab
5
.github/workflows/generic_test.yml
vendored
5
.github/workflows/generic_test.yml
vendored
|
@ -14,6 +14,9 @@ jobs:
|
||||||
run-tests:
|
run-tests:
|
||||||
name: 'Test'
|
name: 'Test'
|
||||||
runs-on: ubuntu-20.04
|
runs-on: ubuntu-20.04
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
part: [serial, parallel/set1, parallel/set2, parallel/set3]
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v3
|
||||||
|
@ -45,6 +48,6 @@ jobs:
|
||||||
cache-from: type=local,src=/tmp/.buildx-cache
|
cache-from: type=local,src=/tmp/.buildx-cache
|
||||||
|
|
||||||
- name: 'Run tests'
|
- name: 'Run tests'
|
||||||
run: make generate-accounts tests
|
run: make generate-accounts tests/${{ matrix.part }}
|
||||||
env:
|
env:
|
||||||
CI: true
|
CI: true
|
||||||
|
|
39
Makefile
39
Makefile
|
@ -1,8 +1,12 @@
|
||||||
SHELL := /bin/bash
|
SHELL := /bin/bash
|
||||||
.SHELLFLAGS += -e -u -o pipefail
|
.SHELLFLAGS += -e -u -o pipefail
|
||||||
|
|
||||||
export IMAGE_NAME := mailserver-testing:ci
|
PARALLEL_JOBS ?= 2
|
||||||
export NAME ?= $(IMAGE_NAME)
|
export REPOSITORY_ROOT := $(CURDIR)
|
||||||
|
export IMAGE_NAME ?= mailserver-testing:ci
|
||||||
|
export NAME ?= $(IMAGE_NAME)
|
||||||
|
|
||||||
|
.PHONY: ALWAYS_RUN
|
||||||
|
|
||||||
# -----------------------------------------------
|
# -----------------------------------------------
|
||||||
# --- Generic Targets ---------------------------
|
# --- Generic Targets ---------------------------
|
||||||
|
@ -17,7 +21,7 @@ build:
|
||||||
--build-arg VCS_REVISION=$(shell cat VERSION) \
|
--build-arg VCS_REVISION=$(shell cat VERSION) \
|
||||||
.
|
.
|
||||||
|
|
||||||
generate-accounts:
|
generate-accounts: ALWAYS_RUN
|
||||||
@ cp test/config/templates/postfix-accounts.cf test/config/postfix-accounts.cf
|
@ cp test/config/templates/postfix-accounts.cf test/config/postfix-accounts.cf
|
||||||
@ cp test/config/templates/dovecot-masters.cf test/config/dovecot-masters.cf
|
@ cp test/config/templates/dovecot-masters.cf test/config/dovecot-masters.cf
|
||||||
|
|
||||||
|
@ -33,14 +37,29 @@ clean:
|
||||||
-@ while read -r LINE; do [[ $${LINE} =~ test/.+ ]] && sudo rm -rf $${LINE}; done < .gitignore
|
-@ while read -r LINE; do [[ $${LINE} =~ test/.+ ]] && sudo rm -rf $${LINE}; done < .gitignore
|
||||||
|
|
||||||
# -----------------------------------------------
|
# -----------------------------------------------
|
||||||
# --- Tests & Lints ----------------------------
|
# --- Tests ------------------------------------
|
||||||
# -----------------------------------------------
|
# -----------------------------------------------
|
||||||
|
|
||||||
tests:
|
tests: ALWAYS_RUN
|
||||||
@ ./test/bats/bin/bats --timing test/*.bats
|
# See https://github.com/docker-mailserver/docker-mailserver/pull/2857#issuecomment-1312724303
|
||||||
|
# on why `generate-accounts` is run before each set (TODO/FIXME)
|
||||||
|
@ $(MAKE) generate-accounts tests/serial
|
||||||
|
@ $(MAKE) generate-accounts tests/parallel/set1
|
||||||
|
@ $(MAKE) generate-accounts tests/parallel/set2
|
||||||
|
@ $(MAKE) generate-accounts tests/parallel/set3
|
||||||
|
|
||||||
test/%:
|
tests/serial: ALWAYS_RUN
|
||||||
@ ./test/bats/bin/bats --timing $@.bats
|
@ shopt -s globstar ; ./test/bats/bin/bats --timing --jobs 1 test/$@/**.bats
|
||||||
|
|
||||||
|
tests/parallel/set%: ALWAYS_RUN
|
||||||
|
@ shopt -s globstar ; ./test/bats/bin/bats --timing --jobs $(PARALLEL_JOBS) test/$@/**.bats
|
||||||
|
|
||||||
|
test/%: ALWAYS_RUN
|
||||||
|
@ shopt -s globstar nullglob ; ./test/bats/bin/bats --timing test/tests/**/{$*,}.bats
|
||||||
|
|
||||||
|
# -----------------------------------------------
|
||||||
|
# --- Lints -------------------------------------
|
||||||
|
# -----------------------------------------------
|
||||||
|
|
||||||
lint: eclint hadolint shellcheck
|
lint: eclint hadolint shellcheck
|
||||||
|
|
||||||
|
|
|
@ -24,6 +24,12 @@ To run the test suite, you will need to
|
||||||
|
|
||||||
We do not support running linting, tests, etc on macOS at this time. Please use a linux VM.
|
We do not support running linting, tests, etc on macOS at this time. Please use a linux VM.
|
||||||
|
|
||||||
|
??? tip "Running a Specific Test"
|
||||||
|
|
||||||
|
To run a specific test, use `make build generate-accounts test/<TEST NAME>`, where `<TEST NAME>` is the file name of the test (_for more precision use a relative path: `test/test/<PATH>`_) excluding the `.bats` suffix.
|
||||||
|
|
||||||
|
To run only the tests in `template.bats`, use `make test/template` (or `make test/parallel/set2/template`).
|
||||||
|
|
||||||
[Install Docker]: https://docs.docker.com/get-docker/
|
[Install Docker]: https://docs.docker.com/get-docker/
|
||||||
|
|
||||||
## Documentation
|
## Documentation
|
||||||
|
|
Loading…
Reference in a new issue