github.com/go-email-validator/go-email-validator@v0.0.0-20230409163946-b8b9e6a0552e/pkg/ev/validator_mx_test.go (about) 1 package ev 2 3 import ( 4 "github.com/go-email-validator/go-email-validator/pkg/ev/evmail" 5 "github.com/go-email-validator/go-email-validator/pkg/ev/evsmtp" 6 "github.com/go-email-validator/go-email-validator/pkg/ev/utils" 7 mockevmail "github.com/go-email-validator/go-email-validator/test/mock/ev/evmail" 8 "github.com/stretchr/testify/require" 9 "net" 10 "reflect" 11 "testing" 12 ) 13 14 func mockLookupMX(t *testing.T, domainExpected string, ret evsmtp.MXs, err error) evsmtp.FuncLookupMX { 15 return func(domain string) ([]*net.MX, error) { 16 require.Equal(t, domainExpected, domain) 17 18 return ret, err 19 } 20 } 21 22 func Test_mxValidator_Validate(t *testing.T) { 23 type fields struct { 24 lookupMX evsmtp.FuncLookupMX 25 } 26 type args struct { 27 email evmail.Address 28 } 29 30 mxs := evsmtp.MXs{&net.MX{}} 31 32 tests := []struct { 33 name string 34 fields fields 35 args args 36 want ValidationResult 37 }{ 38 { 39 name: "existed domain", 40 fields: fields{ 41 lookupMX: mockLookupMX(t, validEmail.Domain(), mxs, nil), 42 }, 43 args: args{ 44 email: validEmail, 45 }, 46 want: NewMXValidationResult( 47 mxs, 48 NewResult(true, nil, nil, MXValidatorName).(*AValidationResult), 49 ), 50 }, 51 { 52 name: "empty mx list", 53 fields: fields{ 54 lookupMX: mockLookupMX(t, validEmail.Domain(), nil, nil), 55 }, 56 args: args{ 57 email: validEmail, 58 }, 59 want: NewMXValidationResult( 60 nil, 61 NewResult(false, utils.Errs(EmptyMXsError{}), nil, MXValidatorName).(*AValidationResult), 62 ), 63 }, 64 { 65 name: "unexisted domain", 66 fields: fields{ 67 lookupMX: mockLookupMX(t, validEmail.Domain(), nil, errorSimple), 68 }, 69 args: args{ 70 email: validEmail, 71 }, 72 want: NewMXValidationResult( 73 nil, 74 NewResult(false, utils.Errs(errorSimple), nil, MXValidatorName).(*AValidationResult), 75 ), 76 }, 77 { 78 name: "unexisted domain with mxs", 79 fields: fields{ 80 lookupMX: mockLookupMX(t, validEmail.Domain(), mxs, errorSimple), 81 }, 82 args: args{ 83 email: validEmail, 84 }, 85 want: NewMXValidationResult( 86 mxs, 87 NewResult(false, utils.Errs(errorSimple), nil, MXValidatorName).(*AValidationResult), 88 ), 89 }, 90 } 91 for _, tt := range tests { 92 t.Run(tt.name, func(t *testing.T) { 93 v := NewMXValidator(tt.fields.lookupMX) 94 if got := v.Validate(NewInput(tt.args.email)); !reflect.DeepEqual(got, tt.want) { 95 t.Errorf("Validate() = %v, want %v", got, tt.want) 96 } 97 }) 98 } 99 } 100 101 func BenchmarkSMTPValidator_Validate_MX(b *testing.B) { 102 email := evmail.FromString(mockevmail.ValidEmailString) 103 104 depValidator := NewDepValidator( 105 map[ValidatorName]Validator{ 106 SyntaxValidatorName: DefaultNewMXValidator(), 107 MXValidatorName: NewSyntaxValidator(), 108 }, 109 ) 110 111 b.ResetTimer() 112 for i := 0; i < b.N; i++ { 113 depValidator.Validate(NewInput(email)) 114 } 115 }