/
smtp_check_test.go
119 lines (108 loc) · 2.77 KB
/
smtp_check_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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
package mailvalidation_test
import (
"errors"
"net"
"testing"
"time"
"github.com/pcasaretto/mailvalidation"
)
func TestValidate(t *testing.T) {
goodConnection := func(network, address string, timeout time.Duration) (net.Conn, error) {
conn, _ := net.Pipe()
return conn, nil
}
badConnection := func(network, address string, timeout time.Duration) (net.Conn, error) {
return nil, errors.New("error")
}
tests := []struct {
Description string
LookupMX func(host string) ([]*net.MX, error)
LookupIP func(host string) ([]net.IP, error)
DialTimeout func(network, address string, timeout time.Duration) (net.Conn, error)
Expected bool
}{
{
"All nils",
func(host string) (mxs []*net.MX, err error) {
return nil, nil
},
func(host string) (ips []net.IP, err error) {
return nil, nil
},
goodConnection,
false,
},
{
"MX ok",
func(host string) (mxs []*net.MX, err error) {
return []*net.MX{&net.MX{}}, nil
},
func(host string) (ips []net.IP, err error) {
return nil, nil
},
goodConnection,
true,
},
{
"MX ok, bad connection",
func(host string) (mxs []*net.MX, err error) {
return []*net.MX{&net.MX{}, &net.MX{}}, nil
},
func(host string) (ips []net.IP, err error) {
return nil, nil
},
badConnection,
false,
},
{
"MX error and IP ok",
func(host string) (mxs []*net.MX, err error) {
return nil, errors.New("error")
},
func(host string) (ips []net.IP, err error) {
return []net.IP{net.IP{}, net.IP{}}, nil
},
goodConnection,
true,
},
{
"MX error and IP ok, bad connection",
func(host string) (mxs []*net.MX, err error) {
return nil, errors.New("error")
},
func(host string) (ips []net.IP, err error) {
return []net.IP{net.IP{}}, nil
},
badConnection,
false,
},
}
for i, test := range tests {
mailvalidation.LookupMX = test.LookupMX
mailvalidation.LookupIP = test.LookupIP
mailvalidation.DialTimeout = test.DialTimeout
validator := mailvalidation.NewSMTPCheck()
valid := validator.Validate("pcasaretto@gmail.com")
if valid != test.Expected {
t.Errorf("test %d:\n\rgot %t\n\rwant %t", i, valid, test.Expected)
}
}
}
func TestValidateTimeout(t *testing.T) {
mailvalidation.LookupMX = func(host string) (mxs []*net.MX, err error) {
return []*net.MX{&net.MX{}}, nil
}
mailvalidation.LookupIP = func(host string) (ips []net.IP, err error) {
return nil, nil
}
mailvalidation.DialTimeout = func(network, address string, timeout time.Duration) (net.Conn, error) {
time.Sleep(100 * time.Nanosecond)
return nil, nil
}
validator := mailvalidation.NewSMTPCheck()
validator.Timeout = time.Nanosecond
valid := validator.Validate("pcasaretto@gmail.com")
if valid {
t.Errorf("got %t\n\rwant %t", valid, false)
}
}