proxyd: Delete bad test
This test was originally checking for a panic in the websocket code. However, we have since re-architected this code and have coverage for this issue elsewhere. Therefore, this test is now superfluous and can be removed. It causes a lot of spam in the logs, and makes debugging other tests harder.
This commit is contained in:
parent
fef2f0f965
commit
e84a39a28f
@ -3,91 +3,15 @@ package integration_tests
|
|||||||
import (
|
import (
|
||||||
"os"
|
"os"
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
|
||||||
"sync/atomic"
|
"sync/atomic"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/ethereum-optimism/optimism/proxyd"
|
"github.com/ethereum-optimism/optimism/proxyd"
|
||||||
"github.com/ethereum/go-ethereum/log"
|
|
||||||
"github.com/gorilla/websocket"
|
"github.com/gorilla/websocket"
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
)
|
)
|
||||||
|
|
||||||
// TestConcurrentWSPanic tests for a panic in the websocket proxy
|
|
||||||
// that occurred when messages were sent from the upstream to the
|
|
||||||
// client right after the client sent an invalid request.
|
|
||||||
func TestConcurrentWSPanic(t *testing.T) {
|
|
||||||
var backendToProxyConn *websocket.Conn
|
|
||||||
var setOnce sync.Once
|
|
||||||
|
|
||||||
readyCh := make(chan struct{}, 1)
|
|
||||||
quitC := make(chan struct{})
|
|
||||||
|
|
||||||
// Pull out the backend -> proxyd conn so that we can spam it directly.
|
|
||||||
// Use a sync.Once to make sure we only do that once, for the first
|
|
||||||
// connection.
|
|
||||||
backend := NewMockWSBackend(func(conn *websocket.Conn) {
|
|
||||||
setOnce.Do(func() {
|
|
||||||
backendToProxyConn = conn
|
|
||||||
readyCh <- struct{}{}
|
|
||||||
})
|
|
||||||
}, nil, nil)
|
|
||||||
defer backend.Close()
|
|
||||||
|
|
||||||
require.NoError(t, os.Setenv("GOOD_BACKEND_RPC_URL", backend.URL()))
|
|
||||||
|
|
||||||
config := ReadConfig("ws")
|
|
||||||
_, shutdown, err := proxyd.Start(config)
|
|
||||||
require.NoError(t, err)
|
|
||||||
client, err := NewProxydWSClient("ws://127.0.0.1:8546", nil, nil)
|
|
||||||
require.NoError(t, err)
|
|
||||||
defer shutdown()
|
|
||||||
|
|
||||||
// suppress tons of log messages
|
|
||||||
oldHandler := log.Root().GetHandler()
|
|
||||||
log.Root().SetHandler(log.DiscardHandler())
|
|
||||||
defer func() {
|
|
||||||
log.Root().SetHandler(oldHandler)
|
|
||||||
}()
|
|
||||||
|
|
||||||
<-readyCh
|
|
||||||
|
|
||||||
var wg sync.WaitGroup
|
|
||||||
wg.Add(2)
|
|
||||||
// spam messages
|
|
||||||
go func() {
|
|
||||||
for {
|
|
||||||
select {
|
|
||||||
case <-quitC:
|
|
||||||
wg.Done()
|
|
||||||
return
|
|
||||||
default:
|
|
||||||
_ = backendToProxyConn.WriteMessage(websocket.TextMessage, []byte("garbage"))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
|
|
||||||
// spam invalid RPCs
|
|
||||||
go func() {
|
|
||||||
for {
|
|
||||||
select {
|
|
||||||
case <-quitC:
|
|
||||||
wg.Done()
|
|
||||||
return
|
|
||||||
default:
|
|
||||||
_ = client.WriteMessage(websocket.TextMessage, []byte("{\"id\": 1, \"method\": \"eth_foo\", \"params\": [\"newHeads\"]}"))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
|
|
||||||
// 1 second is enough to trigger the panic due to
|
|
||||||
// concurrent write to websocket connection
|
|
||||||
time.Sleep(time.Second)
|
|
||||||
close(quitC)
|
|
||||||
wg.Wait()
|
|
||||||
}
|
|
||||||
|
|
||||||
type backendHandler struct {
|
type backendHandler struct {
|
||||||
msgCB atomic.Value
|
msgCB atomic.Value
|
||||||
closeCB atomic.Value
|
closeCB atomic.Value
|
||||||
|
Loading…
Reference in New Issue
Block a user