1
0
mirror of https://blitiri.com.ar/repos/chasquid synced 2025-12-17 14:37:02 +00:00
Files
go-chasquid-smtp/internal/config/config_test.go
Alberto Bertogli 941eb9315c Distinguish between SMTP and submission ports
We want to be able to distinguish between connections for SMTP and connections
for submission, so we can make different policy decisions.

To do that, we first make the configuration aware of the different kinds of
addresses. This is done in this patch in a backwards-incompatible way, but at
this point in time it is ok to do so.

Then, we extend systemd's socket passing library to support socket naming, so
we can tell the different sockets apart. This is done via the
LISTEN_FDNAMES/FileDescriptorName mechanism.

And finally we make the server and connection types aware of the socket mode.
2016-10-10 00:50:24 +01:00

109 lines
2.4 KiB
Go

package config
import (
"io/ioutil"
"os"
"testing"
)
func mustCreateConfig(t *testing.T, contents string) (string, string) {
tmpDir, err := ioutil.TempDir("", "chasquid_config_test:")
if err != nil {
t.Fatalf("Failed to create temp dir: %v\n", tmpDir)
}
confStr := []byte(contents)
err = ioutil.WriteFile(tmpDir+"/chasquid.conf", confStr, 0600)
if err != nil {
t.Fatalf("Failed to write tmp config: %v", err)
}
return tmpDir, tmpDir + "/chasquid.conf"
}
func TestEmptyConfig(t *testing.T) {
tmpDir, path := mustCreateConfig(t, "")
defer os.RemoveAll(tmpDir)
c, err := Load(path)
if err != nil {
t.Fatalf("error loading empty config: %v", err)
}
// Test the default values are set.
hostname, _ := os.Hostname()
if c.Hostname == "" || c.Hostname != hostname {
t.Errorf("invalid hostname %q, should be: %q", c.Hostname, hostname)
}
if c.MaxDataSizeMb != 50 {
t.Errorf("max data size != 50: %d", c.MaxDataSizeMb)
}
if len(c.SmtpAddress) != 1 || c.SmtpAddress[0] != "systemd" {
t.Errorf("unexpected address default: %v", c.SmtpAddress)
}
if len(c.SubmissionAddress) != 1 || c.SubmissionAddress[0] != "systemd" {
t.Errorf("unexpected address default: %v", c.SubmissionAddress)
}
if c.MonitoringAddress != "" {
t.Errorf("monitoring address is set: %v", c.MonitoringAddress)
}
}
func TestFullConfig(t *testing.T) {
confStr := `
hostname: "joust"
smtp_address: ":1234"
smtp_address: ":5678"
monitoring_address: ":1111"
max_data_size_mb: 26
`
tmpDir, path := mustCreateConfig(t, confStr)
defer os.RemoveAll(tmpDir)
c, err := Load(path)
if err != nil {
t.Fatalf("error loading non-existent config: %v", err)
}
if c.Hostname != "joust" {
t.Errorf("hostname %q != 'joust'", c.Hostname)
}
if c.MaxDataSizeMb != 26 {
t.Errorf("max data size != 26: %d", c.MaxDataSizeMb)
}
if len(c.SmtpAddress) != 2 ||
c.SmtpAddress[0] != ":1234" || c.SmtpAddress[1] != ":5678" {
t.Errorf("different address: %v", c.SmtpAddress)
}
if c.MonitoringAddress != ":1111" {
t.Errorf("monitoring address %q != ':1111;", c.MonitoringAddress)
}
}
func TestErrorLoading(t *testing.T) {
c, err := Load("/does/not/exist")
if err == nil {
t.Fatalf("loaded a non-existent config: %v", c)
}
}
func TestBrokenConfig(t *testing.T) {
tmpDir, path := mustCreateConfig(
t, "<invalid> this is not a valid protobuf")
defer os.RemoveAll(tmpDir)
c, err := Load(path)
if err == nil {
t.Fatalf("loaded an invalid config: %v", c)
}
}