@@ -9,6 +9,7 @@ import (
10type ValidatorTest struct {
10type ValidatorTest struct {
11 auth_email_file *os.File
11 auth_email_file *os.File
14func NewValidatorTest(t *testing.T) *ValidatorTest {
15func NewValidatorTest(t *testing.T) *ValidatorTest {
@@ -18,13 +19,21 @@ func NewValidatorTest(t *testing.T) *ValidatorTest {
18 if err != nil {
19 if err != nil {
19 t.Fatal("failed to create temp file: " + err.Error())
20 t.Fatal("failed to create temp file: " + err.Error())
22+ vt.done = make(chan bool)
24func (vt *ValidatorTest) TearDown() {
26func (vt *ValidatorTest) TearDown() {
25 os.Remove(vt.auth_email_file.Name())
28 os.Remove(vt.auth_email_file.Name())
31+func (vt *ValidatorTest) NewValidator(domains []string,
32+ updated chan<- bool) func(string) bool {
33+ return newValidatorImpl(domains, vt.auth_email_file.Name(),
34+ vt.done, func() { updated <- true })
28// This will close vt.auth_email_file.
37// This will close vt.auth_email_file.
29func (vt *ValidatorTest) WriteEmails(t *testing.T, emails []string) {
38func (vt *ValidatorTest) WriteEmails(t *testing.T, emails []string) {
30 defer vt.auth_email_file.Close()
39 defer vt.auth_email_file.Close()
@@ -41,7 +50,7 @@ func TestValidatorEmpty(t *testing.T) {
42 vt.WriteEmails(t, []string(nil))
51 vt.WriteEmails(t, []string(nil))
43 domains := []string(nil)
52 domains := []string(nil)
44− validator := NewValidator(domains, vt.auth_email_file.Name())
53+ validator := vt.NewValidator(domains, nil)
46 if validator("foo.bar@example.com") {
55 if validator("foo.bar@example.com") {
47 t.Error("nothing should validate when the email and " +
56 t.Error("nothing should validate when the email and " +
@@ -55,7 +64,7 @@ func TestValidatorSingleEmail(t *testing.T) {
56 vt.WriteEmails(t, []string{"foo.bar@example.com"})
65 vt.WriteEmails(t, []string{"foo.bar@example.com"})
57 domains := []string(nil)
66 domains := []string(nil)
58− validator := NewValidator(domains, vt.auth_email_file.Name())
67+ validator := vt.NewValidator(domains, nil)
60 if !validator("foo.bar@example.com") {
69 if !validator("foo.bar@example.com") {
61 t.Error("email should validate")
70 t.Error("email should validate")
@@ -72,7 +81,7 @@ func TestValidatorSingleDomain(t *testing.T) {
73 vt.WriteEmails(t, []string(nil))
82 vt.WriteEmails(t, []string(nil))
74 domains := []string{"example.com"}
83 domains := []string{"example.com"}
75− validator := NewValidator(domains, vt.auth_email_file.Name())
84+ validator := vt.NewValidator(domains, nil)
77 if !validator("foo.bar@example.com") {
86 if !validator("foo.bar@example.com") {
78 t.Error("email should validate")
87 t.Error("email should validate")
@@ -91,7 +100,7 @@ func TestValidatorMultipleEmailsMultipleDomains(t *testing.T) {
91 "plugh@example.com",
100 "plugh@example.com",
93 domains := []string{"example0.com", "example1.com"}
102 domains := []string{"example0.com", "example1.com"}
94− validator := NewValidator(domains, vt.auth_email_file.Name())
103+ validator := vt.NewValidator(domains, nil)
96 if !validator("foo.bar@example0.com") {
105 if !validator("foo.bar@example0.com") {
97 t.Error("email from first domain should validate")
106 t.Error("email from first domain should validate")
@@ -117,7 +126,7 @@ func TestValidatorComparisonsAreCaseInsensitive(t *testing.T) {
118 vt.WriteEmails(t, []string{"Foo.Bar@Example.Com"})
127 vt.WriteEmails(t, []string{"Foo.Bar@Example.Com"})
119 domains := []string{"Frobozz.Com"}
128 domains := []string{"Frobozz.Com"}
120− validator := NewValidator(domains, vt.auth_email_file.Name())
129+ validator := vt.NewValidator(domains, nil)
122 if !validator("foo.bar@example.com") {
131 if !validator("foo.bar@example.com") {
123 t.Error("loaded email addresses are not lower-cased")
132 t.Error("loaded email addresses are not lower-cased")