mirror of
https://github.com/docker-mailserver/docker-mailserver
synced 2024-12-18 23:14:11 +01:00
ed1e1ebbd3
* 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>
96 lines
3.4 KiB
Bash
96 lines
3.4 KiB
Bash
load "${REPOSITORY_ROOT}/test/helper/setup"
|
|
load "${REPOSITORY_ROOT}/test/helper/common"
|
|
|
|
BATS_TEST_NAME_PREFIX='[DSN] '
|
|
CONTAINER1_NAME='dms-test_dsn_send_always'
|
|
CONTAINER2_NAME='dms-test_dsn_send_auth'
|
|
CONTAINER3_NAME='dms-test_dsn_send_none'
|
|
# A similar line is added to the log when a DSN (Delivery Status Notification) is sent:
|
|
#
|
|
# postfix/bounce[1023]: C943BA6B46: sender delivery status notification: DBF86A6B4CO
|
|
#
|
|
LOG_DSN='delivery status notification'
|
|
|
|
function setup_file() {
|
|
local CUSTOM_SETUP_ARGUMENTS=(
|
|
# Required only for delivery via nc (_send_email)
|
|
--env PERMIT_DOCKER=container
|
|
)
|
|
|
|
export CONTAINER_NAME=${CONTAINER1_NAME}
|
|
_init_with_defaults
|
|
# Unset `smtpd_discard_ehlo_keywords` to allow DSNs by default on any `smtpd` service:
|
|
cp "${TEST_TMP_CONFIG}/dsn/postfix-main.cf" "${TEST_TMP_CONFIG}/postfix-main.cf"
|
|
_common_container_setup 'CUSTOM_SETUP_ARGUMENTS'
|
|
_wait_for_service postfix
|
|
_wait_for_smtp_port_in_container
|
|
|
|
export CONTAINER_NAME=${CONTAINER2_NAME}
|
|
_init_with_defaults
|
|
_common_container_setup 'CUSTOM_SETUP_ARGUMENTS'
|
|
_wait_for_service postfix
|
|
_wait_for_smtp_port_in_container
|
|
|
|
export CONTAINER_NAME=${CONTAINER3_NAME}
|
|
_init_with_defaults
|
|
# Mirror default main.cf (disable DSN on ports 465 + 587 too):
|
|
cp "${TEST_TMP_CONFIG}/dsn/postfix-master.cf" "${TEST_TMP_CONFIG}/postfix-master.cf"
|
|
_common_container_setup 'CUSTOM_SETUP_ARGUMENTS'
|
|
_wait_for_service postfix
|
|
_wait_for_smtp_port_in_container
|
|
}
|
|
|
|
function teardown_file() {
|
|
docker rm -f "${CONTAINER1_NAME}" "${CONTAINER2_NAME}" "${CONTAINER3_NAME}"
|
|
}
|
|
|
|
@test "should always send a DSN when requested" {
|
|
export CONTAINER_NAME=${CONTAINER1_NAME}
|
|
|
|
# TODO replace with _send_email as soon as it supports DSN
|
|
# TODO ref: https://github.com/jetmore/swaks/issues/41
|
|
_nc_wrapper 'emails/nc_raw/dsn/unauthenticated.txt'
|
|
_nc_wrapper 'emails/nc_raw/dsn/authenticated.txt' '0.0.0.0 465'
|
|
_nc_wrapper 'emails/nc_raw/dsn/authenticated.txt' '0.0.0.0 587'
|
|
_wait_for_empty_mail_queue_in_container
|
|
|
|
_filter_service_log 'mail' "${LOG_DSN}"
|
|
_should_output_number_of_lines 3
|
|
}
|
|
|
|
# Defaults test case
|
|
@test "should only send a DSN when requested from ports 465/587" {
|
|
export CONTAINER_NAME=${CONTAINER2_NAME}
|
|
|
|
_nc_wrapper 'emails/nc_raw/dsn/unauthenticated.txt'
|
|
_wait_for_empty_mail_queue_in_container
|
|
|
|
# DSN requests can now only be made on ports 465 and 587,
|
|
# so grep should not find anything.
|
|
#
|
|
# Although external requests are discarded, anyone who has requested a DSN
|
|
# will still receive it, but it will come from the sending mail server, not this one.
|
|
_service_log_should_not_contain_string 'mail' "${LOG_DSN}"
|
|
|
|
# These ports are excluded via master.cf.
|
|
_nc_wrapper 'emails/nc_raw/dsn/authenticated.txt' '0.0.0.0 465'
|
|
_nc_wrapper 'emails/nc_raw/dsn/authenticated.txt' '0.0.0.0 587'
|
|
_wait_for_empty_mail_queue_in_container
|
|
|
|
_service_log_should_contain_string 'mail' "${LOG_DSN}"
|
|
_should_output_number_of_lines 2
|
|
}
|
|
|
|
@test "should never send a DSN" {
|
|
export CONTAINER_NAME=${CONTAINER3_NAME}
|
|
|
|
_nc_wrapper 'emails/nc_raw/dsn/unauthenticated.txt'
|
|
_nc_wrapper 'emails/nc_raw/dsn/authenticated.txt' '0.0.0.0 465'
|
|
_nc_wrapper 'emails/nc_raw/dsn/authenticated.txt' '0.0.0.0 587'
|
|
_wait_for_empty_mail_queue_in_container
|
|
|
|
# DSN requests are rejected regardless of origin.
|
|
# This is usually a bad idea, as you won't get them either.
|
|
_service_log_should_not_contain_string 'mail' "${LOG_DSN}"
|
|
}
|