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 }