Home | History | Annotate | Download | only in net
      1 // Copyright 2015 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 // +build darwin dragonfly freebsd linux nacl netbsd openbsd solaris
      6 
      7 package net
      8 
      9 var (
     10 	// Placeholders for saving original socket system calls.
     11 	origSocket        = socketFunc
     12 	origClose         = closeFunc
     13 	origConnect       = connectFunc
     14 	origListen        = listenFunc
     15 	origAccept        = acceptFunc
     16 	origGetsockoptInt = getsockoptIntFunc
     17 
     18 	extraTestHookInstallers   []func()
     19 	extraTestHookUninstallers []func()
     20 )
     21 
     22 func installTestHooks() {
     23 	socketFunc = sw.Socket
     24 	closeFunc = sw.Close
     25 	connectFunc = sw.Connect
     26 	listenFunc = sw.Listen
     27 	acceptFunc = sw.Accept
     28 	getsockoptIntFunc = sw.GetsockoptInt
     29 
     30 	for _, fn := range extraTestHookInstallers {
     31 		fn()
     32 	}
     33 }
     34 
     35 func uninstallTestHooks() {
     36 	socketFunc = origSocket
     37 	closeFunc = origClose
     38 	connectFunc = origConnect
     39 	listenFunc = origListen
     40 	acceptFunc = origAccept
     41 	getsockoptIntFunc = origGetsockoptInt
     42 
     43 	for _, fn := range extraTestHookUninstallers {
     44 		fn()
     45 	}
     46 }
     47 
     48 // forceCloseSockets must be called only from TestMain.
     49 func forceCloseSockets() {
     50 	for s := range sw.Sockets() {
     51 		closeFunc(s)
     52 	}
     53 }
     54