/usr/share/gocode/src/github.com/influxdata/influxdb/services/httpd/listen_test.go is in golang-github-influxdb-influxdb-dev 1.0.2+dfsg1-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 | package httpd_test
import (
"io"
"net"
"sync"
"testing"
"time"
"github.com/influxdata/influxdb/services/httpd"
)
type fakeListener struct {
AcceptFn func() (net.Conn, error)
}
func (l *fakeListener) Accept() (net.Conn, error) {
if l.AcceptFn != nil {
return l.AcceptFn()
}
return &fakeConn{}, nil
}
func (*fakeListener) Close() error { return nil }
func (*fakeListener) Addr() net.Addr { return nil }
type fakeConn struct {
closed bool
}
func (*fakeConn) Read([]byte) (int, error) { return 0, io.EOF }
func (*fakeConn) Write(b []byte) (int, error) { return len(b), nil }
func (c *fakeConn) Close() error {
c.closed = true
return nil
}
func (*fakeConn) LocalAddr() net.Addr { return nil }
func (*fakeConn) RemoteAddr() net.Addr { return nil }
func (*fakeConn) SetDeadline(time.Time) error { return nil }
func (*fakeConn) SetReadDeadline(time.Time) error { return nil }
func (*fakeConn) SetWriteDeadline(time.Time) error { return nil }
func TestLimitListener(t *testing.T) {
conns := make(chan net.Conn, 2)
l := httpd.LimitListener(&fakeListener{
AcceptFn: func() (net.Conn, error) {
select {
case c := <-conns:
if c != nil {
return c, nil
}
default:
}
return nil, io.EOF
},
}, 1)
c1, c2 := &fakeConn{}, &fakeConn{}
conns <- c1
conns <- c2
var c net.Conn
var err error
if c, err = l.Accept(); err != nil {
t.Fatalf("expected accept to succeed: %s", err)
}
if _, err = l.Accept(); err != io.EOF {
t.Fatalf("expected eof, got %s", err)
} else if !c2.closed {
t.Fatalf("expected connection to be automatically closed")
}
c.Close()
conns <- &fakeConn{}
if _, err = l.Accept(); err != nil {
t.Fatalf("expeced accept to succeed: %s", err)
}
}
func BenchmarkLimitListener(b *testing.B) {
var wg sync.WaitGroup
wg.Add(b.N)
l := httpd.LimitListener(&fakeListener{}, b.N)
for i := 0; i < b.N; i++ {
go func() {
c, err := l.Accept()
if err != nil {
b.Fatal(err)
}
c.Close()
wg.Done()
}()
}
wg.Wait()
}
|