mirror of
https://blitiri.com.ar/repos/chasquid
synced 2026-10-29 15:02:30 +00:00
test: Use modern testing features instead of custom helpers
Many of our tests rely on helpers that predate features which are now available in the standard library. This patch replaces them with the standard equivalents: - MustTempDir/RemoveIfOk -> t.ArtifactDir() or t.TempDir() (depending on whether it is useful to keep the data on request). - GetFreePort + waitForServer -> opening the listeners before starting the servers. To support this, localrpc.Server gains a Serve method. We may re-introduce these in the future if more use cases appear. - WaitFor and real-time timing checks -> testing/synctest. - context.Background() -> t.Context(). - Benchmark b.N loops -> b.Loop(). - reflect.DeepEqual -> cmp.Diff, and proto.Equal for protobufs.
This commit is contained in:
@@ -27,7 +27,7 @@ type FakeServer struct {
|
||||
func newFakeServer(t *testing.T, responses map[string]string, conns int) *FakeServer {
|
||||
s := &FakeServer{
|
||||
t: t,
|
||||
tmpDir: testlib.MustTempDir(t),
|
||||
tmpDir: t.ArtifactDir(),
|
||||
responses: responses,
|
||||
conns: conns,
|
||||
wg: &sync.WaitGroup{},
|
||||
@@ -36,14 +36,6 @@ func newFakeServer(t *testing.T, responses map[string]string, conns int) *FakeSe
|
||||
return s
|
||||
}
|
||||
|
||||
func (s *FakeServer) Cleanup() {
|
||||
// Remove our temporary data. Be extra paranoid and make sure the
|
||||
// directory isn't too shallow.
|
||||
if len(s.tmpDir) > 8 {
|
||||
os.RemoveAll(s.tmpDir)
|
||||
}
|
||||
}
|
||||
|
||||
func (s *FakeServer) initTLS() {
|
||||
var err error
|
||||
s.tlsConfig, err = testlib.GenerateCert(s.tmpDir)
|
||||
@@ -84,11 +76,7 @@ func (s *FakeServer) start() string {
|
||||
|
||||
s.initTLS()
|
||||
|
||||
s.wg.Add(s.conns)
|
||||
|
||||
accept := func() {
|
||||
defer s.wg.Done()
|
||||
|
||||
c, err := l.Accept()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
@@ -137,8 +125,8 @@ func (s *FakeServer) start() string {
|
||||
}
|
||||
}
|
||||
|
||||
for i := 0; i < s.conns; i++ {
|
||||
go accept()
|
||||
for range s.conns {
|
||||
s.wg.Go(accept)
|
||||
}
|
||||
|
||||
return s.addr
|
||||
|
||||
@@ -7,13 +7,10 @@ import (
|
||||
"os"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"blitiri.com.ar/go/chasquid/internal/testlib"
|
||||
)
|
||||
|
||||
func TestMDA(t *testing.T) {
|
||||
dir := testlib.MustTempDir(t)
|
||||
defer testlib.RemoveIfOk(t, dir)
|
||||
dir := t.ArtifactDir()
|
||||
|
||||
p := MDA{
|
||||
Binary: "tee",
|
||||
|
||||
@@ -9,7 +9,6 @@ import (
|
||||
|
||||
"blitiri.com.ar/go/chasquid/internal/domaininfo"
|
||||
"blitiri.com.ar/go/chasquid/internal/sts"
|
||||
"blitiri.com.ar/go/chasquid/internal/testlib"
|
||||
"blitiri.com.ar/go/chasquid/internal/trace"
|
||||
)
|
||||
|
||||
@@ -27,14 +26,13 @@ func init() {
|
||||
}
|
||||
}
|
||||
|
||||
func newSMTP(t *testing.T) (*SMTP, string) {
|
||||
dir := testlib.MustTempDir(t)
|
||||
dinfo, err := domaininfo.New(dir)
|
||||
func newSMTP(t *testing.T) *SMTP {
|
||||
dinfo, err := domaininfo.New(t.ArtifactDir())
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
return &SMTP{"hello", dinfo, nil}, dir
|
||||
return &SMTP{"hello", dinfo, nil}
|
||||
}
|
||||
|
||||
func TestSMTP(t *testing.T) {
|
||||
@@ -52,7 +50,6 @@ func TestSMTP(t *testing.T) {
|
||||
"QUIT": "250 quit ok\n",
|
||||
}
|
||||
srv := newFakeServer(t, responses, 1)
|
||||
defer srv.Cleanup()
|
||||
host, port := srv.HostPort()
|
||||
|
||||
// Put a non-existing host first, so we check that if the first host
|
||||
@@ -67,8 +64,7 @@ func TestSMTP(t *testing.T) {
|
||||
}
|
||||
*smtpPort = port
|
||||
|
||||
s, tmpDir := newSMTP(t)
|
||||
defer testlib.RemoveIfOk(t, tmpDir)
|
||||
s := newSMTP(t)
|
||||
err, _ := s.Deliver("me@me", "to@to", []byte("data"))
|
||||
if err != nil {
|
||||
t.Errorf("deliver failed: %v", err)
|
||||
@@ -125,14 +121,12 @@ func TestSMTPErrors(t *testing.T) {
|
||||
|
||||
for _, rs := range responses {
|
||||
srv := newFakeServer(t, rs, 1)
|
||||
defer srv.Cleanup()
|
||||
host, port := srv.HostPort()
|
||||
|
||||
testMX["to"] = []*net.MX{{Host: host, Pref: 10}}
|
||||
*smtpPort = port
|
||||
|
||||
s, tmpDir := newSMTP(t)
|
||||
defer testlib.RemoveIfOk(t, tmpDir)
|
||||
s := newSMTP(t)
|
||||
err, _ := s.Deliver("me@me", "to@to", []byte("data"))
|
||||
if err == nil {
|
||||
t.Errorf("deliver not failed in case %q: %v", rs["_welcome"], err)
|
||||
@@ -146,8 +140,7 @@ func TestSMTPErrors(t *testing.T) {
|
||||
func TestNoMXServer(t *testing.T) {
|
||||
testMX["to"] = []*net.MX{}
|
||||
|
||||
s, tmpDir := newSMTP(t)
|
||||
defer testlib.RemoveIfOk(t, tmpDir)
|
||||
s := newSMTP(t)
|
||||
err, permanent := s.Deliver("me@me", "to@to", []byte("data"))
|
||||
if err == nil {
|
||||
t.Errorf("delivery worked, expected failure")
|
||||
@@ -258,15 +251,13 @@ var tlsResponses = map[string]string{
|
||||
func TestTLS(t *testing.T) {
|
||||
smtpTotalTimeout = 5 * time.Second
|
||||
srv := newFakeServer(t, tlsResponses, 1)
|
||||
defer srv.Cleanup()
|
||||
_, *smtpPort = srv.HostPort()
|
||||
|
||||
testMX["to"] = []*net.MX{
|
||||
{Host: "localhost", Pref: 20},
|
||||
}
|
||||
|
||||
s, tmpDir := newSMTP(t)
|
||||
defer testlib.RemoveIfOk(t, tmpDir)
|
||||
s := newSMTP(t)
|
||||
err, _ := s.Deliver("me@me", "to@to", []byte("data"))
|
||||
if err != nil {
|
||||
t.Errorf("deliver failed: %v", err)
|
||||
@@ -286,7 +277,6 @@ func TestTLS(t *testing.T) {
|
||||
"QUIT": "250 quit ok\n",
|
||||
}
|
||||
srv = newFakeServer(t, responses, 1)
|
||||
defer srv.Cleanup()
|
||||
_, *smtpPort = srv.HostPort()
|
||||
|
||||
err, permanent := s.Deliver("me@me", "to@to", []byte("data"))
|
||||
@@ -326,15 +316,13 @@ func TestTLSError(t *testing.T) {
|
||||
// after the failed STARTTLS). Note this also checks that we correctly
|
||||
// close the errored connection, instead of leaving it lingering.
|
||||
srv := newFakeServer(t, responses, 2)
|
||||
defer srv.Cleanup()
|
||||
_, *smtpPort = srv.HostPort()
|
||||
|
||||
testMX["to"] = []*net.MX{
|
||||
{Host: "localhost", Pref: 20},
|
||||
}
|
||||
|
||||
s, tmpDir := newSMTP(t)
|
||||
defer testlib.RemoveIfOk(t, tmpDir)
|
||||
s := newSMTP(t)
|
||||
err, _ := s.Deliver("me@me", "to@to", []byte("data"))
|
||||
if err != nil {
|
||||
t.Errorf("deliver failed: %v", err)
|
||||
@@ -353,11 +341,9 @@ func TestTLSError(t *testing.T) {
|
||||
func TestSTSPolicyEnforcement(t *testing.T) {
|
||||
smtpTotalTimeout = 5 * time.Second
|
||||
srv := newFakeServer(t, tlsResponses, 1)
|
||||
defer srv.Cleanup()
|
||||
_, *smtpPort = srv.HostPort()
|
||||
|
||||
s, tmpDir := newSMTP(t)
|
||||
defer testlib.RemoveIfOk(t, tmpDir)
|
||||
s := newSMTP(t)
|
||||
|
||||
a := &attempt{
|
||||
courier: s,
|
||||
@@ -393,7 +379,6 @@ func TestSTSPolicyEnforcement(t *testing.T) {
|
||||
// be TLS_SECURE which is required by the STS policy.
|
||||
srv = newFakeServer(t, tlsResponses, 1)
|
||||
_, *smtpPort = srv.HostPort()
|
||||
defer srv.Cleanup()
|
||||
|
||||
certRoots = srv.rootCA()
|
||||
defer func() {
|
||||
|
||||
Reference in New Issue
Block a user