mirror of
https://blitiri.com.ar/repos/chasquid
synced 2025-12-18 14:47:03 +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 (
|
import (
|
||||||
"crypto/tls"
|
"crypto/tls"
|
||||||
|
"flag"
|
||||||
"net"
|
"net"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/textproto"
|
"net/textproto"
|
||||||
@@ -19,6 +20,14 @@ import (
|
|||||||
"blitiri.com.ar/go/log"
|
"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 {
|
type Server struct {
|
||||||
// Main hostname, used for display only.
|
// Main hostname, used for display only.
|
||||||
Hostname string
|
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
|
// PeriodicallyReload some of the server's information, such as aliases and
|
||||||
// the user databases.
|
// the user databases.
|
||||||
func (s *Server) periodicallyReload() {
|
func (s *Server) periodicallyReload() {
|
||||||
for range time.Tick(30 * time.Second) {
|
for range time.Tick(*reloadEvery) {
|
||||||
err := s.aliasesR.Reload()
|
err := s.aliasesR.Reload()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Errorf("Error reloading aliases: %v", err)
|
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