docker-mailserver/test
Brennan Kinney 7ca056852f
tests(feat): Complete rewrite of letsencrypt tests (#2286)
* chore: Normalize container setup

Easier to grok what is different between configurations.

- Container name usage replaced with variable
- Volumes defined earlier and redeclared when relevant (only real difference is `VOLUME_LETSENCRYPT`)
- Contextual comment about the `acme.json` copy.
- Quoting `SSL_TYPE`, `SSL_DOMAIN` and `-h` values for syntax highlighting.
- Moved `-t` and `${NAME}` to separate line.
- Consistent indentation.

* chore: DRY test logic

Extracts out repeated test logic into methods

* chore: Scope configs to individual test cases (1/3)

- Preparation step for shifting out the container configs to their own scoped test cases. Split into multiple commits to ease reviewing by diffs for this change.
- Re-arrange the hostname and domain configs to match the expected order of the new test cases.
- Shuffle the hostname and domainname grouped tests into tests per container config scope.
- Collapse the `acme.json` test cases into single test case.

* chore: Scope configs to individual test cases (2/3)

- Shifts the hostname and domainname container configs into their respective scoped test cases.
- Moving the `acme.json` container config produces a less favorable diff, so is deferred to a follow-up commit.
- Test cases updated to refer to their `${CONTAINER_NAME}` var instead of the hard-coded string name.

* chore: Scope configs to individual test cases (3/3)

Final commit to shift out the container configs.

- Common vars are exported in `setup_file()` for the test cases to use without needing to repeat the declaration in each test case.
- `teardown_file()` shifts container removal at end of scoped test case.

* chore: Adapt to `common_container_setup` template

- `CONTAINER_NAME` becomes `TEST_NAME` (`common.bash` helper via `init_with_defaults`).
- `docker run ...` and related configuration is now outsourced to the `common.bash` helper, only extra args that the default template does not cover are defined in the test case.
- `TARGET_DOMAIN`establishes the domain folder name for `/etc/letsencrypt/live`.
- `_should*` methods no longer manage a `CONTAINER_NAME` arg, instead using the `TEST_NAME` global that should be valid as test is run as a sequence of test cases.
- `PRIVATE_CONFIG` and the `private_config_path ...` are now using the global `TEST_TMP_CONFIG` initialized at the start of each test case, slightly different as not locally defined/scoped like `PRIVATE_CONFIG` would be within the test case, hence the explicit choice of a different name for context.

* chore: Minor tweaks

- Test case comment descriptions.
- DRY: `docker rm -f` lines moved to `teardown()`
- Use `wait_for_service` helper instead of checking the `changedetector` script itself is running.
- There is a startup delay before the `changedetector` begins monitoring, wait until it ready event is logged.
- Added a helper to query logs for a service (useful later).
- `/bin/sh` commands reduced to `sh`.
- Change the config check to match and compare output, not number of lines returned. Provides better failure output by bats to debug against.

* chore: Add more test functions for `acme.json`

This just extracts out existing logic from the test case to functions to make the test case itself more readable/terse.

* chore: Housekeeping

No changes, just moving logic around and grouping into inline functions, with some added comments.

* chore: Switch to `example.test` certs

This also required copying the source files to match the expected letsencrypt file structure expected in the test/container usage.

* chore: Delete `test/config/letsencrypt/`

No longer necessary, using the `example.test/` certs instead.

These letsencrypt certs weren't for the domains they were used for, and of course long expired.

* chore: Housekeeping

Add more maintainer comments, rename some functions.

* tests: Expand `acme.json` extraction coverage

Finally able to add more test coverage! :)

- Two new methods to validate expected success/failure of extraction for a given FQDN.
- Added an RSA test prior to the wildcard to test a renewal simulation (just with different cert type).
- Added extra method to make sure we're detecting multiple successful change events, not just a previous logged success (false positive).

* tests: Refactor the negotiate_tls functionality

Covers all ports (except POP) and correctly tests against expected verification status with new `example.test` certs.

The `FQDN` var will be put to use in a follow-up commit.

* tests: Verify the certs contain the expected FQDNs

* chore: Extract TLS test methods into a separate helper script

Can be useful for other TLS tests to utilize.

* chore: Housekeeping

* chore: Fix test typo

There was a mismatch between the output and expected output between these two files "find key for" and "find key & cert for". Changed to "find key and/or cert for" to make the warning more clear that it's issued for either or both failure conditions.

