libgo: update to Go 1.8 release candidate 1
Compiler changes: * Change map assignment to use mapassign and assign value directly. * Change string iteration to use decoderune, faster for ASCII strings. * Change makeslice to take int, and use makeslice64 for larger values. * Add new noverflow field to hmap struct used for maps. Unresolved problems, to be fixed later: * Commented out test in go/types/sizes_test.go that doesn't compile. * Commented out reflect.TestStructOf test for padding after zero-sized field. Reviewed-on: https://go-review.googlesource.com/35231 gotools/: Updates for Go 1.8rc1. * Makefile.am (go_cmd_go_files): Add bug.go. (s-zdefaultcc): Write defaultPkgConfig. * Makefile.in: Rebuild. From-SVN: r244456
This commit is contained in:
parent
829afb8f05
commit
c2047754c3
983 changed files with 69318 additions and 17662 deletions
|
@ -9,6 +9,7 @@ package net
|
|||
import (
|
||||
"bytes"
|
||||
"internal/testenv"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"reflect"
|
||||
"runtime"
|
||||
|
@ -414,33 +415,104 @@ func TestUnixUnlink(t *testing.T) {
|
|||
t.Skip("unix test")
|
||||
}
|
||||
name := testUnixAddr()
|
||||
l, err := Listen("unix", name)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
|
||||
listen := func(t *testing.T) *UnixListener {
|
||||
l, err := Listen("unix", name)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
return l.(*UnixListener)
|
||||
}
|
||||
if _, err := os.Stat(name); err != nil {
|
||||
t.Fatalf("cannot stat unix socket after ListenUnix: %v", err)
|
||||
checkExists := func(t *testing.T, desc string) {
|
||||
if _, err := os.Stat(name); err != nil {
|
||||
t.Fatalf("unix socket does not exist %s: %v", desc, err)
|
||||
}
|
||||
}
|
||||
f, _ := l.(*UnixListener).File()
|
||||
l1, err := FileListener(f)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, err := os.Stat(name); err != nil {
|
||||
t.Fatalf("cannot stat unix socket after FileListener: %v", err)
|
||||
}
|
||||
if err := l1.Close(); err != nil {
|
||||
t.Fatalf("closing file listener: %v", err)
|
||||
}
|
||||
if _, err := os.Stat(name); err != nil {
|
||||
t.Fatalf("cannot stat unix socket after closing FileListener: %v", err)
|
||||
}
|
||||
f.Close()
|
||||
if _, err := os.Stat(name); err != nil {
|
||||
t.Fatalf("cannot stat unix socket after closing FileListener and fd: %v", err)
|
||||
}
|
||||
l.Close()
|
||||
if _, err := os.Stat(name); err == nil {
|
||||
t.Fatal("closing unix listener did not remove unix socket")
|
||||
checkNotExists := func(t *testing.T, desc string) {
|
||||
if _, err := os.Stat(name); err == nil {
|
||||
t.Fatalf("unix socket does exist %s: %v", desc, err)
|
||||
}
|
||||
}
|
||||
|
||||
// Listener should remove on close.
|
||||
t.Run("Listen", func(t *testing.T) {
|
||||
l := listen(t)
|
||||
checkExists(t, "after Listen")
|
||||
l.Close()
|
||||
checkNotExists(t, "after Listener close")
|
||||
})
|
||||
|
||||
// FileListener should not.
|
||||
t.Run("FileListener", func(t *testing.T) {
|
||||
l := listen(t)
|
||||
f, _ := l.File()
|
||||
l1, _ := FileListener(f)
|
||||
checkExists(t, "after FileListener")
|
||||
f.Close()
|
||||
checkExists(t, "after File close")
|
||||
l1.Close()
|
||||
checkExists(t, "after FileListener close")
|
||||
l.Close()
|
||||
checkNotExists(t, "after Listener close")
|
||||
})
|
||||
|
||||
// Only first call to l.Close should remove.
|
||||
t.Run("SecondClose", func(t *testing.T) {
|
||||
l := listen(t)
|
||||
checkExists(t, "after Listen")
|
||||
l.Close()
|
||||
checkNotExists(t, "after Listener close")
|
||||
if err := ioutil.WriteFile(name, []byte("hello world"), 0666); err != nil {
|
||||
t.Fatalf("cannot recreate socket file: %v", err)
|
||||
}
|
||||
checkExists(t, "after writing temp file")
|
||||
l.Close()
|
||||
checkExists(t, "after second Listener close")
|
||||
os.Remove(name)
|
||||
})
|
||||
|
||||
// SetUnlinkOnClose should do what it says.
|
||||
|
||||
t.Run("Listen/SetUnlinkOnClose(true)", func(t *testing.T) {
|
||||
l := listen(t)
|
||||
checkExists(t, "after Listen")
|
||||
l.SetUnlinkOnClose(true)
|
||||
l.Close()
|
||||
checkNotExists(t, "after Listener close")
|
||||
})
|
||||
|
||||
t.Run("Listen/SetUnlinkOnClose(false)", func(t *testing.T) {
|
||||
l := listen(t)
|
||||
checkExists(t, "after Listen")
|
||||
l.SetUnlinkOnClose(false)
|
||||
l.Close()
|
||||
checkExists(t, "after Listener close")
|
||||
os.Remove(name)
|
||||
})
|
||||
|
||||
t.Run("FileListener/SetUnlinkOnClose(true)", func(t *testing.T) {
|
||||
l := listen(t)
|
||||
f, _ := l.File()
|
||||
l1, _ := FileListener(f)
|
||||
checkExists(t, "after FileListener")
|
||||
l1.(*UnixListener).SetUnlinkOnClose(true)
|
||||
f.Close()
|
||||
checkExists(t, "after File close")
|
||||
l1.Close()
|
||||
checkNotExists(t, "after FileListener close")
|
||||
l.Close()
|
||||
})
|
||||
|
||||
t.Run("FileListener/SetUnlinkOnClose(false)", func(t *testing.T) {
|
||||
l := listen(t)
|
||||
f, _ := l.File()
|
||||
l1, _ := FileListener(f)
|
||||
checkExists(t, "after FileListener")
|
||||
l1.(*UnixListener).SetUnlinkOnClose(false)
|
||||
f.Close()
|
||||
checkExists(t, "after File close")
|
||||
l1.Close()
|
||||
checkExists(t, "after FileListener close")
|
||||
l.Close()
|
||||
})
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue