pkg/testutil/bldr/tcp_port.go (24 lines of code) (raw):
package bldr
import (
"net"
"testing"
"github.com/stretchr/testify/require"
)
type tcpPort struct {
t *testing.T
}
func TCPPort(t *testing.T) *tcpPort {
return &tcpPort{t: t}
}
func (p *tcpPort) FindFree() string {
l, port := p.Listen("0")
require.NoError(p.t, l.Close())
return port
}
func (p *tcpPort) Listen(port string) (net.Listener, string) {
tcpListener, err := net.Listen("tcp", ":"+port)
require.NoError(p.t, err, "failed to allocate TCP port")
_, portPart, err := net.SplitHostPort(tcpListener.Addr().String())
require.NoError(p.t, err, "failed to split host and port")
return tcpListener, portPart
}