github.com/gnolang/gno@v0.0.0-20240520182011-228e9d0192ce/tm2/pkg/bft/rpc/lib/client/batch/batch_test.go (about) 1 package batch 2 3 import ( 4 "context" 5 "testing" 6 7 types "github.com/gnolang/gno/tm2/pkg/bft/rpc/lib/types" 8 "github.com/stretchr/testify/assert" 9 "github.com/stretchr/testify/require" 10 ) 11 12 // generateRequests generates dummy RPC requests 13 func generateRequests(t *testing.T, count int) types.RPCRequests { 14 t.Helper() 15 16 requests := make(types.RPCRequests, 0, count) 17 18 for i := 0; i < count; i++ { 19 requests = append(requests, types.RPCRequest{ 20 JSONRPC: "2.0", 21 ID: types.JSONRPCIntID(i), 22 }) 23 } 24 25 return requests 26 } 27 28 func TestBatch_AddRequest(t *testing.T) { 29 t.Parallel() 30 31 var ( 32 capturedSend types.RPCRequests 33 requests = generateRequests(t, 100) 34 35 mockClient = &mockClient{ 36 sendBatchFn: func(_ context.Context, requests types.RPCRequests) (types.RPCResponses, error) { 37 capturedSend = requests 38 39 responses := make(types.RPCResponses, len(requests)) 40 41 for index, request := range requests { 42 responses[index] = types.RPCResponse{ 43 JSONRPC: "2.0", 44 ID: request.ID, 45 } 46 } 47 48 return responses, nil 49 }, 50 } 51 ) 52 53 // Create the batch 54 b := NewBatch(mockClient) 55 56 // Add the requests 57 for _, request := range requests { 58 b.AddRequest(request) 59 } 60 61 // Make sure the count is correct 62 require.Equal(t, len(requests), b.Count()) 63 64 // Send the requests 65 responses, err := b.Send(context.Background()) 66 require.NoError(t, err) 67 68 // Make sure the correct requests were sent 69 assert.Equal(t, requests, capturedSend) 70 71 // Make sure the correct responses were returned 72 require.Len(t, responses, len(requests)) 73 74 for index, response := range responses { 75 assert.Equal(t, requests[index].ID, response.ID) 76 assert.Equal(t, requests[index].JSONRPC, response.JSONRPC) 77 assert.Nil(t, response.Result) 78 assert.Nil(t, response.Error) 79 } 80 81 // Make sure the batch has been cleared after sending 82 assert.Equal(t, b.Count(), 0) 83 } 84 85 func TestBatch_Clear(t *testing.T) { 86 t.Parallel() 87 88 requests := generateRequests(t, 100) 89 90 // Create the batch 91 b := NewBatch(nil) 92 93 // Add the requests 94 for _, request := range requests { 95 b.AddRequest(request) 96 } 97 98 // Clear the batch 99 require.EqualValues(t, len(requests), b.Clear()) 100 101 // Make sure the batch is cleared 102 require.Equal(t, b.Count(), 0) 103 }