@@ -19,6 +19,7 @@ package rpc
1919import (
2020 "context"
2121 "encoding/json"
22+ "errors"
2223 "fmt"
2324 "math/rand"
2425 "net"
@@ -144,6 +145,53 @@ func TestClientBatchRequest(t *testing.T) {
144145 }
145146}
146147
148+ func TestClientBatchRequest_len (t * testing.T ) {
149+ b , err := json .Marshal ([]jsonrpcMessage {
150+ {Version : "2.0" , ID : json .RawMessage ("1" ), Method : "foo" , Result : json .RawMessage (`"0x1"` )},
151+ {Version : "2.0" , ID : json .RawMessage ("2" ), Method : "bar" , Result : json .RawMessage (`"0x2"` )},
152+ })
153+ if err != nil {
154+ t .Fatal ("failed to encode jsonrpc message:" , err )
155+ }
156+ s := httptest .NewServer (http .HandlerFunc (func (rw http.ResponseWriter , r * http.Request ) {
157+ _ , err := rw .Write (b )
158+ if err != nil {
159+ t .Error ("failed to write response:" , err )
160+ }
161+ }))
162+ t .Cleanup (s .Close )
163+
164+ client , err := Dial (s .URL )
165+ if err != nil {
166+ t .Fatal ("failed to dial test server:" , err )
167+ }
168+ defer client .Close ()
169+
170+ t .Run ("too-few" , func (t * testing.T ) {
171+ batch := []BatchElem {
172+ {Method : "foo" },
173+ {Method : "bar" },
174+ {Method : "baz" },
175+ }
176+ ctx , cancelFn := context .WithTimeout (context .Background (), time .Second )
177+ defer cancelFn ()
178+ if err := client .BatchCallContext (ctx , batch ); ! errors .Is (err , ErrBadResult ) {
179+ t .Errorf ("expected %q but got: %v" , ErrBadResult , err )
180+ }
181+ })
182+
183+ t .Run ("too-many" , func (t * testing.T ) {
184+ batch := []BatchElem {
185+ {Method : "foo" },
186+ }
187+ ctx , cancelFn := context .WithTimeout (context .Background (), time .Second )
188+ defer cancelFn ()
189+ if err := client .BatchCallContext (ctx , batch ); ! errors .Is (err , ErrBadResult ) {
190+ t .Errorf ("expected %q but got: %v" , ErrBadResult , err )
191+ }
192+ })
193+ }
194+
147195func TestClientNotify (t * testing.T ) {
148196 server := newTestServer ()
149197 defer server .Stop ()
0 commit comments