mirror of
https://github.com/mjl-/mox.git
synced 2024-12-26 08:23:48 +03:00
smtpserver tests: use shared function to check expected smtp error codes
This commit is contained in:
parent
f749eb2a05
commit
6e7f15e0e4
2 changed files with 29 additions and 51 deletions
|
@ -36,7 +36,7 @@ test email
|
|||
if err == nil {
|
||||
err = client.Deliver(ctxbg, mailFrom, rcptTo, int64(len(msg)), strings.NewReader(msg), false, false, false)
|
||||
}
|
||||
ts.smtperr(err, nil)
|
||||
ts.smtpErr(err, nil)
|
||||
})
|
||||
|
||||
msg = strings.ReplaceAll(`From: <private@mox.example>
|
||||
|
@ -53,7 +53,7 @@ test email
|
|||
if err == nil {
|
||||
err = client.Deliver(ctxbg, mailFrom, rcptTo, int64(len(msg)), strings.NewReader(msg), false, false, false)
|
||||
}
|
||||
ts.smtperr(err, &smtpclient.Error{Permanent: true, Code: smtp.C550MailboxUnavail, Secode: smtp.SePol7DeliveryUnauth1})
|
||||
ts.smtpErr(err, &smtpclient.Error{Permanent: true, Code: smtp.C550MailboxUnavail, Secode: smtp.SePol7DeliveryUnauth1})
|
||||
})
|
||||
}
|
||||
|
||||
|
@ -88,7 +88,7 @@ test email
|
|||
if err == nil {
|
||||
err = client.Deliver(ctxbg, mailFrom, rcptTo, int64(len(msg)), strings.NewReader(msg), true, true, false)
|
||||
}
|
||||
ts.smtperr(err, &smtpclient.Error{Permanent: true, Code: smtp.C550MailboxUnavail, Secode: smtp.SePol7DeliveryUnauth1})
|
||||
ts.smtpErr(err, &smtpclient.Error{Permanent: true, Code: smtp.C550MailboxUnavail, Secode: smtp.SePol7DeliveryUnauth1})
|
||||
})
|
||||
}
|
||||
|
||||
|
@ -118,7 +118,7 @@ test email
|
|||
if err == nil {
|
||||
err = client.Deliver(ctxbg, mailFrom, rcptTo, int64(len(msg)), strings.NewReader(msg), false, false, false)
|
||||
}
|
||||
ts.smtperr(err, &smtpclient.Error{Permanent: true, Code: smtp.C550MailboxUnavail, Secode: smtp.SePol7ExpnProhibited2})
|
||||
ts.smtpErr(err, &smtpclient.Error{Permanent: true, Code: smtp.C550MailboxUnavail, Secode: smtp.SePol7ExpnProhibited2})
|
||||
})
|
||||
|
||||
msg = strings.ReplaceAll(`From: <private@mox.example>
|
||||
|
@ -134,7 +134,7 @@ test email
|
|||
if err == nil {
|
||||
err = client.Deliver(ctxbg, mailFrom, rcptTo, int64(len(msg)), strings.NewReader(msg), false, false, false)
|
||||
}
|
||||
ts.smtperr(err, &smtpclient.Error{Permanent: true, Code: smtp.C550MailboxUnavail, Secode: smtp.SePol7ExpnProhibited2})
|
||||
ts.smtpErr(err, &smtpclient.Error{Permanent: true, Code: smtp.C550MailboxUnavail, Secode: smtp.SePol7ExpnProhibited2})
|
||||
})
|
||||
|
||||
msg = strings.ReplaceAll(`From: <other@example.org>
|
||||
|
@ -151,7 +151,7 @@ test email
|
|||
if err == nil {
|
||||
err = client.Deliver(ctxbg, mailFrom, rcptTo, int64(len(msg)), strings.NewReader(msg), false, false, false)
|
||||
}
|
||||
ts.smtperr(err, nil)
|
||||
ts.smtpErr(err, nil)
|
||||
|
||||
ts.checkCount("Inbox", 2) // Receiving for both mjl@ and móx@.
|
||||
})
|
||||
|
@ -188,7 +188,7 @@ test email
|
|||
_, err = client.DeliverMultiple(ctxbg, mailFrom, rcptTo, int64(len(msg)), strings.NewReader(msg), true, true, false)
|
||||
// assuming there wasn't a per-recipient error
|
||||
}
|
||||
ts.smtperr(err, nil)
|
||||
ts.smtpErr(err, nil)
|
||||
|
||||
ts.checkCount("Inbox", 0) // Not receiving for mjl@ due to msgfrom, and not móx@ due to rcpt to.
|
||||
})
|
||||
|
@ -200,7 +200,7 @@ test email
|
|||
if err == nil {
|
||||
err = client.Deliver(ctxbg, mailFrom, rcptTo, int64(len(msg)), strings.NewReader(msg), false, false, false)
|
||||
}
|
||||
ts.smtperr(err, nil)
|
||||
ts.smtpErr(err, nil)
|
||||
|
||||
ts.checkCount("Inbox", 1) // Only receiving for móx@mox.example, not mjl@.
|
||||
})
|
||||
|
@ -219,7 +219,7 @@ test email
|
|||
if err == nil {
|
||||
err = client.Deliver(ctxbg, mailFrom, rcptTo, int64(len(msg)), strings.NewReader(msg), false, false, false)
|
||||
}
|
||||
ts.smtperr(err, &smtpclient.Error{Permanent: true, Code: smtp.C550MailboxUnavail, Secode: smtp.SePol7ExpnProhibited2})
|
||||
ts.smtpErr(err, &smtpclient.Error{Permanent: true, Code: smtp.C550MailboxUnavail, Secode: smtp.SePol7ExpnProhibited2})
|
||||
})
|
||||
|
||||
msg = strings.ReplaceAll(`From: <public@mox.example>
|
||||
|
@ -236,7 +236,7 @@ test email
|
|||
if err == nil {
|
||||
err = client.Deliver(ctxbg, mailFrom, rcptTo, int64(len(msg)), strings.NewReader(msg), false, false, false)
|
||||
}
|
||||
ts.smtperr(err, nil)
|
||||
ts.smtpErr(err, nil)
|
||||
})
|
||||
}
|
||||
|
||||
|
@ -269,7 +269,7 @@ test email
|
|||
if err == nil {
|
||||
err = client.Deliver(ctxbg, mailFrom, rcptTo, int64(len(msg)), strings.NewReader(msg), false, false, false)
|
||||
}
|
||||
ts.smtperr(err, nil)
|
||||
ts.smtpErr(err, nil)
|
||||
|
||||
ts.checkCount("Inbox", 1) // Only receiving for móx@mox.example, not mjl@.
|
||||
})
|
||||
|
@ -287,6 +287,6 @@ test email
|
|||
if err == nil {
|
||||
err = client.Deliver(ctxbg, mailFrom, rcptTo, int64(len(msg)), strings.NewReader(msg), false, false, false)
|
||||
}
|
||||
ts.smtperr(err, &smtpclient.Error{Code: smtp.C451LocalErr, Secode: smtp.SeSys3Other0})
|
||||
ts.smtpErr(err, &smtpclient.Error{Code: smtp.C451LocalErr, Secode: smtp.SeSys3Other0})
|
||||
})
|
||||
}
|
||||
|
|
|
@ -213,11 +213,12 @@ func (ts *testserver) runRaw(fn func(clientConn net.Conn)) {
|
|||
fn(clientConn)
|
||||
}
|
||||
|
||||
func (ts *testserver) smtperr(err error, expErr *smtpclient.Error) {
|
||||
ts.t.Helper()
|
||||
func (ts *testserver) smtpErr(err error, expErr *smtpclient.Error) {
|
||||
t := ts.t
|
||||
t.Helper()
|
||||
var cerr smtpclient.Error
|
||||
if expErr == nil && err != nil || expErr != nil && (err == nil || !errors.As(err, &cerr) || cerr.Code != expErr.Code || cerr.Secode != expErr.Secode) {
|
||||
ts.t.Fatalf("got err %#v (%q), expected %#v", err, err, expErr)
|
||||
if expErr == nil && err != nil || expErr != nil && (err == nil || !errors.As(err, &cerr) || cerr.Permanent != expErr.Permanent || cerr.Code != expErr.Code || cerr.Secode != expErr.Secode) {
|
||||
t.Fatalf("got err:\n%#v (%q)\nexpected:\n%#v", err, err, expErr)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -290,8 +291,8 @@ func TestSubmission(t *testing.T) {
|
|||
err = client.Deliver(ctxbg, mailFrom, rcptTo, int64(len(submitMessage)), strings.NewReader(submitMessage), false, false, false)
|
||||
}
|
||||
var cerr smtpclient.Error
|
||||
if expErr == nil && err != nil || expErr != nil && (err == nil || !errors.As(err, &cerr) || cerr.Secode != expErr.Secode) {
|
||||
t.Fatalf("got err %#v (%q), expected %#v", err, err, expErr)
|
||||
if expErr == nil && err != nil || expErr != nil && (err == nil || !errors.As(err, &cerr) || cerr.Code != expErr.Code || cerr.Secode != expErr.Secode) {
|
||||
t.Fatalf("got err:\n%#v (%q)\nexpected:\n%#v", err, err, expErr)
|
||||
}
|
||||
checkEvaluationCount(t, 0)
|
||||
})
|
||||
|
@ -317,8 +318,8 @@ func TestSubmission(t *testing.T) {
|
|||
},
|
||||
}
|
||||
for _, fn := range authfns {
|
||||
testAuth(fn, "mjl@mox.example", "test", &smtpclient.Error{Secode: smtp.SePol7AuthBadCreds8}) // Bad (short) password.
|
||||
testAuth(fn, "mjl@mox.example", password0+"test", &smtpclient.Error{Secode: smtp.SePol7AuthBadCreds8}) // Bad password.
|
||||
testAuth(fn, "mjl@mox.example", "test", &smtpclient.Error{Code: smtp.C535AuthBadCreds, Secode: smtp.SePol7AuthBadCreds8}) // Bad (short) password.
|
||||
testAuth(fn, "mjl@mox.example", password0+"test", &smtpclient.Error{Code: smtp.C535AuthBadCreds, Secode: smtp.SePol7AuthBadCreds8}) // Bad password.
|
||||
testAuth(fn, "mjl@mox.example", password0, nil)
|
||||
testAuth(fn, "mjl@mox.example", password1, nil)
|
||||
testAuth(fn, "móx@mox.example", password0, nil)
|
||||
|
@ -1293,10 +1294,7 @@ func TestLimitOutgoing(t *testing.T) {
|
|||
if err == nil {
|
||||
err = client.Deliver(ctxbg, mailFrom, rcptTo, int64(len(submitMessage)), strings.NewReader(submitMessage), false, false, false)
|
||||
}
|
||||
var cerr smtpclient.Error
|
||||
if expErr == nil && err != nil || expErr != nil && (err == nil || !errors.As(err, &cerr) || cerr.Secode != expErr.Secode) {
|
||||
t.Fatalf("got err %#v, expected %#v", err, expErr)
|
||||
}
|
||||
ts.smtpErr(err, expErr)
|
||||
})
|
||||
}
|
||||
|
||||
|
@ -1330,10 +1328,7 @@ func TestQuota(t *testing.T) {
|
|||
if err == nil {
|
||||
err = client.Deliver(ctxbg, mailFrom, rcptTo, int64(len(deliverMessage)), strings.NewReader(deliverMessage), false, false, false)
|
||||
}
|
||||
var cerr smtpclient.Error
|
||||
if expErr == nil && err != nil || expErr != nil && (err == nil || !errors.As(err, &cerr) || cerr.Secode != expErr.Secode) {
|
||||
t.Fatalf("got err %#v, expected %#v", err, expErr)
|
||||
}
|
||||
ts.smtpErr(err, expErr)
|
||||
})
|
||||
}
|
||||
|
||||
|
@ -1361,10 +1356,7 @@ func TestCatchall(t *testing.T) {
|
|||
if err == nil {
|
||||
err = client.Deliver(ctxbg, mailFrom, rcptTo, int64(len(submitMessage)), strings.NewReader(submitMessage), false, false, false)
|
||||
}
|
||||
var cerr smtpclient.Error
|
||||
if expErr == nil && err != nil || expErr != nil && (err == nil || !errors.As(err, &cerr) || cerr.Secode != expErr.Secode) {
|
||||
t.Fatalf("got err %#v, expected %#v", err, expErr)
|
||||
}
|
||||
ts.smtpErr(err, expErr)
|
||||
})
|
||||
}
|
||||
|
||||
|
@ -1502,17 +1494,14 @@ func TestPostmaster(t *testing.T) {
|
|||
if err == nil {
|
||||
err = client.Deliver(ctxbg, mailFrom, rcptTo, int64(len(deliverMessage)), strings.NewReader(deliverMessage), false, false, false)
|
||||
}
|
||||
var cerr smtpclient.Error
|
||||
if expErr == nil && err != nil || expErr != nil && (err == nil || !errors.As(err, &cerr) || cerr.Code != expErr.Code || cerr.Secode != expErr.Secode) {
|
||||
t.Fatalf("got err %#v, expected %#v", err, expErr)
|
||||
}
|
||||
ts.smtpErr(err, expErr)
|
||||
})
|
||||
}
|
||||
|
||||
testDeliver("postmaster", nil) // Plain postmaster address without domain.
|
||||
testDeliver("postmaster@host.mox.example", nil) // Postmaster address with configured mail server hostname.
|
||||
testDeliver("postmaster@mox.example", nil) // Postmaster address without explicitly configured destination.
|
||||
testDeliver("postmaster@unknown.example", &smtpclient.Error{Code: smtp.C550MailboxUnavail, Secode: smtp.SeAddr1UnknownDestMailbox1})
|
||||
testDeliver("postmaster@unknown.example", &smtpclient.Error{Permanent: true, Code: smtp.C550MailboxUnavail, Secode: smtp.SeAddr1UnknownDestMailbox1})
|
||||
}
|
||||
|
||||
// Test to address with empty localpart.
|
||||
|
@ -1538,10 +1527,7 @@ func TestEmptylocalpart(t *testing.T) {
|
|||
if err == nil {
|
||||
err = client.Deliver(ctxbg, mailFrom, rcptTo, int64(len(msg)), strings.NewReader(msg), false, false, false)
|
||||
}
|
||||
var cerr smtpclient.Error
|
||||
if expErr == nil && err != nil || expErr != nil && (err == nil || !errors.As(err, &cerr) || cerr.Code != expErr.Code || cerr.Secode != expErr.Secode) {
|
||||
t.Fatalf("got err %#v, expected %#v", err, expErr)
|
||||
}
|
||||
ts.smtpErr(err, expErr)
|
||||
})
|
||||
}
|
||||
|
||||
|
@ -1816,10 +1802,7 @@ QW4gYXR0YWNoZWQgdGV4dCBmaWxlLg==
|
|||
`, mailFrom, rcptTo, headerValue, filename), "\n", "\r\n")
|
||||
|
||||
err := client.Deliver(ctxbg, mailFrom, rcptTo, int64(len(msg)), strings.NewReader(msg), true, clientSmtputf8, false)
|
||||
var cerr smtpclient.Error
|
||||
if expErr == nil && err != nil || expErr != nil && (err == nil || !errors.As(err, &cerr) || cerr.Code != expErr.Code || cerr.Secode != expErr.Secode) {
|
||||
t.Fatalf("got err %#v, expected %#v", err, expErr)
|
||||
}
|
||||
ts.smtpErr(err, expErr)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
@ -1908,15 +1891,10 @@ test email
|
|||
`, "\n", "\r\n")
|
||||
|
||||
ts.run(func(err error, client *smtpclient.Client) {
|
||||
t.Helper()
|
||||
tcheck(t, err, "init client")
|
||||
mailFrom := "mjl@mox.example"
|
||||
rcptTo := "mjl@mox.example"
|
||||
err = client.Deliver(ctxbg, mailFrom, rcptTo, int64(len(extraMsg)), strings.NewReader(extraMsg), true, true, false)
|
||||
var cerr smtpclient.Error
|
||||
expErr := smtpclient.Error{Code: smtp.C554TransactionFailed, Secode: smtp.SeMsg6Other0}
|
||||
if err == nil || !errors.As(err, &cerr) || cerr.Code != expErr.Code || cerr.Secode != expErr.Secode {
|
||||
t.Fatalf("got err %#v, expected %#v", err, expErr)
|
||||
}
|
||||
ts.smtpErr(err, &smtpclient.Error{Permanent: true, Code: smtp.C554TransactionFailed, Secode: smtp.SeMsg6Other0})
|
||||
})
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue