From 64e60532782bb0176a12d10d506f514795496c80 Mon Sep 17 00:00:00 2001 From: Jim Date: Thu, 25 Feb 2021 14:31:14 -0500 Subject: [PATCH] Add TestFreePort(...) which just returns an available free localhost port (#964) --- sdk/testutil/free_port.go | 21 +++++++++++++++++++++ sdk/testutil/free_port_test.go | 25 +++++++++++++++++++++++++ 2 files changed, 46 insertions(+) create mode 100644 sdk/testutil/free_port.go create mode 100644 sdk/testutil/free_port_test.go diff --git a/sdk/testutil/free_port.go b/sdk/testutil/free_port.go new file mode 100644 index 000000000..c4d999c7c --- /dev/null +++ b/sdk/testutil/free_port.go @@ -0,0 +1,21 @@ +package testutil + +import ( + "net" + "testing" + + "github.com/stretchr/testify/require" +) + +// TestFreePort just returns an available free localhost port +func TestFreePort(t *testing.T) int { + t.Helper() + require := require.New(t) + addr, err := net.ResolveTCPAddr("tcp", "localhost:0") + require.NoError(err) + + l, err := net.ListenTCP("tcp", addr) + require.NoError(err) + defer l.Close() + return l.Addr().(*net.TCPAddr).Port +} diff --git a/sdk/testutil/free_port_test.go b/sdk/testutil/free_port_test.go new file mode 100644 index 000000000..fd625b9b8 --- /dev/null +++ b/sdk/testutil/free_port_test.go @@ -0,0 +1,25 @@ +package testutil + +import ( + "fmt" + "net" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func Test_TestFreePort(t *testing.T) { + t.Parallel() + t.Run("simple-validation", func(t *testing.T) { + assert, require := assert.New(t), require.New(t) + p := TestFreePort(t) + assert.NotEmpty(p) + + addr, err := net.ResolveTCPAddr("tcp", fmt.Sprintf("localhost:%d", p)) + require.NoError(err) + l, err := net.ListenTCP("tcp", addr) + require.NoError(err) + defer l.Close() + }) +}