Similar changes should occur to other tests exporting StatusWriters.
}
func TestSetMaxEstablishedConn(t *testing.T) {
+ ss := testutil.NewStatusServer(t)
+ defer ss.Close()
var tts []*Torrent
ih := testutil.GreetingMetaInfo().HashInfoBytes()
for i := range iter.N(3) {
defer cl.Close()
tt, _ := cl.AddTorrentInfoHash(ih)
tt.SetMaxEstablishedConns(2)
- testutil.ExportStatusWriter(cl, fmt.Sprintf("%d", i))
+ ss.HandleStatusWriter(cl, fmt.Sprintf("/%d", i))
tts = append(tts, tt)
}
addPeers := func() {
- for i, tt := range tts {
- for _, _tt := range tts[:i] {
+ for _, tt := range tts {
+ for _, _tt := range tts {
+ // if tt != _tt {
addClientPeer(tt, _tt.cl)
+ // }
}
}
}
waitTotalConns := func(num int) {
for totalConns(tts) != num {
+ addPeers()
time.Sleep(time.Millisecond)
}
}
import (
"fmt"
"io"
+ "log"
+ "net"
"net/http"
+ "testing"
"github.com/anacrolix/missinggo"
+ "github.com/stretchr/testify/require"
)
type StatusWriter interface {
WriteStatus(io.Writer)
}
+// Use StatusServer instead to allow -count > 1 when testing.
func ExportStatusWriter(sw StatusWriter, path string) {
http.HandleFunc(
fmt.Sprintf("/%s/%s", missinggo.GetTestName(), path),
},
)
}
+
+type StatusServer struct {
+ sm http.ServeMux
+ l net.Listener
+}
+
+func NewStatusServer(t *testing.T) (ret *StatusServer) {
+ l, err := net.Listen("tcp", "localhost:0")
+ require.NoError(t, err)
+ ret = &StatusServer{
+ l: l,
+ }
+ log.Printf("serving status at %q", l.Addr())
+ go http.Serve(l, &ret.sm)
+ return
+}
+
+func (me *StatusServer) HandleStatusWriter(sw StatusWriter, path string) {
+ me.sm.HandleFunc(path, func(w http.ResponseWriter, r *http.Request) {
+ sw.WriteStatus(w)
+ })
+}
+
+func (me StatusServer) Close() {
+ me.l.Close()
+}
var pkgTempDir string
func init() {
- log.SetFlags(log.LstdFlags | log.Llongfile)
+ log.SetFlags(log.LstdFlags | log.Lshortfile)
var err error
pkgTempDir, err = ioutil.TempDir("", "torrent.test")
if err != nil {