48 lines
834 B
Go
48 lines
834 B
Go
package elect_test
|
|
|
|
import (
|
|
"net"
|
|
"net/http"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/gopatchy/elect"
|
|
"github.com/samber/lo"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
type TestServer struct {
|
|
Candidate *elect.Candidate
|
|
|
|
listener *net.TCPListener
|
|
srv *http.Server
|
|
}
|
|
|
|
func NewTestServer(t *testing.T, signingKey string) *TestServer {
|
|
ts := &TestServer{
|
|
Candidate: elect.NewCandidate(1, signingKey),
|
|
listener: lo.Must(net.ListenTCP("tcp", nil)),
|
|
}
|
|
|
|
ts.srv = &http.Server{
|
|
Handler: ts.Candidate,
|
|
ReadHeaderTimeout: 30 * time.Second,
|
|
}
|
|
|
|
go func() {
|
|
err := ts.srv.Serve(ts.listener)
|
|
require.ErrorIs(t, err, http.ErrServerClosed)
|
|
}()
|
|
|
|
return ts
|
|
}
|
|
|
|
func (ts *TestServer) Stop() {
|
|
ts.srv.Close()
|
|
ts.Candidate.Stop()
|
|
}
|
|
|
|
func (ts *TestServer) Addr() *net.TCPAddr {
|
|
return ts.listener.Addr().(*net.TCPAddr)
|
|
}
|