func TestCallbacksWork(t *testing.T) { fake := new(FakeStream) var sent int64 var recv int64 sentCB := func(n int64, proto protocol.ID, p peer.ID) { sent += n } recvCB := func(n int64, proto protocol.ID, p peer.ID) { recv += n } ms := newMeteredStream(fake, protocol.ID("TEST"), peer.ID("PEER"), recvCB, sentCB) toWrite := int64(100000) toRead := int64(100000) fake.ReadBuf = io.LimitReader(randbo.New(), toRead) writeData := io.LimitReader(randbo.New(), toWrite) n, err := io.Copy(ms, writeData) if err != nil { t.Fatal(err) } if n != toWrite { t.Fatal("incorrect write amount") } if toWrite != sent { t.Fatal("incorrectly reported writes", toWrite, sent) } n, err = io.Copy(ioutil.Discard, ms) if err != nil { t.Fatal(err) } if n != toRead { t.Fatal("incorrect read amount") } if toRead != recv { t.Fatal("incorrectly reported reads") } }
func TestEcho(t *testing.T) { a, b := net.Pipe() mpa := NewMultiplex(a, false) mpb := NewMultiplex(b, true) mes := make([]byte, 40960) rand.New().Read(mes) go func() { s, err := mpb.Accept() if err != nil { t.Fatal(err) } defer s.Close() io.Copy(s, s) }() s := mpa.NewStream() _, err := s.Write(mes) if err != nil { t.Fatal(err) } buf := make([]byte, len(mes)) n, err := io.ReadFull(s, buf) if err != nil { t.Fatal(err) } if n != len(mes) { t.Fatal("read wrong amount") } if err := arrComp(buf, mes); err != nil { t.Fatal(err) } s.Close() mpa.Close() mpb.Close() }