github.com/Finschia/finschia-sdk@v0.48.1/client/grpc_query_test.go (about)

     1  //go:build norace
     2  // +build norace
     3  
     4  package client_test
     5  
     6  import (
     7  	"context"
     8  	"fmt"
     9  	"testing"
    10  
    11  	"github.com/stretchr/testify/suite"
    12  	"google.golang.org/grpc"
    13  	"google.golang.org/grpc/metadata"
    14  
    15  	"github.com/Finschia/finschia-sdk/testutil/network"
    16  	"github.com/Finschia/finschia-sdk/testutil/testdata"
    17  	sdk "github.com/Finschia/finschia-sdk/types"
    18  	grpctypes "github.com/Finschia/finschia-sdk/types/grpc"
    19  	banktypes "github.com/Finschia/finschia-sdk/x/bank/types"
    20  )
    21  
    22  type IntegrationTestSuite struct {
    23  	suite.Suite
    24  
    25  	network *network.Network
    26  }
    27  
    28  func (s *IntegrationTestSuite) SetupSuite() {
    29  	s.T().Log("setting up integration test suite")
    30  
    31  	s.network = network.New(s.T(), network.DefaultConfig())
    32  	s.Require().NotNil(s.network)
    33  
    34  	_, err := s.network.WaitForHeight(2)
    35  	s.Require().NoError(err)
    36  }
    37  
    38  func (s *IntegrationTestSuite) TearDownSuite() {
    39  	s.T().Log("tearing down integration test suite")
    40  	s.network.Cleanup()
    41  }
    42  
    43  func (s *IntegrationTestSuite) TestGRPCQuery() {
    44  	val0 := s.network.Validators[0]
    45  
    46  	// gRPC query to test service should work
    47  	testClient := testdata.NewQueryClient(val0.ClientCtx)
    48  	testRes, err := testClient.Echo(context.Background(), &testdata.EchoRequest{Message: "hello"})
    49  	s.Require().NoError(err)
    50  	s.Require().Equal("hello", testRes.Message)
    51  
    52  	// gRPC query to bank service should work
    53  	denom := fmt.Sprintf("%stoken", val0.Moniker)
    54  	bankClient := banktypes.NewQueryClient(val0.ClientCtx)
    55  	var header metadata.MD
    56  	bankRes, err := bankClient.Balance(
    57  		context.Background(),
    58  		&banktypes.QueryBalanceRequest{Address: val0.Address.String(), Denom: denom},
    59  		grpc.Header(&header), // Also fetch grpc header
    60  	)
    61  	s.Require().NoError(err)
    62  	s.Require().Equal(
    63  		sdk.NewCoin(denom, s.network.Config.AccountTokens),
    64  		*bankRes.GetBalance(),
    65  	)
    66  	blockHeight := header.Get(grpctypes.GRPCBlockHeightHeader)
    67  	s.Require().NotEmpty(blockHeight[0]) // Should contain the block height
    68  
    69  	// Request metadata should work
    70  	val0.ClientCtx = val0.ClientCtx.WithHeight(1) // We set clientCtx to height 1
    71  	bankClient = banktypes.NewQueryClient(val0.ClientCtx)
    72  	bankRes, err = bankClient.Balance(
    73  		context.Background(),
    74  		&banktypes.QueryBalanceRequest{Address: val0.Address.String(), Denom: denom},
    75  		grpc.Header(&header),
    76  	)
    77  	blockHeight = header.Get(grpctypes.GRPCBlockHeightHeader)
    78  	s.Require().Equal([]string{"1"}, blockHeight)
    79  }
    80  
    81  func TestIntegrationTestSuite(t *testing.T) {
    82  	suite.Run(t, new(IntegrationTestSuite))
    83  }