github.com/ava-labs/avalanchego@v1.11.11/indexer/client_test.go (about)

     1  // Copyright (C) 2019-2024, Ava Labs, Inc. All rights reserved.
     2  // See the file LICENSE for licensing terms.
     3  
     4  package indexer
     5  
     6  import (
     7  	"context"
     8  	"testing"
     9  
    10  	"github.com/stretchr/testify/require"
    11  
    12  	"github.com/ava-labs/avalanchego/ids"
    13  	"github.com/ava-labs/avalanchego/utils"
    14  	"github.com/ava-labs/avalanchego/utils/formatting"
    15  	"github.com/ava-labs/avalanchego/utils/json"
    16  	"github.com/ava-labs/avalanchego/utils/rpc"
    17  )
    18  
    19  type mockClient struct {
    20  	require        *require.Assertions
    21  	expectedMethod string
    22  	onSendRequestF func(reply interface{}) error
    23  }
    24  
    25  func (mc *mockClient) SendRequest(_ context.Context, method string, _ interface{}, reply interface{}, _ ...rpc.Option) error {
    26  	mc.require.Equal(mc.expectedMethod, method)
    27  	return mc.onSendRequestF(reply)
    28  }
    29  
    30  func TestIndexClient(t *testing.T) {
    31  	require := require.New(t)
    32  	client := client{}
    33  	{
    34  		// Test GetIndex
    35  		client.requester = &mockClient{
    36  			require:        require,
    37  			expectedMethod: "index.getIndex",
    38  			onSendRequestF: func(reply interface{}) error {
    39  				*(reply.(*GetIndexResponse)) = GetIndexResponse{Index: 5}
    40  				return nil
    41  			},
    42  		}
    43  		index, err := client.GetIndex(context.Background(), ids.Empty)
    44  		require.NoError(err)
    45  		require.Equal(uint64(5), index)
    46  	}
    47  	{
    48  		// Test GetLastAccepted
    49  		id := ids.GenerateTestID()
    50  		bytes := utils.RandomBytes(10)
    51  		bytesStr, err := formatting.Encode(formatting.Hex, bytes)
    52  		require.NoError(err)
    53  		client.requester = &mockClient{
    54  			require:        require,
    55  			expectedMethod: "index.getLastAccepted",
    56  			onSendRequestF: func(reply interface{}) error {
    57  				*(reply.(*FormattedContainer)) = FormattedContainer{
    58  					ID:    id,
    59  					Bytes: bytesStr,
    60  					Index: json.Uint64(10),
    61  				}
    62  				return nil
    63  			},
    64  		}
    65  		container, index, err := client.GetLastAccepted(context.Background())
    66  		require.NoError(err)
    67  		require.Equal(id, container.ID)
    68  		require.Equal(bytes, container.Bytes)
    69  		require.Equal(uint64(10), index)
    70  	}
    71  	{
    72  		// Test GetContainerRange
    73  		id := ids.GenerateTestID()
    74  		bytes := utils.RandomBytes(10)
    75  		bytesStr, err := formatting.Encode(formatting.Hex, bytes)
    76  		require.NoError(err)
    77  		client.requester = &mockClient{
    78  			require:        require,
    79  			expectedMethod: "index.getContainerRange",
    80  			onSendRequestF: func(reply interface{}) error {
    81  				*(reply.(*GetContainerRangeResponse)) = GetContainerRangeResponse{Containers: []FormattedContainer{{
    82  					ID:    id,
    83  					Bytes: bytesStr,
    84  				}}}
    85  				return nil
    86  			},
    87  		}
    88  		containers, err := client.GetContainerRange(context.Background(), 1, 10)
    89  		require.NoError(err)
    90  		require.Len(containers, 1)
    91  		require.Equal(id, containers[0].ID)
    92  		require.Equal(bytes, containers[0].Bytes)
    93  	}
    94  	{
    95  		// Test IsAccepted
    96  		client.requester = &mockClient{
    97  			require:        require,
    98  			expectedMethod: "index.isAccepted",
    99  			onSendRequestF: func(reply interface{}) error {
   100  				*(reply.(*IsAcceptedResponse)) = IsAcceptedResponse{IsAccepted: true}
   101  				return nil
   102  			},
   103  		}
   104  		isAccepted, err := client.IsAccepted(context.Background(), ids.Empty)
   105  		require.NoError(err)
   106  		require.True(isAccepted)
   107  	}
   108  	{
   109  		// Test GetContainerByID
   110  		id := ids.GenerateTestID()
   111  		bytes := utils.RandomBytes(10)
   112  		bytesStr, err := formatting.Encode(formatting.Hex, bytes)
   113  		require.NoError(err)
   114  		client.requester = &mockClient{
   115  			require:        require,
   116  			expectedMethod: "index.getContainerByID",
   117  			onSendRequestF: func(reply interface{}) error {
   118  				*(reply.(*FormattedContainer)) = FormattedContainer{
   119  					ID:    id,
   120  					Bytes: bytesStr,
   121  					Index: json.Uint64(10),
   122  				}
   123  				return nil
   124  			},
   125  		}
   126  		container, index, err := client.GetContainerByID(context.Background(), id)
   127  		require.NoError(err)
   128  		require.Equal(id, container.ID)
   129  		require.Equal(bytes, container.Bytes)
   130  		require.Equal(uint64(10), index)
   131  	}
   132  }