mirror of
https://github.com/emersion/go-msgauth
synced 2026-07-03 15:28:34 +00:00
171 lines
3.2 KiB
Go
171 lines
3.2 KiB
Go
package dkim
|
|
|
|
import (
|
|
"bytes"
|
|
"testing"
|
|
)
|
|
|
|
var simpleCanonicalizerBodyTests = []struct {
|
|
original []string
|
|
canonical string
|
|
}{
|
|
{
|
|
[]string{""},
|
|
"\r\n",
|
|
},
|
|
{
|
|
[]string{"\r\n"},
|
|
"\r\n",
|
|
},
|
|
{
|
|
[]string{"\r\n\r\n\r\n"},
|
|
"\r\n",
|
|
},
|
|
{
|
|
[]string{"Hey\r\n\r\n"},
|
|
"Hey\r\n",
|
|
},
|
|
{
|
|
[]string{"Hey\r\nHow r u?\r\n\r\n\r\n"},
|
|
"Hey\r\nHow r u?\r\n",
|
|
},
|
|
{
|
|
[]string{"Hey\r\n\r\nHow r u?"},
|
|
"Hey\r\n\r\nHow r u?\r\n",
|
|
},
|
|
{
|
|
[]string{"What about\nLF endings?\n\n"},
|
|
"What about\r\nLF endings?\r\n",
|
|
},
|
|
{
|
|
[]string{"\r\n", "\r", "\n"},
|
|
"\r\n",
|
|
},
|
|
{
|
|
[]string{"\r\n", "\r"},
|
|
"\r\n\r\r\n",
|
|
},
|
|
{
|
|
[]string{"\r\n", "\r", "\n", "hey\n", "\n"},
|
|
"\r\n\r\nhey\r\n",
|
|
},
|
|
}
|
|
|
|
func TestSimpleCanonicalizer_CanonicalBody(t *testing.T) {
|
|
c := new(simpleCanonicalizer)
|
|
|
|
var b bytes.Buffer
|
|
for _, test := range simpleCanonicalizerBodyTests {
|
|
b.Reset()
|
|
|
|
wc := c.CanonicalizeBody(&b)
|
|
for _, chunk := range test.original {
|
|
if _, err := wc.Write([]byte(chunk)); err != nil {
|
|
t.Fatalf("Expected no error while writing to simple body canonicalizer, got: %v", err)
|
|
}
|
|
}
|
|
|
|
if err := wc.Close(); err != nil {
|
|
t.Errorf("Expected no error while closing simple body canonicalizer, got: %v", err)
|
|
} else if s := b.String(); s != test.canonical {
|
|
t.Errorf("Expected canonical body for %q to be %q, but got %q", test.original, test.canonical, s)
|
|
}
|
|
}
|
|
}
|
|
|
|
var relaxedCanonicalizerHeaderTests = []struct {
|
|
original string
|
|
canonical string
|
|
}{
|
|
{
|
|
"SubjeCT: Your Name\r\n",
|
|
"subject:Your Name\r\n",
|
|
},
|
|
{
|
|
"Subject \t:\t Your Name\t \r\n",
|
|
"subject:Your Name\r\n",
|
|
},
|
|
{
|
|
"Subject \t:\t Kimi \t \r\n No \t\r\n Na Wa\r\n",
|
|
"subject:Kimi No Na Wa\r\n",
|
|
},
|
|
{
|
|
"Subject \t:\t Ki \tmi \t \r\n No \t\r\n Na Wa\r\n",
|
|
"subject:Ki mi No Na Wa\r\n",
|
|
},
|
|
}
|
|
|
|
func TestRelaxedCanonicalizer_CanonicalizeHeader(t *testing.T) {
|
|
c := new(relaxedCanonicalizer)
|
|
|
|
for _, test := range relaxedCanonicalizerHeaderTests {
|
|
if s := c.CanonicalizeHeader(test.original); s != test.canonical {
|
|
t.Errorf("Expected relaxed canonical header to be %q but got %q", test.canonical, s)
|
|
}
|
|
}
|
|
}
|
|
|
|
var relaxedCanonicalizerBodyTests = []struct {
|
|
original string
|
|
canonical string
|
|
}{
|
|
{
|
|
"",
|
|
"",
|
|
},
|
|
{
|
|
"\r\n",
|
|
"",
|
|
},
|
|
{
|
|
"\r\n\r\n\r\n",
|
|
"",
|
|
},
|
|
{
|
|
"Hey\r\n\r\n",
|
|
"Hey\r\n",
|
|
},
|
|
{
|
|
"Hey\r\nHow r u?\r\n\r\n\r\n",
|
|
"Hey\r\nHow r u?\r\n",
|
|
},
|
|
{
|
|
"Hey\r\n\r\nHow r u?",
|
|
"Hey\r\n\r\nHow r u?\r\n",
|
|
},
|
|
{
|
|
"Hey \t you!",
|
|
"Hey you!\r\n",
|
|
},
|
|
{
|
|
"Hey \t \r\nyou!",
|
|
"Hey\r\nyou!\r\n",
|
|
},
|
|
{
|
|
"Hey\r\n \t you!\r\n",
|
|
"Hey\r\n you!\r\n",
|
|
},
|
|
{
|
|
"Hey\r\n \t \r\n \r\n",
|
|
"Hey\r\n",
|
|
},
|
|
}
|
|
|
|
func TestRelaxedCanonicalizer_CanonicalBody(t *testing.T) {
|
|
c := new(relaxedCanonicalizer)
|
|
|
|
var b bytes.Buffer
|
|
for _, test := range relaxedCanonicalizerBodyTests {
|
|
b.Reset()
|
|
|
|
wc := c.CanonicalizeBody(&b)
|
|
if _, err := wc.Write([]byte(test.original)); err != nil {
|
|
t.Errorf("Expected no error while writing to simple body canonicalizer, got: %v", err)
|
|
} else if err := wc.Close(); err != nil {
|
|
t.Errorf("Expected no error while closing simple body canonicalizer, got: %v", err)
|
|
} else if s := b.String(); s != test.canonical {
|
|
t.Errorf("Expected canonical body for %q to be %q, but got %q", test.original, test.canonical, s)
|
|
}
|
|
}
|
|
}
|