email_deadline_test.go 927 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. package email
  2. import (
  3. "net"
  4. "testing"
  5. "time"
  6. )
  7. func TestSendPlainReturnsOnStalledServer(t *testing.T) {
  8. orig := smtpDeadline
  9. smtpDeadline = 300 * time.Millisecond
  10. t.Cleanup(func() { smtpDeadline = orig })
  11. ln, err := net.Listen("tcp", "127.0.0.1:0")
  12. if err != nil {
  13. t.Fatalf("listen: %v", err)
  14. }
  15. defer ln.Close()
  16. stall := make(chan struct{})
  17. defer close(stall)
  18. go func() {
  19. conn, err := ln.Accept()
  20. if err != nil {
  21. return
  22. }
  23. defer conn.Close()
  24. <-stall
  25. }()
  26. s := &EmailService{}
  27. done := make(chan error, 1)
  28. go func() {
  29. done <- s.sendPlain(ln.Addr().String(), nil, "[email protected]",
  30. []string{"[email protected]"}, []byte("body"), "example.com")
  31. }()
  32. select {
  33. case err := <-done:
  34. if err == nil {
  35. t.Fatal("expected an error from a silent SMTP server, got nil")
  36. }
  37. case <-time.After(3 * time.Second):
  38. t.Fatal("sendPlain did not return on a stalled server within the deadline")
  39. }
  40. }