Merge branch '18995-addrislocal'
authorTom Clegg <tom@curii.com>
Thu, 14 Apr 2022 19:41:16 +0000 (15:41 -0400)
committerTom Clegg <tom@curii.com>
Thu, 14 Apr 2022 19:41:16 +0000 (15:41 -0400)
refs #18995

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 b56e5ac725f773071b0643504bd4dbe4e6a0d811..a055f2b9545a2c8a41b0c855b5759b993e357c0e 100644 (file)
@@ -946,7 +946,11 @@ func (super *Supervisor) autofillConfig() 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)
+
+}