tests: new sending and filtering functions (#3786)

* move log/filter functions into own file

* add ShellCheck global directives

* use new function for tracking logs

The new function, called `_send_email_with_mid`, aligns with suggestions
from @polarethene and is heavily simplified compared to its predecessor
`_send_email_and_get_id`. New helpers will be introduced to filter logs
according to the MID constructed in this function.

* new filters for searching logs with MID

* use new filters (and sending) functions

* add new helper for asserting non-existence of log message

* use new filters in tests

* Apply suggestions from code review

- `_mid` / `MID` => `_msgid` / `MSG_ID`
- Revised documentation / tooltip comments

* Apply suggestions from code review

* fix tests

* use more distinct names for MSG_ID headers

* update `_filter_service_log` to not use `-i -E`

Moreover, I added a function to print the whole mail log. Appropriate
comments were added to this function to indicate that one should only
use this function when necessary.

* adjust helpers to new helper filter

* follow-up of previous commit

* add CHANGELOG entry

* Apply suggestions from code review

* chore: Update OAuth2 to use new log helper

* Apply suggestions from code review

Co-authored-by: Brennan Kinney <5098581+polarathene@users.noreply.github.com>

* added explicit `_regexp` filters for logs

* Apply suggestions from code review

---------

Co-authored-by: Brennan Kinney <5098581+polarathene@users.noreply.github.com>
This commit is contained in:
Georg Lauterbach 2024-01-24 23:06:05 +01:00 committed by GitHub
parent 00018e7e2b
commit ed1e1ebbd3
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
14 changed files with 227 additions and 227 deletions

View file

@ -24,8 +24,7 @@ function teardown_file() { _default_teardown ; }
_wait_for_empty_mail_queue_in_container
# Should be successfully sent (received) by Postfix:
_run_in_container grep 'to=<user1@localhost.localdomain>' /var/log/mail/mail.log
assert_success
_service_log_should_contain_string 'mail' 'to=<user1@localhost.localdomain>'
assert_output --partial 'status=sent'
_should_output_number_of_lines 1
@ -41,35 +40,28 @@ function teardown_file() { _default_teardown ; }
# This test case is shared with tests.bats, but provides context on errors + some minor edits
# TODO: Could improve in future with keywords from https://github.com/docker-mailserver/docker-mailserver/pull/3550#issuecomment-1738509088
# Potentially via a helper that allows an optional fixed number of errors to be present if they were intentional
@test '/var/log/mail/mail.log is error free' {
@test 'Mail log is error free' {
# Postfix: https://serverfault.com/questions/934703/postfix-451-4-3-0-temporary-lookup-failure
_run_in_container grep 'non-null host address bits in' /var/log/mail/mail.log
assert_failure
_service_log_should_not_contain_string 'mail' 'non-null host address bits in'
# Postfix delivery failure: https://github.com/docker-mailserver/docker-mailserver/issues/230
_run_in_container grep 'mail system configuration error' /var/log/mail/mail.log
assert_failure
_service_log_should_not_contain_string 'mail' 'mail system configuration error'
# Unknown error source: https://github.com/docker-mailserver/docker-mailserver/pull/85
_run_in_container grep -i ': error:' /var/log/mail/mail.log
assert_failure
_service_log_should_not_contain_string 'mail' ': Error:'
# Unknown error source: https://github.com/docker-mailserver/docker-mailserver/pull/320
_run_in_container grep -i 'not writable' /var/log/mail/mail.log
assert_failure
_run_in_container grep -i 'permission denied' /var/log/mail/mail.log
assert_failure
_service_log_should_not_contain_string 'mail' 'not writable'
_service_log_should_not_contain_string 'mail' 'Permission denied'
# Amavis: https://forum.howtoforge.com/threads/postfix-smtp-error-caused-by-clamav-cant-connect-to-a-unix-socket-var-run-clamav-clamd-ctl.81002/
_run_in_container grep -i '(!)connect' /var/log/mail/mail.log
assert_failure
_service_log_should_not_contain_string 'mail' '(!)connect'
# Postfix: https://github.com/docker-mailserver/docker-mailserver/pull/2597
_run_in_container grep -i 'using backwards-compatible default setting' /var/log/mail/mail.log
assert_failure
# Log line match example: https://github.com/docker-mailserver/docker-mailserver/pull/2598#issuecomment-1141176633
_service_log_should_not_contain_string 'mail' 'using backwards-compatible default setting'
# Postgrey: https://github.com/docker-mailserver/docker-mailserver/pull/612#discussion_r117635774
_run_in_container grep -i 'connect to 127.0.0.1:10023: Connection refused' /var/log/mail/mail.log
assert_failure
_service_log_should_not_contain_string 'mail' 'connect to 127.0.0.1:10023: Connection refused'
}