v0.22.0 several enhancements and fixes for security, network, doc, test, packaging
This commit is contained in:
1 parent
9ab8c356d2
commit
71d1b82f83
102 files changed
+7102
-2178
No files matched your search
@@ -0,0 +1,53 @@
|
||||
package core
|
||||
|
||||
import (
|
||||
"net"
|
||||
"testing"
|
||||
|
||||
"logwisp/internal/testutil"
|
||||
)
|
||||
|
||||
// The host literal picks the family, strictly: an IPv4 literal or the empty
|
||||
// host is IPv4 only, an IPv6 literal (the wildcard :: too) IPv6 only, and a
|
||||
// hostname resolves. Brackets and ports belong to addresses, not hosts, and
|
||||
// an IPv4-mapped address is IPv4 written as IPv6.
|
||||
func TestNetworkFollowsTheHostLiteral(t *testing.T) {
|
||||
for _, tc := range []struct{ host, want string }{
|
||||
{"127.0.0.1", "tcp4"}, {"0.0.0.0", "tcp4"}, {"", "tcp4"},
|
||||
{"::1", "tcp6"}, {"::", "tcp6"}, {"fe80::1%eth0", "tcp6"},
|
||||
{"relay.example", "tcp"}, {"localhost", "tcp"},
|
||||
{"[::1]", ""}, {"::1]", ""}, {"10.0.0.1:80", ""}, {"::ffff:10.0.0.1", ""},
|
||||
} {
|
||||
got, err := Network(tc.host)
|
||||
if got != tc.want || (err != nil) != (tc.want == "") {
|
||||
t.Errorf("Network(%q) = %q, %v; want %q", tc.host, got, err, tc.want)
|
||||
}
|
||||
}
|
||||
|
||||
testutil.RequireIPv6(t)
|
||||
network, _ := Network("::")
|
||||
ln, err := net.Listen(network, "[::]:0")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
t.Cleanup(func() { ln.Close() })
|
||||
go func() {
|
||||
for {
|
||||
c, err := ln.Accept()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
c.Close()
|
||||
}
|
||||
}()
|
||||
_, port, _ := net.SplitHostPort(ln.Addr().String())
|
||||
if c, err := net.Dial("tcp4", net.JoinHostPort("127.0.0.1", port)); err == nil {
|
||||
c.Close()
|
||||
t.Error(":: accepted an IPv4 connection")
|
||||
}
|
||||
c, err := net.Dial("tcp6", net.JoinHostPort("::1", port))
|
||||
if err != nil {
|
||||
t.Fatalf(":: refused [::1]: %v", err)
|
||||
}
|
||||
c.Close()
|
||||
}
|
||||
Reference in new issue
Block a user