mirror of https://github.com/libp2p/go-libp2p.git
Browse Source
* Don't limit message sizes in the websocket reader * Remove fmt.println * Update p2p/transport/websocket/listener.go Co-authored-by: Marten Seemann <martenseemann@gmail.com> * Update p2p/transport/websocket/listener.go Co-authored-by: Marten Seemann <martenseemann@gmail.com> --------- Co-authored-by: Marten Seemann <martenseemann@gmail.com>release-v0263
Marco Munizaga
2 years ago
4 changed files with 74 additions and 1 deletions
@ -0,0 +1,66 @@ |
|||||
|
package websocket_test |
||||
|
|
||||
|
import ( |
||||
|
"context" |
||||
|
"io" |
||||
|
"testing" |
||||
|
|
||||
|
"github.com/libp2p/go-libp2p" |
||||
|
"github.com/libp2p/go-libp2p/core/network" |
||||
|
"github.com/libp2p/go-libp2p/core/peer" |
||||
|
"github.com/stretchr/testify/require" |
||||
|
) |
||||
|
|
||||
|
func TestReadLimit(t *testing.T) { |
||||
|
h1, err := libp2p.New(libp2p.ListenAddrStrings("/ip4/127.0.0.1/tcp/0/ws")) |
||||
|
require.NoError(t, err) |
||||
|
defer h1.Close() |
||||
|
|
||||
|
ctx := context.Background() |
||||
|
h2, err := libp2p.New(libp2p.NoListenAddrs) |
||||
|
require.NoError(t, err) |
||||
|
defer h2.Close() |
||||
|
|
||||
|
err = h2.Connect(ctx, peer.AddrInfo{ID: h1.ID(), Addrs: h1.Addrs()}) |
||||
|
require.NoError(t, err) |
||||
|
|
||||
|
buf := make([]byte, 256<<10) |
||||
|
buf2 := make([]byte, 256<<10) |
||||
|
copyBuf := make([]byte, 8<<10) |
||||
|
|
||||
|
errCh := make(chan error, 1) |
||||
|
// TODO perf would be perfect here, but not yet merged.
|
||||
|
h1.SetStreamHandler("/big-blocks", func(s network.Stream) { |
||||
|
defer s.Close() |
||||
|
_, err := io.CopyBuffer(io.Discard, s, copyBuf) |
||||
|
if err != nil { |
||||
|
errCh <- err |
||||
|
return |
||||
|
} |
||||
|
_, err = s.Write(buf) |
||||
|
if err != nil { |
||||
|
errCh <- err |
||||
|
return |
||||
|
} |
||||
|
errCh <- nil |
||||
|
}) |
||||
|
|
||||
|
allocs := testing.AllocsPerRun(100, func() { |
||||
|
s, err := h2.NewStream(ctx, h1.ID(), "/big-blocks") |
||||
|
require.NoError(t, err) |
||||
|
defer s.Close() |
||||
|
_, err = s.Write(buf2) |
||||
|
require.NoError(t, err) |
||||
|
require.NoError(t, s.CloseWrite()) |
||||
|
|
||||
|
_, err = io.ReadFull(s, buf2) |
||||
|
require.NoError(t, err) |
||||
|
|
||||
|
_, err = s.Read([]byte{0}) |
||||
|
require.ErrorIs(t, err, io.EOF) |
||||
|
require.NoError(t, <-errCh) |
||||
|
}) |
||||
|
|
||||
|
// Make sure we aren't doing some crazy allocs when transferring big blocks
|
||||
|
require.Less(t, allocs, 8*1024.0) |
||||
|
} |
Loading…
Reference in new issue