We don't expect the AddHeader function to be given an empty key; however, if that were to happen, it currently crashes. This patch fixes the bug, while also adding tests for that and other similar cases.
70 lines
1.6 KiB
Go
70 lines
1.6 KiB
Go
package envelope
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"blitiri.com.ar/go/chasquid/internal/set"
|
|
)
|
|
|
|
func TestSplit(t *testing.T) {
|
|
cases := []struct {
|
|
addr, user, domain string
|
|
}{
|
|
{"lalala@lelele", "lalala", "lelele"},
|
|
}
|
|
|
|
for _, c := range cases {
|
|
if user := UserOf(c.addr); user != c.user {
|
|
t.Errorf("%q: expected user %q, got %q", c.addr, c.user, user)
|
|
}
|
|
if domain := DomainOf(c.addr); domain != c.domain {
|
|
t.Errorf("%q: expected domain %q, got %q",
|
|
c.addr, c.domain, domain)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestDomainIn(t *testing.T) {
|
|
ls := set.NewString("domain1", "domain2")
|
|
cases := []struct {
|
|
addr string
|
|
in bool
|
|
}{
|
|
{"u@domain1", true},
|
|
{"u@domain2", true},
|
|
{"u@domain3", false},
|
|
{"u", true},
|
|
}
|
|
for _, c := range cases {
|
|
if in := DomainIn(c.addr, ls); in != c.in {
|
|
t.Errorf("%q: expected %v, got %v", c.addr, c.in, in)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestAddHeader(t *testing.T) {
|
|
cases := []struct {
|
|
data, k, v, expected string
|
|
}{
|
|
{"", "Key", "Value", "Key: Value\n"},
|
|
{"data", "Key", "Value", "Key: Value\ndata"},
|
|
{"data", "Key", "Value\n", "Key: Value\ndata"},
|
|
{"data", "Key", "L1\nL2", "Key: L1\n\tL2\ndata"},
|
|
{"data", "Key", "L1\nL2\n", "Key: L1\n\tL2\ndata"},
|
|
|
|
// Degenerate cases: we don't expect to ever produce these, and the
|
|
// output is admittedly not nice, but they should at least not cause
|
|
// chasquid to crash.
|
|
{"data", "Key", "", "Key: \ndata"},
|
|
{"data", "", "", ": \ndata"},
|
|
{"", "", "", ": \n"},
|
|
}
|
|
for i, c := range cases {
|
|
got := string(AddHeader([]byte(c.data), c.k, c.v))
|
|
if got != c.expected {
|
|
t.Errorf("%d (%q -> %q): expected %q, got %q",
|
|
i, c.k, c.v, c.expected, got)
|
|
}
|
|
}
|
|
}
|