Co-authored-by: Georg Lauterbach <44545919+georglauterbach@users.noreply.github.com>
2021-11-16 16:00:16 +01:00
..
bats@54e965fa9d Revert "check-for-changes: performance improvements + wait for settle (#2104)" 2021-08-28 19:16:34 -04:00
config tests(feat): Complete rewrite of letsencrypt tests (#2286) 2021-11-16 16:00:16 +01:00
docker-openldap formatting files according to standard (#1619) 2020-09-24 14:54:21 +02:00
linting make setup.sh completely non-interactive (#2201) 2021-09-21 08:51:59 +02:00
test-files tests(chore): Adjust supported FQDNs in test certs + add wildcard and `acme.json` configs (#2284) 2021-11-03 20:25:25 +00:00
test_helper tests(feat): Complete rewrite of letsencrypt tests (#2286) 2021-11-16 16:00:16 +01:00
default_relay_host.bats Provide complete refactoring of openDKIM script (#1812) 2021-02-18 10:29:34 +01:00
helper-functions.bats Lock file create and remove improvements (#2183) 2021-09-13 20:09:01 +12:00
mail_changedetector.bats Lock file create and remove improvements (#2183) 2021-09-13 20:09:01 +12:00
mail_disabled_clamav_spamassassin.bats introduce variable to control Amavis' loglevel (#1947) 2021-05-06 23:51:45 +02:00
mail_fail2ban.bats introduce F2B v0.11 (#1965) 2021-05-15 11:11:10 +02:00
mail_fetchmail.bats first refactoring fr *.bats according to shellcheck 2020-11-05 19:15:28 +01:00
mail_fetchmail_parallel.bats Solve Fetchmail imap idle issue (#10) 2021-01-17 10:39:09 +01:00
mail_hostname.bats refactor: Internal HOSTNAME and DOMAINNAME configuration (#2280) 2021-11-16 10:50:45 +13:00
mail_lmtp_ip.bats first refactoring fr *.bats according to shellcheck 2020-11-05 19:15:28 +01:00
mail_pop3.bats first refactoring fr *.bats according to shellcheck 2020-11-05 19:15:28 +01:00
mail_postfix_inet.bats Catch errors on config duplication command 2020-10-20 09:33:47 +02:00
mail_postscreen.bats first refactoring fr *.bats according to shellcheck 2020-11-05 19:15:28 +01:00
mail_privacy.bats fix: Remove `mkcert.sh` usage + `_setup_ssl` refactor. (#2196) 2021-09-20 00:31:11 +12:00
mail_quotas_disabled.bats Catch errors on config duplication command 2020-10-20 09:33:47 +02:00
mail_smtponly.bats use wait_for_smtp function instead of sleep 2020-11-06 14:11:42 +01:00
mail_spam_bounced.bats tests(feat): Refactor `test_helper/common.bash` common_container methods (#2275) 2021-11-05 09:35:01 +13:00
mail_spam_junk_folder.bats Fix timing dependent failures 2020-10-20 14:14:04 +02:00
mail_special_use_folders.bats first refactoring fr *.bats according to shellcheck 2020-11-05 19:15:28 +01:00
mail_ssl_letsencrypt.bats tests(feat): Complete rewrite of letsencrypt tests (#2286) 2021-11-16 16:00:16 +01:00
mail_ssl_manual.bats fix: Remove `mkcert.sh` usage + `_setup_ssl` refactor. (#2196) 2021-09-20 00:31:11 +12:00
mail_tls_dhparams.bats fix: Enable DH parameters (ffdhe4096) by default (#2192) 2021-09-15 20:28:04 +12:00
mail_undef_spam_subject.bats first refactoring fr *.bats according to shellcheck 2020-11-05 19:15:28 +01:00
mail_with_imap.bats first refactoring fr *.bats according to shellcheck 2020-11-05 19:15:28 +01:00
mail_with_ldap.bats fix: Remove `mkcert.sh` usage + `_setup_ssl` refactor. (#2196) 2021-09-20 00:31:11 +12:00
mail_with_mdbox.bats first refactoring fr *.bats according to shellcheck 2020-11-05 19:15:28 +01:00
mail_with_postgrey.bats removing bl.spamcop.net for 8.0.1 2021-01-31 16:05:05 +01:00
mail_with_postgrey_disabled_by_default.bats first refactoring fr *.bats according to shellcheck 2020-11-05 19:15:28 +01:00
mail_with_relays.bats Revert "check-for-changes: performance improvements + wait for settle (#2104)" 2021-08-28 19:16:34 -04:00
mail_with_sdbox.bats first refactoring fr *.bats according to shellcheck 2020-11-05 19:15:28 +01:00
no_container.bats setup.sh: docker_container first, then fall back to docker_image (#2134) 2021-09-06 10:13:12 +00:00
open_dkim.bats chore: Housekeeping on the 'open-dkim' script (#2267) 2021-10-30 10:10:32 +00:00
permit_docker.bats first refactoring fr *.bats according to shellcheck 2020-11-05 19:15:28 +01:00
security_tls_cipherlists.bats Dual certificate support (eg ECDSA with RSA fallback) (#1801) 2021-02-21 23:43:41 +01:00
test_helper.bats follow up on #2177 with @polarathene's suggestions (#2180) 2021-09-12 00:43:42 +12:00
tests.bats fix(listmailuser): Don't query quota, if ENABLE_QUOTAS is not 1 2021-11-01 12:09:47 +01:00