From: Tom Clegg Date: Thu, 14 Apr 2022 14:59:14 +0000 (-0400) Subject: 18995: Un-stub addrIsLocal, make it work for in-use ports. X-Git-Tag: 2.5.0~205^2 X-Git-Url: https://git.arvados.org/arvados.git/commitdiff_plain/954f3e357128f884409e52658933d120ce0127ea 18995: Un-stub addrIsLocal, make it work for in-use ports. Arvados-DCO-1.1-Signed-off-by: Tom Clegg --- diff --git a/lib/boot/supervisor.go b/lib/boot/supervisor.go index 7daceccb93..26b3fceee3 100644 --- a/lib/boot/supervisor.go +++ b/lib/boot/supervisor.go @@ -809,7 +809,11 @@ func (super *Supervisor) autofillConfig(cfg *arvados.Config) error { } func addrIsLocal(addr string) (bool, error) { - return true, nil + if h, _, err := net.SplitHostPort(addr); err != nil { + return false, err + } else { + addr = net.JoinHostPort(h, "0") + } listener, err := net.Listen("tcp", addr) if err == nil { listener.Close() diff --git a/lib/boot/supervisor_test.go b/lib/boot/supervisor_test.go new file mode 100644 index 0000000000..b80fe1ed4c --- /dev/null +++ b/lib/boot/supervisor_test.go @@ -0,0 +1,57 @@ +// Copyright (C) The Arvados Authors. All rights reserved. +// +// SPDX-License-Identifier: AGPL-3.0 + +package boot + +import ( + "net" + "testing" + + check "gopkg.in/check.v1" +) + +func Test(t *testing.T) { + check.TestingT(t) +} + +type supervisorSuite struct{} + +var _ = check.Suite(&supervisorSuite{}) + +func (s *supervisorSuite) TestAddrIsLocal(c *check.C) { + is, err := addrIsLocal("0.0.0.0:0") + c.Check(err, check.IsNil) + c.Check(is, check.Equals, true) + + is, err = addrIsLocal("127.0.0.1:9") + c.Check(err, check.IsNil) + c.Check(is, check.Equals, true) + + is, err = addrIsLocal("127.0.0.127:32767") + c.Check(err, check.IsNil) + c.Check(is, check.Equals, true) + + is, err = addrIsLocal("[::1]:32767") + c.Check(err, check.IsNil) + c.Check(is, check.Equals, true) + + is, err = addrIsLocal("8.8.8.8:32767") + c.Check(err, check.IsNil) + c.Check(is, check.Equals, false) + + is, err = addrIsLocal("example.com:32767") + c.Check(err, check.IsNil) + c.Check(is, check.Equals, false) + + is, err = addrIsLocal("1.2.3.4.5:32767") + c.Check(err, check.NotNil) + + ln, err := net.Listen("tcp", ":") + c.Assert(err, check.IsNil) + defer ln.Close() + is, err = addrIsLocal(ln.Addr().String()) + c.Check(err, check.IsNil) + c.Check(is, check.Equals, true) + +}