Initial commit
This commit is contained in:
		
							
								
								
									
										33
									
								
								lib/testutil/limitwriter.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								lib/testutil/limitwriter.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,33 @@ | ||||
| package testutil | ||||
|  | ||||
| import ( | ||||
| 	"io" | ||||
| 	"os" | ||||
| ) | ||||
|  | ||||
| func NewLimitWriter(w io.Writer, limit int) *LimitWriter { | ||||
| 	return &LimitWriter{ | ||||
| 		w:     w, | ||||
| 		limit: limit, | ||||
| 	} | ||||
| } | ||||
|  | ||||
| type LimitWriter struct { | ||||
| 	w       io.Writer | ||||
| 	limit   int | ||||
| 	written int | ||||
| } | ||||
|  | ||||
| func (lw *LimitWriter) Write(buf []byte) (int, error) { | ||||
| 	n, err := lw.w.Write(buf) | ||||
| 	if err != nil { | ||||
| 		return n, err | ||||
| 	} | ||||
|  | ||||
| 	lw.written += n | ||||
| 	if lw.written > lw.limit { | ||||
| 		return n, os.ErrClosed | ||||
| 	} | ||||
|  | ||||
| 	return n, nil | ||||
| } | ||||
							
								
								
									
										79
									
								
								lib/testutil/testconn.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										79
									
								
								lib/testutil/testconn.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,79 @@ | ||||
| package testutil | ||||
|  | ||||
| import ( | ||||
| 	"net" | ||||
| 	"sync" | ||||
| 	"time" | ||||
| ) | ||||
|  | ||||
| type Network struct { | ||||
| 	lock sync.Mutex | ||||
| 	// Current connections. | ||||
| 	cConn net.Conn | ||||
| 	sConn net.Conn | ||||
|  | ||||
| 	acceptQ chan net.Conn | ||||
| } | ||||
|  | ||||
| func NewNetwork() *Network { | ||||
| 	return &Network{ | ||||
| 		acceptQ: make(chan net.Conn, 1), | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func (n *Network) Dial() net.Conn { | ||||
| 	cc, sc := net.Pipe() | ||||
| 	func() { | ||||
| 		n.lock.Lock() | ||||
| 		defer n.lock.Unlock() | ||||
| 		if n.cConn != nil { | ||||
| 			n.cConn.Close() | ||||
| 			n.cConn = nil | ||||
| 		} | ||||
| 		select { | ||||
| 		case n.acceptQ <- sc: | ||||
| 			n.cConn = cc | ||||
| 		default: | ||||
| 			cc = nil | ||||
| 		} | ||||
| 	}() | ||||
| 	return cc | ||||
| } | ||||
|  | ||||
| func (n *Network) Accept() net.Conn { | ||||
| 	var sc net.Conn | ||||
| 	select { | ||||
| 	case sc = <-n.acceptQ: | ||||
| 	case <-time.After(time.Second): | ||||
| 		return nil | ||||
| 	} | ||||
|  | ||||
| 	func() { | ||||
| 		n.lock.Lock() | ||||
| 		defer n.lock.Unlock() | ||||
| 		if n.sConn != nil { | ||||
| 			n.sConn.Close() | ||||
| 			n.sConn = nil | ||||
| 		} | ||||
| 		n.sConn = sc | ||||
| 	}() | ||||
| 	return sc | ||||
| } | ||||
|  | ||||
| func (n *Network) CloseClient() { | ||||
| 	n.lock.Lock() | ||||
| 	defer n.lock.Unlock() | ||||
| 	if n.cConn != nil { | ||||
| 		n.cConn.Close() | ||||
| 		n.cConn = nil | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func (n *Network) CloseServer() { | ||||
| 	n.lock.Lock() | ||||
| 	defer n.lock.Unlock() | ||||
| 	if n.sConn != nil { | ||||
| 		n.sConn.Close() | ||||
| 		n.sConn = nil | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										10
									
								
								lib/testutil/util.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								lib/testutil/util.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | ||||
| package testutil | ||||
|  | ||||
| import "testing" | ||||
|  | ||||
| func AssertNotNil(t *testing.T, err error) { | ||||
| 	t.Helper() | ||||
| 	if err != nil { | ||||
| 		t.Fatal(err) | ||||
| 	} | ||||
| } | ||||
		Reference in New Issue
	
	Block a user