From 82dc0830162c9f184e2645c7210f216f93a8cd9c Mon Sep 17 00:00:00 2001 From: Maru Newby Date: Wed, 1 Mar 2017 17:28:40 -0800 Subject: [PATCH] test/integration: Make localPort reusable as FindFreeLocalPort --- test/integration/examples/apiserver_test.go | 20 +++--------------- test/integration/framework/master_utils.go | 23 +++++++++++++++++++++ 2 files changed, 26 insertions(+), 17 deletions(-) diff --git a/test/integration/examples/apiserver_test.go b/test/integration/examples/apiserver_test.go index 8c2621b5acb..30b04741794 100644 --- a/test/integration/examples/apiserver_test.go +++ b/test/integration/examples/apiserver_test.go @@ -56,20 +56,6 @@ var groupVersionForDiscovery = metav1.GroupVersionForDiscovery{ Version: groupVersion.Version, } -func localPort() (int, error) { - l, err := net.Listen("tcp", ":0") - if err != nil { - return 0, err - } - defer l.Close() - addr := strings.Split(l.Addr().String(), ":") - port, err := strconv.Atoi(addr[len(addr)-1]) - if err != nil { - return 0, err - } - return port, nil -} - func TestAggregatedAPIServer(t *testing.T) { stopCh := make(chan struct{}) defer close(stopCh) @@ -106,7 +92,7 @@ func TestAggregatedAPIServer(t *testing.T) { go func() { for { // always get a fresh port in case something claimed the old one - kubePort, err := localPort() + kubePort, err := framework.FindFreeLocalPort() if err != nil { t.Fatal(err) } @@ -179,7 +165,7 @@ func TestAggregatedAPIServer(t *testing.T) { go func() { for { // always get a fresh port in case something claimed the old one - wardlePortInt, err := localPort() + wardlePortInt, err := framework.FindFreeLocalPort() if err != nil { t.Fatal(err) } @@ -256,7 +242,7 @@ func TestAggregatedAPIServer(t *testing.T) { go func() { for { // always get a fresh port in case something claimed the old one - aggregatorPortInt, err := localPort() + aggregatorPortInt, err := framework.FindFreeLocalPort() if err != nil { t.Fatal(err) } diff --git a/test/integration/framework/master_utils.go b/test/integration/framework/master_utils.go index c0ca8cb9fd6..7b55729b65d 100644 --- a/test/integration/framework/master_utils.go +++ b/test/integration/framework/master_utils.go @@ -22,6 +22,7 @@ import ( "net/http" "net/http/httptest" goruntime "runtime" + "strconv" "sync" "testing" "time" @@ -509,3 +510,25 @@ func RunParallel(task Task, numTasks, numWorkers int) { wg.Wait() close(semCh) } + +// FindFreeLocalPort returns the number of an available port number on +// the loopback interface. Useful for determining the port to launch +// a server on. Error handling required - there is a non-zero chance +// that the returned port number will be bound by another process +// after this function returns. +func FindFreeLocalPort() (int, error) { + l, err := net.Listen("tcp", ":0") + if err != nil { + return 0, err + } + defer l.Close() + _, portStr, err := net.SplitHostPort(l.Addr().String()) + if err != nil { + return 0, err + } + port, err := strconv.Atoi(portStr) + if err != nil { + return 0, err + } + return port, nil +}