This repository has been archived by the owner on Apr 15, 2019. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathheader_test.go
104 lines (93 loc) · 2.26 KB
/
header_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
package dkim
import (
"bufio"
"reflect"
"strings"
"testing"
)
var headerTests = []struct {
h header
s string
}{
{
h: header{"From: <[email protected]>\r\n"},
s: "From: <[email protected]>\r\n\r\n",
},
{
h: header{
"From: <[email protected]>\r\n",
"Subject: Your Name\r\n",
},
s: "From: <[email protected]>\r\n" +
"Subject: Your Name\r\n" +
"\r\n",
},
}
func TestReadHeader(t *testing.T) {
for _, test := range headerTests {
r := strings.NewReader(test.s)
h, err := readHeader(bufio.NewReader(r))
if err != nil {
t.Fatalf("Expected no error while reading error, got: %v", err)
}
if !reflect.DeepEqual(h, test.h) {
t.Errorf("Expected header to be \n%v\n but got \n%v", test.h, h)
}
}
}
func TestReadHeader_incomplete(t *testing.T) {
r := strings.NewReader("From: <[email protected]>\r\nTo")
_, err := readHeader(bufio.NewReader(r))
if err == nil {
t.Error("Expected an error while reading incomplete header")
}
}
func TestFormatHeaderParams(t *testing.T) {
params := map[string]string{
"v": "1",
"a": "rsa-sha256",
"d": "example.org",
}
expected := "a=rsa-sha256; d=example.org; v=1;"
s := formatHeaderParams(params)
if s != expected {
t.Errorf("Expected formatted params to be %q, but got %q", expected, s)
}
}
func TestParseHeaderParams_malformed(t *testing.T) {
_, err := parseHeaderParams("abc; def")
if err == nil {
t.Error("Expected an error when parsing malformed header params")
}
}
func TestHeaderPicker_Pick(t *testing.T) {
t.Run("simple", func(t *testing.T) {
predefinedHeaders := []string{"From", "to"}
headers := header{
"from: fst",
"To: snd",
}
picker := newHeaderPicker(headers)
for i, k := range predefinedHeaders {
if headers[i] != picker.Pick(k) {
t.Errorf("Parameter %s not found in headers %s", k, headers)
}
}
})
t.Run("a few same headers", func(t *testing.T) {
predefinedHeaders := []string{"to", "to", "to"}
// same headers must returns from Bottom to Top
headers := header{
"To: trd",
"To: snd",
"To: fst",
}
var lh = len(headers) - 1
picker := newHeaderPicker(headers)
for i, k := range predefinedHeaders {
if headers[lh-i] != picker.Pick(k) {
t.Errorf("Parameter %s not found in headers %s", k, headers)
}
}
})
}