110 lines
3.7 KiB
Go
110 lines
3.7 KiB
Go
package controllers
|
|
|
|
import (
|
|
"encoding/json"
|
|
"testing"
|
|
|
|
"git.pcux.cn/xuans/Smail/config"
|
|
)
|
|
|
|
func TestPublicMailPortsMatchListenersWithoutChangingSnapshot(t *testing.T) {
|
|
for _, custom := range []bool{false, true} {
|
|
runtime := config.RuntimeConfig{
|
|
SMTP: config.SMTPSectionConfig{Relay: config.SMTPConfig{RelayPort: 9999}},
|
|
Email: config.EmailSectionConfig{Policy: config.EmailConfig{SMTPPort: 2525, IMAPPort: 1143, POP3Port: 1110}},
|
|
}
|
|
if custom {
|
|
runtime.SMTP.Listener = config.SMTPListenerConfig{Port: 3025, STARTTLSPort: 3587, TLSPort: 3465}
|
|
runtime.Email.IMAP.TLSPort = 3993
|
|
runtime.Email.POP3 = config.POP3ListenerConfig{Port: 3110, TLSPort: 3995}
|
|
}
|
|
before := runtime.Email
|
|
want := config.ResolveMailPorts(runtime.SMTP, runtime.Email)
|
|
mailPublic, err := publicConfigSection(runtime, config.SectionMail)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
mailData, err := json.Marshal(mailPublic)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
var writableMail map[string]json.RawMessage
|
|
if err := json.Unmarshal(mailData, &writableMail); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
delete(writableMail, "relayPasswordStatus")
|
|
mailData, err = json.Marshal(writableMail)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
var mail config.MailSectionConfig
|
|
if err := config.ParseStrict(mailData, &mail); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if mail.Listener.Port != want.SMTP || mail.Listener.STARTTLSPort != want.SMTPSTARTTLS || mail.Listener.TLSPort != want.SMTPTLS || mail.IMAP.TLSPort != want.IMAP || mail.POP3.Port != want.POP3 || mail.POP3.TLSPort != want.POP3TLS {
|
|
t.Fatal("combined public mail ports differ from listener configuration")
|
|
}
|
|
if mail.Listener.Security != runtime.SMTP.Listener.Security {
|
|
t.Fatal("public mail view changed legacy security state")
|
|
}
|
|
smtpPublic, err := publicConfigSection(runtime, config.SectionSMTP)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
data, err := json.Marshal(smtpPublic)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
var smtp struct {
|
|
Listener config.SMTPListenerConfig `json:"listener"`
|
|
}
|
|
if err := json.Unmarshal(data, &smtp); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
emailPublic, err := publicConfigSection(runtime, config.SectionEmail)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
email := emailPublic.(config.EmailSectionConfig)
|
|
if smtp.Listener.Port != want.SMTP || smtp.Listener.STARTTLSPort != want.SMTPSTARTTLS || smtp.Listener.TLSPort != want.SMTPTLS || email.IMAP.TLSPort != want.IMAP || email.POP3.Port != want.POP3 || email.POP3.TLSPort != want.POP3TLS {
|
|
t.Fatal("public ports differ from listener configuration")
|
|
}
|
|
if before != runtime.Email {
|
|
t.Fatal("public view changed runtime configuration")
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestPublicMailSecurityNormalizesLegacyTLSNames(t *testing.T) {
|
|
runtime := config.RuntimeConfig{
|
|
SMTP: config.SMTPSectionConfig{
|
|
Listener: config.SMTPListenerConfig{Security: "tls"},
|
|
Relay: config.SMTPConfig{Security: "tls"},
|
|
},
|
|
}
|
|
|
|
for _, section := range []config.Section{config.SectionSMTP, config.SectionMail} {
|
|
public, err := publicConfigSection(runtime, section)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
data, err := json.Marshal(public)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
var value struct {
|
|
Listener config.SMTPListenerConfig `json:"listener"`
|
|
Relay config.SMTPConfig `json:"relay"`
|
|
}
|
|
if err := json.Unmarshal(data, &value); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if value.Listener.Security != config.MailSecurityImplicitTLS {
|
|
t.Fatalf("%s listener security = %q, want %q", section, value.Listener.Security, config.MailSecurityImplicitTLS)
|
|
}
|
|
if value.Relay.Security != config.MailSecurityImplicitTLS {
|
|
t.Fatalf("%s relay security = %q, want %q", section, value.Relay.Security, config.MailSecurityImplicitTLS)
|
|
}
|
|
}
|
|
}
|