in internal/mock/alloydb.go [260:318]
func StartServerProxy(t *testing.T, inst FakeAlloyDBInstance) func() {
pool := x509.NewCertPool()
pool.AddCert(inst.rootCACert)
tryListen := func(t *testing.T, attempts int) net.Listener {
var (
ln net.Listener
err error
)
for i := 0; i < attempts; i++ {
ln, err = tls.Listen("tcp", ":5433", &tls.Config{
Certificates: []tls.Certificate{
{
Certificate: [][]byte{inst.serverCert.Raw, inst.rootCACert.Raw},
PrivateKey: inst.serverKey,
Leaf: inst.serverCert,
},
},
ServerName: "127.0.0.1",
ClientAuth: tls.RequireAndVerifyClientCert,
ClientCAs: pool,
})
if err != nil {
t.Log("listener failed to start, waiting 100ms")
time.Sleep(500 * time.Millisecond)
continue
}
return ln
}
t.Fatalf("failed to start listener: %v", err)
return nil
}
ln := tryListen(t, 10)
ctx, cancel := context.WithCancel(context.Background())
go func() {
for {
select {
case <-ctx.Done():
return
default:
conn, err := ln.Accept()
if err != nil {
return
}
if err := metadataExchange(conn); err != nil {
conn.Close()
return
}
// Database protocol takes over from here.
conn.Write([]byte(inst.name))
conn.Close()
}
}
}()
return func() {
cancel()
ln.Close()
}
}