mirror of
https://blitiri.com.ar/repos/chasquid
synced 2025-12-17 14:37:02 +00:00
test: Integration test for reload
This patch implements an integration test for reloading; in particular it exercises reloading aliases and user databases.
This commit is contained in:
@@ -3,6 +3,7 @@ package smtpsrv
|
||||
|
||||
import (
|
||||
"crypto/tls"
|
||||
"flag"
|
||||
"net"
|
||||
"net/http"
|
||||
"net/textproto"
|
||||
@@ -19,6 +20,14 @@ import (
|
||||
"blitiri.com.ar/go/log"
|
||||
)
|
||||
|
||||
var (
|
||||
// Reload frequency.
|
||||
// We should consider making this a proper option if there's interest in
|
||||
// changing it, but until then, it's a test-only flag for simplicity.
|
||||
reloadEvery = flag.Duration("testing__reload_every", 30*time.Second,
|
||||
"how often to reload, ONLY FOR TESTING")
|
||||
)
|
||||
|
||||
type Server struct {
|
||||
// Main hostname, used for display only.
|
||||
Hostname string
|
||||
@@ -145,7 +154,7 @@ func (s *Server) InitQueue(path string, localC, remoteC courier.Courier) {
|
||||
// PeriodicallyReload some of the server's information, such as aliases and
|
||||
// the user databases.
|
||||
func (s *Server) periodicallyReload() {
|
||||
for range time.Tick(30 * time.Second) {
|
||||
for range time.Tick(*reloadEvery) {
|
||||
err := s.aliasesR.Reload()
|
||||
if err != nil {
|
||||
log.Errorf("Error reloading aliases: %v", err)
|
||||
|
||||
1
test/t-13-reload/.gitignore
vendored
Normal file
1
test/t-13-reload/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
config/domains/testserver/aliases
|
||||
9
test/t-13-reload/config/chasquid.conf
Normal file
9
test/t-13-reload/config/chasquid.conf
Normal file
@@ -0,0 +1,9 @@
|
||||
smtp_address: ":1025"
|
||||
submission_address: ":1587"
|
||||
monitoring_address: ":1099"
|
||||
|
||||
mail_delivery_agent_bin: "test-mda"
|
||||
mail_delivery_agent_args: "%to%"
|
||||
|
||||
data_dir: "../.data"
|
||||
mail_log_path: "../.logs/mail_log"
|
||||
4
test/t-13-reload/content
Normal file
4
test/t-13-reload/content
Normal file
@@ -0,0 +1,4 @@
|
||||
Subject: Prueba desde el test
|
||||
|
||||
Crece desde el test el futuro
|
||||
Crece desde el test
|
||||
1
test/t-13-reload/hosts
Normal file
1
test/t-13-reload/hosts
Normal file
@@ -0,0 +1 @@
|
||||
testserver localhost
|
||||
14
test/t-13-reload/msmtprc
Normal file
14
test/t-13-reload/msmtprc
Normal file
@@ -0,0 +1,14 @@
|
||||
account default
|
||||
|
||||
host testserver
|
||||
port 1587
|
||||
|
||||
tls on
|
||||
tls_trust_file config/certs/testserver/fullchain.pem
|
||||
|
||||
from someone@testserver
|
||||
|
||||
auth on
|
||||
user someone@testserver
|
||||
password password222
|
||||
|
||||
33
test/t-13-reload/run.sh
Executable file
33
test/t-13-reload/run.sh
Executable file
@@ -0,0 +1,33 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
. $(dirname ${0})/../util/lib.sh
|
||||
|
||||
init
|
||||
|
||||
generate_certs_for testserver
|
||||
|
||||
# Start with the user with the wrong password, and no aliases.
|
||||
add_user someone@testserver password111
|
||||
rm -f config/domains/testserver/aliases
|
||||
|
||||
mkdir -p .logs
|
||||
chasquid -v=2 --logfile=.logs/chasquid.log --config_dir=config \
|
||||
--testing__reload_every=50ms &
|
||||
wait_until_ready 1025
|
||||
|
||||
# First, check that delivery fails with the "wrong" password.
|
||||
if run_msmtp someone@testserver < content 2>/dev/null; then
|
||||
fail "success using the wrong password"
|
||||
fi
|
||||
|
||||
# Change password, add an alias; then wait a bit more than the reload period
|
||||
# and try again.
|
||||
add_user someone@testserver password222
|
||||
echo "analias: someone" > config/domains/testserver/aliases
|
||||
sleep 0.2
|
||||
|
||||
run_msmtp analias@testserver < content
|
||||
wait_for_file .mail/someone@testserver
|
||||
|
||||
success
|
||||
Reference in New Issue
Block a user