Files
kumomta/crates/integration-tests/source-health-broken-proxy.lua
Wez Furlong 002d6593f0 new: suspend_when_unplumbed and suspend_when_proxy_unhealthy source options
Egress sources can now be configured to auto-suspend when their local
bind address appears unplumbed or when their configured proxy server
appears unreachable.  A suspended source is skipped during pool selection
until the configured duration elapses.
2026-06-23 09:22:27 +01:00

79 lines
2.0 KiB
Lua

-- ha_proxy_server points at an unreachable address and the source has
-- an Immediate `suspend_when_proxy_unhealthy` rule. A single failed
-- proxy connect should auto-suspend the source.
local kumo = require 'kumo'
package.path = '../../assets/?.lua;' .. package.path
local TEST_DIR = os.getenv 'KUMOD_TEST_DIR'
local SINK_PORT = tonumber(os.getenv 'KUMOD_SMTP_SINK_PORT')
kumo.on('init', function()
kumo.configure_accounting_db_path(TEST_DIR .. '/accounting.db')
kumo.start_esmtp_listener {
listen = '127.0.0.1:0',
relay_hosts = { '0.0.0.0/0' },
deferred_queue = false,
}
kumo.start_http_listener {
listen = '127.0.0.1:0',
}
kumo.configure_local_logs {
log_dir = TEST_DIR .. '/logs',
max_segment_duration = '1s',
}
kumo.define_spool {
name = 'data',
path = TEST_DIR .. '/data-spool',
}
kumo.define_spool {
name = 'meta',
path = TEST_DIR .. '/meta-spool',
}
end)
kumo.on('get_listener_domain', function(domain, listener, conn_meta)
return kumo.make_listener_domain { relay_to = true }
end)
kumo.on('get_queue_config', function(domain, tenant, campaign, routing_domain)
return kumo.make_queue_config {
protocol = {
smtp = {
mx_list = { '127.0.0.1:' .. SINK_PORT },
},
},
egress_pool = 'default',
}
end)
kumo.on('get_egress_pool', function(pool_name)
return kumo.make_egress_pool {
name = pool_name,
entries = { { name = 'default' } },
}
end)
kumo.on('get_egress_source', function(source_name)
return kumo.make_egress_source {
name = source_name,
ha_proxy_source_address = '127.0.0.1',
ha_proxy_server = '255.255.255.255:1',
suspend_when_proxy_unhealthy = {
duration = '30s',
},
}
end)
kumo.on('get_egress_path_config', function(domain, source_name, _site_name)
return kumo.make_egress_path {
enable_tls = 'OpportunisticInsecure',
prohibited_hosts = {},
ip_lookup_strategy = 'Ipv4Only',
opportunistic_tls_reconnect_on_failed_handshake = false,
}
end)