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  }