1
0
Fork 0
mirror of https://git.sr.ht/~rjarry/aerc synced 2025-07-06 19:30:22 +02:00
aerc/lib/autoconfig/get_test.go
Moritz Poldrack e7e0421015 autoconf: add MX record checking
Add a direct mailserver poker that tries to connect to the mailserver
with the highest priority retrieved from via DNS.

Signed-off-by: Moritz Poldrack <git@moritz.sh>
Acked-by: Robin Jarry <robin@jarry.cc>
2025-02-14 13:50:27 +01:00

185 lines
3.9 KiB
Go

package autoconfig
import (
"context"
"net"
"net/http"
"testing"
"time"
"github.com/stretchr/testify/assert"
)
func TestConfigRetrieval(t *testing.T) {
tests := []struct {
address string
correctConfig *Config
}{
{
address: "mailbox.org",
correctConfig: &Config{
Found: ProtocolIMAP,
IMAP: Credentials{
Encryption: EncryptionTLS,
Address: "imap.mailbox.org",
Port: 993,
Username: "john@mailbox.org",
},
SMTP: Credentials{
Encryption: EncryptionSTARTTLS,
Address: "smtp.mailbox.org",
Port: 587,
Username: "john@mailbox.org",
},
},
},
{
address: "poldi1405.srht.site",
correctConfig: &Config{
Found: ProtocolIMAP,
IMAP: Credentials{
Encryption: EncryptionSTARTTLS,
Address: "mail.example.com",
Port: 143,
Username: "your-username",
},
SMTP: Credentials{
Encryption: EncryptionSTARTTLS,
Address: "mail.example.com",
Port: 587,
Username: "your-username",
},
},
},
{
address: "gmail.com",
correctConfig: &Config{
Found: ProtocolIMAP,
IMAP: Credentials{
Encryption: EncryptionTLS,
Address: "imap.gmail.com",
Port: 993,
Username: "john@gmail.com",
},
SMTP: Credentials{
Encryption: EncryptionSTARTTLS,
Address: "smtp.gmail.com",
Port: 587,
Username: "john@gmail.com",
},
},
},
{
address: "fastmail.com",
correctConfig: &Config{
Found: ProtocolJMAP,
JMAP: Credentials{
Encryption: EncryptionTLS,
Address: "api.fastmail.com",
Port: 443,
Username: "john@fastmail.com",
},
IMAP: Credentials{
Encryption: EncryptionTLS,
Address: "imap.fastmail.com",
Port: 993,
Username: "john@fastmail.com",
},
SMTP: Credentials{
Encryption: EncryptionSTARTTLS,
Address: "smtp.fastmail.com",
Port: 587,
Username: "john@fastmail.com",
},
},
},
{
address: "gmx.de",
correctConfig: &Config{
Found: ProtocolIMAP,
IMAP: Credentials{
Encryption: EncryptionTLS,
Address: "imap.gmx.net",
Port: 993,
Username: "john@gmx.de",
},
SMTP: Credentials{
Encryption: EncryptionSTARTTLS,
Address: "mail.gmx.net",
Port: 587,
Username: "john@gmx.de",
},
},
},
{
address: "moritz.sh",
correctConfig: &Config{
Found: ProtocolIMAP,
IMAP: Credentials{
Encryption: EncryptionSTARTTLS,
Address: "mail.moritz.sh",
Port: 143,
Username: "john@moritz.sh",
},
SMTP: Credentials{
Encryption: EncryptionSTARTTLS,
Address: "mail.moritz.sh",
Port: 587,
Username: "john@moritz.sh",
},
},
},
{
address: "poldrack.dev",
correctConfig: &Config{
Found: ProtocolIMAP,
IMAP: Credentials{
Encryption: EncryptionSTARTTLS,
Address: "mail.moritz.sh",
Port: 143,
Username: "john@poldrack.dev",
},
SMTP: Credentials{
Encryption: EncryptionSTARTTLS,
Address: "mail.moritz.sh",
Port: 587,
Username: "john@poldrack.dev",
},
},
},
{
address: "timeout",
correctConfig: nil,
},
}
lookupSRV = customLookupSRV
httpGet = autoconfigTestGet
mozillaGet = mozillaTestHTTP
netDial = mxTestDialer
lookupMX = mxTestLookup
defer func() {
lookupSRV = net.LookupSRV
httpGet = http.Get
mozillaGet = http.Get
netDial = net.Dial
lookupMX = net.LookupMX
}()
for _, test := range tests {
test := test
t.Run(test.address, func(t *testing.T) {
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Millisecond)
defer cancel()
res := GetConfig(ctx, "john@"+test.address)
if test.correctConfig == nil {
if res != nil {
t.Fatalf("expected no result, but got %v", res)
}
return
}
assert.Equal(t, test.correctConfig, res)
})
}
}