Use separate package for tests and example.
This commit is contained in:
parent
ca017c1955
commit
3bd281bb3c
2 changed files with 47 additions and 47 deletions
|
@ -1,32 +1,32 @@
|
||||||
package smtpd
|
package smtpd_test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bitbucket.org/chrj/smtpd"
|
||||||
"errors"
|
"errors"
|
||||||
"net/smtp"
|
"net/smtp"
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
func ExampleServer() {
|
func ExampleServer() {
|
||||||
|
var server *smtpd.Server
|
||||||
var server *Server
|
|
||||||
|
|
||||||
// No-op server. Accepts and discards
|
// No-op server. Accepts and discards
|
||||||
server = &Server{}
|
server = &smtpd.Server{}
|
||||||
server.ListenAndServe()
|
server.ListenAndServe()
|
||||||
|
|
||||||
// Relay server. Accepts only from single IP address and forwards using the Gmail smtp
|
// Relay server. Accepts only from single IP address and forwards using the Gmail smtp
|
||||||
server = &Server{
|
server = &smtpd.Server{
|
||||||
|
|
||||||
Addr: "0.0.0.0:10025",
|
Addr: "0.0.0.0:10025",
|
||||||
|
|
||||||
HeloChecker: func(peer Peer) error {
|
HeloChecker: func(peer smtpd.Peer) error {
|
||||||
if !strings.HasPrefix(peer.Addr.String(), "42.42.42.42:") {
|
if !strings.HasPrefix(peer.Addr.String(), "42.42.42.42:") {
|
||||||
return errors.New("Denied")
|
return errors.New("Denied")
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
},
|
},
|
||||||
|
|
||||||
Handler: func(peer Peer, env Envelope) error {
|
Handler: func(peer smtpd.Peer, env smtpd.Envelope) error {
|
||||||
return smtp.SendMail(
|
return smtp.SendMail(
|
||||||
"smtp.gmail.com:587",
|
"smtp.gmail.com:587",
|
||||||
smtp.PlainAuth(
|
smtp.PlainAuth(
|
||||||
|
@ -43,5 +43,4 @@ func ExampleServer() {
|
||||||
}
|
}
|
||||||
|
|
||||||
server.ListenAndServe()
|
server.ListenAndServe()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package smtpd
|
package smtpd_test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bitbucket.org/chrj/smtpd"
|
||||||
"crypto/tls"
|
"crypto/tls"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
@ -42,7 +43,7 @@ func TestSMTP(t *testing.T) {
|
||||||
|
|
||||||
defer ln.Close()
|
defer ln.Close()
|
||||||
|
|
||||||
server := &Server{}
|
server := &smtpd.Server{}
|
||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
server.Serve(ln)
|
server.Serve(ln)
|
||||||
|
@ -120,7 +121,7 @@ func TestListenAndServe(t *testing.T) {
|
||||||
|
|
||||||
ln.Close()
|
ln.Close()
|
||||||
|
|
||||||
server := &Server{Addr: addr}
|
server := &smtpd.Server{Addr: addr}
|
||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
server.ListenAndServe()
|
server.ListenAndServe()
|
||||||
|
@ -153,8 +154,8 @@ func TestSTARTTLS(t *testing.T) {
|
||||||
t.Fatalf("Cert load failed: %v", err)
|
t.Fatalf("Cert load failed: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
server := &Server{
|
server := &smtpd.Server{
|
||||||
Authenticator: func(peer Peer, username, password string) error { return nil },
|
Authenticator: func(peer smtpd.Peer, username, password string) error { return nil },
|
||||||
TLSConfig: &tls.Config{
|
TLSConfig: &tls.Config{
|
||||||
Certificates: []tls.Certificate{cert},
|
Certificates: []tls.Certificate{cert},
|
||||||
},
|
},
|
||||||
|
@ -248,9 +249,9 @@ func TestAuthRejection(t *testing.T) {
|
||||||
t.Fatalf("Cert load failed: %v", err)
|
t.Fatalf("Cert load failed: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
server := &Server{
|
server := &smtpd.Server{
|
||||||
Authenticator: func(peer Peer, username, password string) error {
|
Authenticator: func(peer smtpd.Peer, username, password string) error {
|
||||||
return Error{Code: 550, Message: "Denied"}
|
return smtpd.Error{Code: 550, Message: "Denied"}
|
||||||
},
|
},
|
||||||
TLSConfig: &tls.Config{
|
TLSConfig: &tls.Config{
|
||||||
Certificates: []tls.Certificate{cert},
|
Certificates: []tls.Certificate{cert},
|
||||||
|
@ -286,9 +287,9 @@ func TestConnectionCheck(t *testing.T) {
|
||||||
|
|
||||||
defer ln.Close()
|
defer ln.Close()
|
||||||
|
|
||||||
server := &Server{
|
server := &smtpd.Server{
|
||||||
ConnectionChecker: func(peer Peer) error {
|
ConnectionChecker: func(peer smtpd.Peer) error {
|
||||||
return Error{Code: 552, Message: "Denied"}
|
return smtpd.Error{Code: 552, Message: "Denied"}
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -311,8 +312,8 @@ func TestConnectionCheckSimpleError(t *testing.T) {
|
||||||
|
|
||||||
defer ln.Close()
|
defer ln.Close()
|
||||||
|
|
||||||
server := &Server{
|
server := &smtpd.Server{
|
||||||
ConnectionChecker: func(peer Peer) error {
|
ConnectionChecker: func(peer smtpd.Peer) error {
|
||||||
return errors.New("Denied")
|
return errors.New("Denied")
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
@ -336,9 +337,9 @@ func TestHELOCheck(t *testing.T) {
|
||||||
|
|
||||||
defer ln.Close()
|
defer ln.Close()
|
||||||
|
|
||||||
server := &Server{
|
server := &smtpd.Server{
|
||||||
HeloChecker: func(peer Peer) error {
|
HeloChecker: func(peer smtpd.Peer) error {
|
||||||
return Error{Code: 552, Message: "Denied"}
|
return smtpd.Error{Code: 552, Message: "Denied"}
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -366,9 +367,9 @@ func TestSenderCheck(t *testing.T) {
|
||||||
|
|
||||||
defer ln.Close()
|
defer ln.Close()
|
||||||
|
|
||||||
server := &Server{
|
server := &smtpd.Server{
|
||||||
SenderChecker: func(peer Peer, addr string) error {
|
SenderChecker: func(peer smtpd.Peer, addr string) error {
|
||||||
return Error{Code: 552, Message: "Denied"}
|
return smtpd.Error{Code: 552, Message: "Denied"}
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -396,9 +397,9 @@ func TestRecipientCheck(t *testing.T) {
|
||||||
|
|
||||||
defer ln.Close()
|
defer ln.Close()
|
||||||
|
|
||||||
server := &Server{
|
server := &smtpd.Server{
|
||||||
RecipientChecker: func(peer Peer, addr string) error {
|
RecipientChecker: func(peer smtpd.Peer, addr string) error {
|
||||||
return Error{Code: 552, Message: "Denied"}
|
return smtpd.Error{Code: 552, Message: "Denied"}
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -430,7 +431,7 @@ func TestMaxMessageSize(t *testing.T) {
|
||||||
|
|
||||||
defer ln.Close()
|
defer ln.Close()
|
||||||
|
|
||||||
server := &Server{
|
server := &smtpd.Server{
|
||||||
MaxMessageSize: 5,
|
MaxMessageSize: 5,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -481,8 +482,8 @@ func TestHandler(t *testing.T) {
|
||||||
|
|
||||||
defer ln.Close()
|
defer ln.Close()
|
||||||
|
|
||||||
server := &Server{
|
server := &smtpd.Server{
|
||||||
Handler: func(peer Peer, env Envelope) error {
|
Handler: func(peer smtpd.Peer, env smtpd.Envelope) error {
|
||||||
if env.Sender != "sender@example.org" {
|
if env.Sender != "sender@example.org" {
|
||||||
t.Fatalf("Unknown sender: %v", env.Sender)
|
t.Fatalf("Unknown sender: %v", env.Sender)
|
||||||
}
|
}
|
||||||
|
@ -546,9 +547,9 @@ func TestRejectHandler(t *testing.T) {
|
||||||
|
|
||||||
defer ln.Close()
|
defer ln.Close()
|
||||||
|
|
||||||
server := &Server{
|
server := &smtpd.Server{
|
||||||
Handler: func(peer Peer, env Envelope) error {
|
Handler: func(peer smtpd.Peer, env smtpd.Envelope) error {
|
||||||
return Error{Code: 550, Message: "Rejected"}
|
return smtpd.Error{Code: 550, Message: "Rejected"}
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -599,7 +600,7 @@ func TestMaxConnections(t *testing.T) {
|
||||||
|
|
||||||
defer ln.Close()
|
defer ln.Close()
|
||||||
|
|
||||||
server := &Server{
|
server := &smtpd.Server{
|
||||||
MaxConnections: 1,
|
MaxConnections: 1,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -629,7 +630,7 @@ func TestNoMaxConnections(t *testing.T) {
|
||||||
|
|
||||||
defer ln.Close()
|
defer ln.Close()
|
||||||
|
|
||||||
server := &Server{
|
server := &smtpd.Server{
|
||||||
MaxConnections: -1,
|
MaxConnections: -1,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -654,7 +655,7 @@ func TestInvalidHelo(t *testing.T) {
|
||||||
|
|
||||||
defer ln.Close()
|
defer ln.Close()
|
||||||
|
|
||||||
server := &Server{}
|
server := &smtpd.Server{}
|
||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
server.Serve(ln)
|
server.Serve(ln)
|
||||||
|
@ -680,7 +681,7 @@ func TestInvalidSender(t *testing.T) {
|
||||||
|
|
||||||
defer ln.Close()
|
defer ln.Close()
|
||||||
|
|
||||||
server := &Server{}
|
server := &smtpd.Server{}
|
||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
server.Serve(ln)
|
server.Serve(ln)
|
||||||
|
@ -706,7 +707,7 @@ func TestInvalidRecipient(t *testing.T) {
|
||||||
|
|
||||||
defer ln.Close()
|
defer ln.Close()
|
||||||
|
|
||||||
server := &Server{}
|
server := &smtpd.Server{}
|
||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
server.Serve(ln)
|
server.Serve(ln)
|
||||||
|
@ -736,7 +737,7 @@ func TestRCPTbeforeMAIL(t *testing.T) {
|
||||||
|
|
||||||
defer ln.Close()
|
defer ln.Close()
|
||||||
|
|
||||||
server := &Server{}
|
server := &smtpd.Server{}
|
||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
server.Serve(ln)
|
server.Serve(ln)
|
||||||
|
@ -762,9 +763,9 @@ func TestDATAbeforeRCPT(t *testing.T) {
|
||||||
|
|
||||||
defer ln.Close()
|
defer ln.Close()
|
||||||
|
|
||||||
server := &Server{
|
server := &smtpd.Server{
|
||||||
Handler: func(peer Peer, env Envelope) error {
|
Handler: func(peer smtpd.Peer, env smtpd.Envelope) error {
|
||||||
return Error{Code: 550, Message: "Rejected"}
|
return smtpd.Error{Code: 550, Message: "Rejected"}
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -800,8 +801,8 @@ func TestInterruptedDATA(t *testing.T) {
|
||||||
|
|
||||||
defer ln.Close()
|
defer ln.Close()
|
||||||
|
|
||||||
server := &Server{
|
server := &smtpd.Server{
|
||||||
Handler: func(peer Peer, env Envelope) error {
|
Handler: func(peer smtpd.Peer, env smtpd.Envelope) error {
|
||||||
t.Fatal("Accepted DATA despite disconnection")
|
t.Fatal("Accepted DATA despite disconnection")
|
||||||
return nil
|
return nil
|
||||||
},
|
},
|
||||||
|
|
Loading…
Add table
Reference in a new issue