mirror of
https://github.com/chylex/SMTP-Relay.git
synced 2024-12-04 05:42:47 +01:00
90 lines
1.8 KiB
Go
90 lines
1.8 KiB
Go
package main
|
|
|
|
import (
|
|
"testing"
|
|
)
|
|
|
|
func stringsEqual(a, b []string) bool {
|
|
if len(a) != len(b) {
|
|
return false
|
|
}
|
|
for i := range a {
|
|
if a[i] != b[i] {
|
|
return false
|
|
}
|
|
}
|
|
return true
|
|
}
|
|
|
|
func TestParseLine(t *testing.T) {
|
|
var tests = []struct {
|
|
name string
|
|
expectFail bool
|
|
line string
|
|
username string
|
|
addrs []string
|
|
}{
|
|
{
|
|
name: "Empty line",
|
|
expectFail: true,
|
|
line: "",
|
|
},
|
|
{
|
|
name: "Too few fields",
|
|
expectFail: true,
|
|
line: "joe",
|
|
},
|
|
{
|
|
name: "Too many fields",
|
|
expectFail: true,
|
|
line: "joe xxx joe@example.com whatsthis",
|
|
},
|
|
{
|
|
name: "Normal case",
|
|
line: "joe xxx joe@example.com",
|
|
username: "joe",
|
|
addrs: []string{"joe@example.com"},
|
|
},
|
|
{
|
|
name: "No allowed addrs given",
|
|
line: "joe xxx",
|
|
username: "joe",
|
|
addrs: []string{},
|
|
},
|
|
{
|
|
name: "Trailing comma",
|
|
line: "joe xxx joe@example.com,",
|
|
username: "joe",
|
|
addrs: []string{"joe@example.com"},
|
|
},
|
|
{
|
|
name: "Multiple allowed addrs",
|
|
line: "joe xxx joe@example.com,@foo.example.com",
|
|
username: "joe",
|
|
addrs: []string{"joe@example.com", "@foo.example.com"},
|
|
},
|
|
}
|
|
|
|
for i, test := range tests {
|
|
t.Run(test.name, func(t *testing.T) {
|
|
user := parseLine(test.line)
|
|
if user == nil {
|
|
if !test.expectFail {
|
|
t.Errorf("parseLine() returned nil unexpectedly")
|
|
}
|
|
return
|
|
}
|
|
|
|
if user.username != test.username {
|
|
t.Errorf("Testcase %d: Incorrect username: expected %v, got %v",
|
|
i, test.username, user.username)
|
|
}
|
|
|
|
if !stringsEqual(user.allowedAddresses, test.addrs) {
|
|
t.Errorf("Testcase %d: Incorrect addresses: expected %v, got %v",
|
|
i, test.addrs, user.allowedAddresses)
|
|
}
|
|
})
|
|
}
|
|
}
|