Files
go-libp2p/p2p/test/websocket/websocket_test.go
Marco Munizaga 2fe6600ca4 websocket: Don't limit message sizes in the websocket reader (#2193)
* 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>
2023-03-16 16:43:20 -07:00

67 lines
1.5 KiB
Go

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)
}