internal/lsp/lsprpc: update binder tests to handle forwarding

Update the new binder tests to run both with a standalone server, and
with a forwarding chain.

Make a few superficial improvements along the way as well.

Change-Id: Icd197698093a3f6149ab58171806b2388ed75b7f
Reviewed-on: https://go-review.googlesource.com/c/tools/+/321134
Trust: Robert Findley <rfindley@google.com>
Run-TryBot: Robert Findley <rfindley@google.com>
gopls-CI: kokoro <noreply+kokoro@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Ian Cottrell <iancottrell@google.com>
This commit is contained in:
Rob Findley 2021-05-19 11:51:44 -04:00 • committed by Robert Findley
commit 280ef9a723
5 changed files with 9 additions and 8 deletions

View file

@ -112,6 +112,7 @@ func newConnection(ctx context.Context, rwc io.ReadWriteCloser, binder Binder) (
go c.readIncoming(ctx, reader, readToQueue) go c.readIncoming(ctx, reader, readToQueue)
go c.manageQueue(ctx, options.Preempter, readToQueue, queueToDeliver) go c.manageQueue(ctx, options.Preempter, readToQueue, queueToDeliver)
go c.deliverMessages(ctx, options.Handler, queueToDeliver) go c.deliverMessages(ctx, options.Handler, queueToDeliver)
// releaseing the writer must be the last thing we do in case any requests // releaseing the writer must be the last thing we do in case any requests
// are blocked waiting for the connection to be ready // are blocked waiting for the connection to be ready
c.writerBox <- options.Framer.Writer(rwc) c.writerBox <- options.Framer.Writer(rwc)

View file

@ -57,11 +57,11 @@ func (f HandlerFunc) Handle(ctx context.Context, req *Request) (interface{}, err
return f(ctx, req) return f(ctx, req)
} }
// async is a small helper for things with an asynchronous result that you can // async is a small helper for operations with an asynchronous result that you
// wait for. // can wait for.
type async struct { type async struct {
ready chan struct{} ready chan struct{} // signals that the operation has completed
errBox chan error errBox chan error // guards the operation result
} }
func newAsync() *async { func newAsync() *async {

View file

@ -126,7 +126,7 @@ func TestConnectionHeader(t *testing.T) {
func testConnection(t *testing.T, framer jsonrpc2.Framer) { func testConnection(t *testing.T, framer jsonrpc2.Framer) {
stacktest.NoLeak(t) stacktest.NoLeak(t)
ctx := eventtest.NewContext(context.Background(), t) ctx := eventtest.NewContext(context.Background(), t)
listener, err := jsonrpc2.NetPipe(ctx) listener, err := jsonrpc2.NetPipeListener(ctx)
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }

View file

@ -80,11 +80,11 @@ func (n *netDialer) Dial(ctx context.Context) (io.ReadWriteCloser, error) {
return n.dialer.DialContext(ctx, n.network, n.address) return n.dialer.DialContext(ctx, n.network, n.address)
} }
// NetPipe returns a new Listener that listens using net.Pipe. // NetPipeListener returns a new Listener that listens using net.Pipe.
// It is only possibly to connect to it using the Dialier returned by the // It is only possibly to connect to it using the Dialier returned by the
// Dialer method, each call to that method will generate a new pipe the other // Dialer method, each call to that method will generate a new pipe the other
// side of which will be returnd from the Accept call. // side of which will be returnd from the Accept call.
func NetPipe(ctx context.Context) (Listener, error) { func NetPipeListener(ctx context.Context) (Listener, error) {
return &netPiper{ return &netPiper{
done: make(chan struct{}), done: make(chan struct{}),
dialed: make(chan io.ReadWriteCloser), dialed: make(chan io.ReadWriteCloser),

View file

@ -89,7 +89,7 @@ func TestServe(t *testing.T) {
return jsonrpc2.NetListener(ctx, "tcp", "localhost:0", jsonrpc2.NetListenOptions{}) return jsonrpc2.NetListener(ctx, "tcp", "localhost:0", jsonrpc2.NetListenOptions{})
}}, }},
{"pipe", func(ctx context.Context) (jsonrpc2.Listener, error) { {"pipe", func(ctx context.Context) (jsonrpc2.Listener, error) {
return jsonrpc2.NetPipe(ctx) return jsonrpc2.NetPipeListener(ctx)
}}, }},
} }