OSDN Git Service

Hulk did something
[bytom/vapor.git] / vendor / golang.org / x / net / nettest / conntest_test.go
diff --git a/vendor/golang.org/x/net/nettest/conntest_test.go b/vendor/golang.org/x/net/nettest/conntest_test.go
new file mode 100644 (file)
index 0000000..9f9453f
--- /dev/null
@@ -0,0 +1,76 @@
+// Copyright 2016 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// +build go1.8
+
+package nettest
+
+import (
+       "net"
+       "os"
+       "runtime"
+       "testing"
+
+       "golang.org/x/net/internal/nettest"
+)
+
+func TestTestConn(t *testing.T) {
+       tests := []struct{ name, network string }{
+               {"TCP", "tcp"},
+               {"UnixPipe", "unix"},
+               {"UnixPacketPipe", "unixpacket"},
+       }
+
+       for _, tt := range tests {
+               t.Run(tt.name, func(t *testing.T) {
+                       if !nettest.TestableNetwork(tt.network) {
+                               t.Skipf("not supported on %s", runtime.GOOS)
+                       }
+
+                       mp := func() (c1, c2 net.Conn, stop func(), err error) {
+                               ln, err := nettest.NewLocalListener(tt.network)
+                               if err != nil {
+                                       return nil, nil, nil, err
+                               }
+
+                               // Start a connection between two endpoints.
+                               var err1, err2 error
+                               done := make(chan bool)
+                               go func() {
+                                       c2, err2 = ln.Accept()
+                                       close(done)
+                               }()
+                               c1, err1 = net.Dial(ln.Addr().Network(), ln.Addr().String())
+                               <-done
+
+                               stop = func() {
+                                       if err1 == nil {
+                                               c1.Close()
+                                       }
+                                       if err2 == nil {
+                                               c2.Close()
+                                       }
+                                       ln.Close()
+                                       switch tt.network {
+                                       case "unix", "unixpacket":
+                                               os.Remove(ln.Addr().String())
+                                       }
+                               }
+
+                               switch {
+                               case err1 != nil:
+                                       stop()
+                                       return nil, nil, nil, err1
+                               case err2 != nil:
+                                       stop()
+                                       return nil, nil, nil, err2
+                               default:
+                                       return c1, c2, stop, nil
+                               }
+                       }
+
+                       TestConn(t, mp)
+               })
+       }
+}