github.com/code-reading/golang@v0.0.0-20220303082512-ba5bc0e589a3/go/src/net/unixsock_windows_test.go (about) 1 // Copyright 2018 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 //go:build windows 6 // +build windows 7 8 package net 9 10 import ( 11 "internal/syscall/windows/registry" 12 "os" 13 "reflect" 14 "runtime" 15 "strconv" 16 "testing" 17 ) 18 19 func isBuild17063() bool { 20 k, err := registry.OpenKey(registry.LOCAL_MACHINE, `SOFTWARE\Microsoft\Windows NT\CurrentVersion`, registry.READ) 21 if err != nil { 22 return false 23 } 24 defer k.Close() 25 26 s, _, err := k.GetStringValue("CurrentBuild") 27 if err != nil { 28 return false 29 } 30 ver, err := strconv.Atoi(s) 31 if err != nil { 32 return false 33 } 34 return ver >= 17063 35 } 36 37 func TestUnixConnLocalWindows(t *testing.T) { 38 switch runtime.GOARCH { 39 case "386": 40 t.Skip("not supported on windows/386, see golang.org/issue/27943") 41 case "arm": 42 t.Skip("not supported on windows/arm, see golang.org/issue/28061") 43 } 44 if !isBuild17063() { 45 t.Skip("unix test") 46 } 47 48 handler := func(ls *localServer, ln Listener) {} 49 for _, laddr := range []string{"", testUnixAddr()} { 50 laddr := laddr 51 taddr := testUnixAddr() 52 ta, err := ResolveUnixAddr("unix", taddr) 53 if err != nil { 54 t.Fatal(err) 55 } 56 ln, err := ListenUnix("unix", ta) 57 if err != nil { 58 t.Fatal(err) 59 } 60 ls, err := (&streamListener{Listener: ln}).newLocalServer() 61 if err != nil { 62 t.Fatal(err) 63 } 64 defer ls.teardown() 65 if err := ls.buildup(handler); err != nil { 66 t.Fatal(err) 67 } 68 69 la, err := ResolveUnixAddr("unix", laddr) 70 if err != nil { 71 t.Fatal(err) 72 } 73 c, err := DialUnix("unix", la, ta) 74 if err != nil { 75 t.Fatal(err) 76 } 77 defer func() { 78 c.Close() 79 if la != nil { 80 defer os.Remove(laddr) 81 } 82 }() 83 if _, err := c.Write([]byte("UNIXCONN LOCAL AND REMOTE NAME TEST")); err != nil { 84 t.Fatal(err) 85 } 86 87 if laddr == "" { 88 laddr = "@" 89 } 90 var connAddrs = [3]struct{ got, want Addr }{ 91 {ln.Addr(), ta}, 92 {c.LocalAddr(), &UnixAddr{Name: laddr, Net: "unix"}}, 93 {c.RemoteAddr(), ta}, 94 } 95 for _, ca := range connAddrs { 96 if !reflect.DeepEqual(ca.got, ca.want) { 97 t.Fatalf("got %#v, expected %#v", ca.got, ca.want) 98 } 99 } 100 } 101 }