@@ -9,6 +9,8 @@ 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 {
16func NewValidatorTest(t *testing.T) *ValidatorTest {
@@ -18,13 +20,26 @@ func NewValidatorTest(t *testing.T) *ValidatorTest {
18 if err != nil {
20 if err != nil {
19 t.Fatal("failed to create temp file: " + err.Error())
21 t.Fatal("failed to create temp file: " + err.Error())
23+ vt.done = make(chan bool)
24func (vt *ValidatorTest) TearDown() {
27func (vt *ValidatorTest) TearDown() {
25 os.Remove(vt.auth_email_file.Name())
29 os.Remove(vt.auth_email_file.Name())
32+func (vt *ValidatorTest) NewValidator(domains []string,
33+ updated chan<- bool) func(string) bool {
34+ return newValidatorImpl(domains, vt.auth_email_file.Name(),
36+ if vt.update_seen == false {
38+ vt.update_seen = true
28// This will close vt.auth_email_file.
43// This will close vt.auth_email_file.
29func (vt *ValidatorTest) WriteEmails(t *testing.T, emails []string) {
44func (vt *ValidatorTest) WriteEmails(t *testing.T, emails []string) {
30 defer vt.auth_email_file.Close()
45 defer vt.auth_email_file.Close()
@@ -41,7 +56,7 @@ func TestValidatorEmpty(t *testing.T) {
42 vt.WriteEmails(t, []string(nil))
57 vt.WriteEmails(t, []string(nil))
43 domains := []string(nil)
58 domains := []string(nil)
44− validator := NewValidator(domains, vt.auth_email_file.Name())
59+ validator := vt.NewValidator(domains, nil)
46 if validator("foo.bar@example.com") {
61 if validator("foo.bar@example.com") {
47 t.Error("nothing should validate when the email and " +
62 t.Error("nothing should validate when the email and " +
@@ -55,7 +70,7 @@ func TestValidatorSingleEmail(t *testing.T) {
56 vt.WriteEmails(t, []string{"foo.bar@example.com"})
71 vt.WriteEmails(t, []string{"foo.bar@example.com"})
57 domains := []string(nil)
72 domains := []string(nil)
58− validator := NewValidator(domains, vt.auth_email_file.Name())
73+ validator := vt.NewValidator(domains, nil)
60 if !validator("foo.bar@example.com") {
75 if !validator("foo.bar@example.com") {
61 t.Error("email should validate")
76 t.Error("email should validate")
@@ -72,7 +87,7 @@ func TestValidatorSingleDomain(t *testing.T) {
73 vt.WriteEmails(t, []string(nil))
88 vt.WriteEmails(t, []string(nil))
74 domains := []string{"example.com"}
89 domains := []string{"example.com"}
75− validator := NewValidator(domains, vt.auth_email_file.Name())
90+ validator := vt.NewValidator(domains, nil)
77 if !validator("foo.bar@example.com") {
92 if !validator("foo.bar@example.com") {
78 t.Error("email should validate")
93 t.Error("email should validate")
@@ -91,7 +106,7 @@ func TestValidatorMultipleEmailsMultipleDomains(t *testing.T) {
91 "plugh@example.com",
106 "plugh@example.com",
93 domains := []string{"example0.com", "example1.com"}
108 domains := []string{"example0.com", "example1.com"}
94− validator := NewValidator(domains, vt.auth_email_file.Name())
109+ validator := vt.NewValidator(domains, nil)
96 if !validator("foo.bar@example0.com") {
111 if !validator("foo.bar@example0.com") {
97 t.Error("email from first domain should validate")
112 t.Error("email from first domain should validate")
@@ -117,7 +132,7 @@ func TestValidatorComparisonsAreCaseInsensitive(t *testing.T) {
118 vt.WriteEmails(t, []string{"Foo.Bar@Example.Com"})
133 vt.WriteEmails(t, []string{"Foo.Bar@Example.Com"})
119 domains := []string{"Frobozz.Com"}
134 domains := []string{"Frobozz.Com"}
120− validator := NewValidator(domains, vt.auth_email_file.Name())
135+ validator := vt.NewValidator(domains, nil)
122 if !validator("foo.bar@example.com") {
137 if !validator("foo.bar@example.com") {
123 t.Error("loaded email addresses are not lower-cased")
138 t.Error("loaded email addresses are not lower-cased")