@@ -2,9 +2,11 @@ package dispatch_test
2
2
3
3
import (
4
4
"bytes"
5
+ "crypto/tls"
5
6
_ "embed"
6
7
"fmt"
7
8
"log"
9
+ "net"
8
10
"sync"
9
11
"testing"
10
12
@@ -425,6 +427,27 @@ func TestSMTP(t *testing.T) {
425
427
assert .NoError (t , srv .Serve (listen ))
426
428
}()
427
429
430
+ // Wait for the server to become pingable.
431
+ require .Eventually (t , func () bool {
432
+ cl , err := pingClient (listen , tc .useTLS , tc .cfg .TLS .StartTLS .Value ())
433
+ if err != nil {
434
+ t .Logf ("smtp not yet dialable: %s" , err )
435
+ return false
436
+ }
437
+
438
+ if err = cl .Noop (); err != nil {
439
+ t .Logf ("smtp not yet noopable: %s" , err )
440
+ return false
441
+ }
442
+
443
+ if err = cl .Close (); err != nil {
444
+ t .Logf ("smtp didn't close properly: %s" , err )
445
+ return false
446
+ }
447
+
448
+ return true
449
+ }, testutil .WaitShort , testutil .IntervalFast )
450
+
428
451
// Build a fake payload.
429
452
payload := types.MessagePayload {
430
453
Version : "1.0" ,
@@ -468,3 +491,19 @@ func TestSMTP(t *testing.T) {
468
491
})
469
492
}
470
493
}
494
+
495
+ func pingClient (listen net.Listener , useTLS bool , startTLS bool ) (* smtp.Client , error ) {
496
+ tlsCfg := & tls.Config {
497
+ // nolint:gosec // It's a test.
498
+ InsecureSkipVerify : true ,
499
+ }
500
+
501
+ switch {
502
+ case useTLS :
503
+ return smtp .DialTLS (listen .Addr ().String (), tlsCfg )
504
+ case startTLS :
505
+ return smtp .DialStartTLS (listen .Addr ().String (), tlsCfg )
506
+ default :
507
+ return smtp .Dial (listen .Addr ().String ())
508
+ }
509
+ }
0 commit comments