Skip to content

Commit 598c9bb

Browse files
committed
Wait for server
Signed-off-by: Danny Kopping <danny@coder.com>
1 parent 6e34de6 commit 598c9bb

File tree

1 file changed

+39
-0
lines changed

1 file changed

+39
-0
lines changed

coderd/notifications/dispatch/smtp_test.go

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,11 @@ package dispatch_test
22

33
import (
44
"bytes"
5+
"crypto/tls"
56
_ "embed"
67
"fmt"
78
"log"
9+
"net"
810
"sync"
911
"testing"
1012

@@ -425,6 +427,27 @@ func TestSMTP(t *testing.T) {
425427
assert.NoError(t, srv.Serve(listen))
426428
}()
427429

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+
428451
// Build a fake payload.
429452
payload := types.MessagePayload{
430453
Version: "1.0",
@@ -468,3 +491,19 @@ func TestSMTP(t *testing.T) {
468491
})
469492
}
470493
}
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

Comments
 (0)