18995: Un-stub addrIsLocal, make it work for in-use ports.
authorTom Clegg <tom@curii.com>
Thu, 14 Apr 2022 14:59:14 +0000 (10:59 -0400)
committerTom Clegg <tom@curii.com>
Thu, 14 Apr 2022 14:59:14 +0000 (10:59 -0400)
Arvados-DCO-1.1-Signed-off-by: Tom Clegg <tom@curii.com>

lib/boot/supervisor.go
lib/boot/supervisor_test.go [new file with mode: 0644]

index 7daceccb93d04e0498f0eabaecdaabeb7a045de3..26b3fceee320ed2a0d45ec94ba7c67ebad3228f0 100644 (file)
@@ -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 (file)
index 0000000..b80fe1e
--- /dev/null
@@ -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)
+
+}