github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/libs/ibc-go/modules/core/genesis_test.go (about)

     1  package ibc_test
     2  
     3  import (
     4  	"testing"
     5  
     6  	tmproto "github.com/fibonacci-chain/fbc/libs/tendermint/abci/types"
     7  	types2 "github.com/fibonacci-chain/fbc/libs/tendermint/types"
     8  
     9  	// tmproto "github.com/fibonacci-chain/fbc/libs/tendermint/proto/tendermint/types"
    10  	"github.com/stretchr/testify/suite"
    11  
    12  	ibc "github.com/fibonacci-chain/fbc/libs/ibc-go/modules/core"
    13  	clienttypes "github.com/fibonacci-chain/fbc/libs/ibc-go/modules/core/02-client/types"
    14  	connectiontypes "github.com/fibonacci-chain/fbc/libs/ibc-go/modules/core/03-connection/types"
    15  	channeltypes "github.com/fibonacci-chain/fbc/libs/ibc-go/modules/core/04-channel/types"
    16  	commitmenttypes "github.com/fibonacci-chain/fbc/libs/ibc-go/modules/core/23-commitment/types"
    17  	"github.com/fibonacci-chain/fbc/libs/ibc-go/modules/core/exported"
    18  	"github.com/fibonacci-chain/fbc/libs/ibc-go/modules/core/types"
    19  	ibctmtypes "github.com/fibonacci-chain/fbc/libs/ibc-go/modules/light-clients/07-tendermint/types"
    20  	localhosttypes "github.com/fibonacci-chain/fbc/libs/ibc-go/modules/light-clients/09-localhost/types"
    21  	ibctesting "github.com/fibonacci-chain/fbc/libs/ibc-go/testing"
    22  	"github.com/fibonacci-chain/fbc/libs/ibc-go/testing/simapp"
    23  )
    24  
    25  const (
    26  	connectionID  = "connection-0"
    27  	clientID      = "07-tendermint-0"
    28  	connectionID2 = "connection-1"
    29  	clientID2     = "07-tendermin-1"
    30  	localhostID   = exported.Localhost + "-1"
    31  
    32  	port1 = "firstport"
    33  	port2 = "secondport"
    34  
    35  	channel1 = "channel-0"
    36  	channel2 = "channel-1"
    37  )
    38  
    39  var clientHeight = clienttypes.NewHeight(0, 10)
    40  
    41  type IBCTestSuite struct {
    42  	suite.Suite
    43  
    44  	coordinator *ibctesting.Coordinator
    45  
    46  	chainA ibctesting.TestChainI
    47  	chainB ibctesting.TestChainI
    48  }
    49  
    50  // SetupTest creates a coordinator with 2 test chains.
    51  func (suite *IBCTestSuite) SetupTest() {
    52  	types2.UnittestOnlySetMilestoneVenus1Height(-1)
    53  	suite.coordinator = ibctesting.NewCoordinator(suite.T(), 2)
    54  
    55  	suite.chainA = suite.coordinator.GetChain(ibctesting.GetChainID(0))
    56  	suite.chainB = suite.coordinator.GetChain(ibctesting.GetChainID(1))
    57  }
    58  
    59  func TestIBCTestSuite(t *testing.T) {
    60  	suite.Run(t, new(IBCTestSuite))
    61  }
    62  
    63  func new02clientGenesisState(idcs []clienttypes.IdentifiedClientState,
    64  	css []clienttypes.ClientConsensusStates,
    65  	idgm []clienttypes.IdentifiedGenesisMetadata,
    66  	param clienttypes.Params,
    67  	createLocalhost bool,
    68  	nextClientSeq uint64) clienttypes.GenesisState {
    69  	return clienttypes.GenesisState{
    70  		Clients:            idcs,
    71  		ClientsConsensus:   css,
    72  		ClientsMetadata:    idgm,
    73  		Params:             param,
    74  		CreateLocalhost:    createLocalhost,
    75  		NextClientSequence: nextClientSeq,
    76  	}
    77  }
    78  
    79  func (suite *IBCTestSuite) TestValidateGenesis() {
    80  	header := suite.chainA.CreateTMClientHeader(suite.chainA.ChainID(), suite.chainA.CurrentHeader().Height, clienttypes.NewHeight(0, uint64(suite.chainA.CurrentHeader().Height-1)), suite.chainA.CurrentHeader().Time, suite.chainA.Vals(), suite.chainA.Vals(), suite.chainA.Signers())
    81  
    82  	testCases := []struct {
    83  		name     string
    84  		genState *types.GenesisState
    85  		expPass  bool
    86  	}{
    87  		{
    88  			name:     "default",
    89  			genState: types.DefaultGenesisState(),
    90  			expPass:  true,
    91  		},
    92  		{
    93  			name: "valid genesis",
    94  			genState: &types.GenesisState{
    95  				// ClientGenesis: clienttypes.NewGenesisState(
    96  				ClientGenesis: new02clientGenesisState(
    97  					[]clienttypes.IdentifiedClientState{
    98  						clienttypes.NewIdentifiedClientState(
    99  							clientID, ibctmtypes.NewClientState(suite.chainA.ChainID(), ibctmtypes.DefaultTrustLevel, ibctesting.TrustingPeriod, ibctesting.UnbondingPeriod, ibctesting.MaxClockDrift, clientHeight, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false),
   100  						),
   101  						clienttypes.NewIdentifiedClientState(
   102  							localhostID, localhosttypes.NewClientState("chaindID", clientHeight),
   103  						),
   104  					},
   105  					[]clienttypes.ClientConsensusStates{
   106  						clienttypes.NewClientConsensusStates(
   107  							clientID,
   108  							[]clienttypes.ConsensusStateWithHeight{
   109  								clienttypes.NewConsensusStateWithHeight(
   110  									header.GetHeight().(clienttypes.Height),
   111  									ibctmtypes.NewConsensusState(
   112  										header.GetTime(), commitmenttypes.NewMerkleRoot(header.Header.AppHash), header.Header.NextValidatorsHash,
   113  									),
   114  								),
   115  							},
   116  						),
   117  					},
   118  					[]clienttypes.IdentifiedGenesisMetadata{
   119  						clienttypes.NewIdentifiedGenesisMetadata(
   120  							clientID,
   121  							[]clienttypes.GenesisMetadata{
   122  								clienttypes.NewGenesisMetadata([]byte("key1"), []byte("val1")),
   123  								clienttypes.NewGenesisMetadata([]byte("key2"), []byte("val2")),
   124  							},
   125  						),
   126  					},
   127  					clienttypes.NewParams(exported.Tendermint, exported.Localhost),
   128  					true,
   129  					2,
   130  				),
   131  				ConnectionGenesis: connectiontypes.NewGenesisState(
   132  					[]connectiontypes.IdentifiedConnection{
   133  						connectiontypes.NewIdentifiedConnection(connectionID, connectiontypes.NewConnectionEnd(connectiontypes.INIT, clientID, connectiontypes.NewCounterparty(clientID2, connectionID2, commitmenttypes.NewMerklePrefix([]byte("prefix"))), []*connectiontypes.Version{ibctesting.ConnectionVersion}, 0)),
   134  					},
   135  					[]connectiontypes.ConnectionPaths{
   136  						connectiontypes.NewConnectionPaths(clientID, []string{connectionID}),
   137  					},
   138  					0,
   139  					connectiontypes.NewParams(10),
   140  				),
   141  				ChannelGenesis: channeltypes.NewGenesisState(
   142  					[]channeltypes.IdentifiedChannel{
   143  						channeltypes.NewIdentifiedChannel(
   144  							port1, channel1, channeltypes.NewChannel(
   145  								channeltypes.INIT, channeltypes.ORDERED,
   146  								channeltypes.NewCounterparty(port2, channel2), []string{connectionID}, ibctesting.DefaultChannelVersion,
   147  							),
   148  						),
   149  					},
   150  					[]channeltypes.PacketState{
   151  						channeltypes.NewPacketState(port2, channel2, 1, []byte("ack")),
   152  					},
   153  					[]channeltypes.PacketState{
   154  						channeltypes.NewPacketState(port2, channel2, 1, []byte("")),
   155  					},
   156  					[]channeltypes.PacketState{
   157  						channeltypes.NewPacketState(port1, channel1, 1, []byte("commit_hash")),
   158  					},
   159  					[]channeltypes.PacketSequence{
   160  						channeltypes.NewPacketSequence(port1, channel1, 1),
   161  					},
   162  					[]channeltypes.PacketSequence{
   163  						channeltypes.NewPacketSequence(port2, channel2, 1),
   164  					},
   165  					[]channeltypes.PacketSequence{
   166  						channeltypes.NewPacketSequence(port2, channel2, 1),
   167  					},
   168  					0,
   169  				),
   170  			},
   171  			expPass: true,
   172  		},
   173  		{
   174  			name: "invalid client genesis",
   175  			genState: &types.GenesisState{
   176  				// ClientGenesis: clienttypes.NewGenesisState(
   177  				ClientGenesis: new02clientGenesisState(
   178  					[]clienttypes.IdentifiedClientState{
   179  						clienttypes.NewIdentifiedClientState(
   180  							clientID, ibctmtypes.NewClientState(suite.chainA.ChainID(), ibctmtypes.DefaultTrustLevel, ibctesting.TrustingPeriod, ibctesting.UnbondingPeriod, ibctesting.MaxClockDrift, clientHeight, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false),
   181  						),
   182  						clienttypes.NewIdentifiedClientState(
   183  							localhostID, localhosttypes.NewClientState("(chaindID)", clienttypes.ZeroHeight()),
   184  						),
   185  					},
   186  					nil,
   187  					[]clienttypes.IdentifiedGenesisMetadata{
   188  						clienttypes.NewIdentifiedGenesisMetadata(
   189  							clientID,
   190  							[]clienttypes.GenesisMetadata{
   191  								clienttypes.NewGenesisMetadata([]byte(""), []byte("val1")),
   192  								clienttypes.NewGenesisMetadata([]byte("key2"), []byte("")),
   193  							},
   194  						),
   195  					},
   196  					clienttypes.NewParams(exported.Tendermint),
   197  					false,
   198  					2,
   199  				),
   200  				ConnectionGenesis: connectiontypes.DefaultGenesisState(),
   201  			},
   202  			expPass: false,
   203  		},
   204  		{
   205  			name: "invalid connection genesis",
   206  			genState: &types.GenesisState{
   207  				ClientGenesis: clienttypes.DefaultGenesisState(),
   208  				ConnectionGenesis: connectiontypes.NewGenesisState(
   209  					[]connectiontypes.IdentifiedConnection{
   210  						connectiontypes.NewIdentifiedConnection(connectionID, connectiontypes.NewConnectionEnd(connectiontypes.INIT, "(CLIENTIDONE)", connectiontypes.NewCounterparty(clientID, connectionID2, commitmenttypes.NewMerklePrefix([]byte("prefix"))), []*connectiontypes.Version{connectiontypes.NewVersion("1.1", nil)}, 0)),
   211  					},
   212  					[]connectiontypes.ConnectionPaths{
   213  						connectiontypes.NewConnectionPaths(clientID, []string{connectionID}),
   214  					},
   215  					0,
   216  					connectiontypes.Params{},
   217  				),
   218  			},
   219  			expPass: false,
   220  		},
   221  		{
   222  			name: "invalid channel genesis",
   223  			genState: &types.GenesisState{
   224  				ClientGenesis:     clienttypes.DefaultGenesisState(),
   225  				ConnectionGenesis: connectiontypes.DefaultGenesisState(),
   226  				ChannelGenesis: channeltypes.GenesisState{
   227  					Acknowledgements: []channeltypes.PacketState{
   228  						channeltypes.NewPacketState("(portID)", channel1, 1, []byte("ack")),
   229  					},
   230  				},
   231  			},
   232  			expPass: false,
   233  		},
   234  	}
   235  
   236  	for _, tc := range testCases {
   237  		tc := tc
   238  		err := tc.genState.Validate()
   239  		if tc.expPass {
   240  			suite.Require().NoError(err, tc.name)
   241  		} else {
   242  			suite.Require().Error(err, tc.name)
   243  		}
   244  	}
   245  }
   246  
   247  func (suite *IBCTestSuite) TestInitGenesis() {
   248  	header := suite.chainA.CreateTMClientHeader(suite.chainA.ChainID(), suite.chainA.CurrentHeader().Height, clienttypes.NewHeight(0, uint64(suite.chainA.CurrentHeader().Height-1)), suite.chainA.CurrentHeader().Time, suite.chainA.Vals(), suite.chainA.Vals(), suite.chainA.Signers())
   249  
   250  	testCases := []struct {
   251  		name     string
   252  		genState *types.GenesisState
   253  	}{
   254  		{
   255  			name:     "default",
   256  			genState: types.DefaultGenesisState(),
   257  		},
   258  		{
   259  			name: "valid genesis",
   260  			genState: &types.GenesisState{
   261  				// ClientGenesis: clienttypes.NewGenesisState(
   262  				ClientGenesis: new02clientGenesisState(
   263  					[]clienttypes.IdentifiedClientState{
   264  						clienttypes.NewIdentifiedClientState(
   265  							clientID, ibctmtypes.NewClientState(suite.chainA.ChainID(), ibctmtypes.DefaultTrustLevel, ibctesting.TrustingPeriod, ibctesting.UnbondingPeriod, ibctesting.MaxClockDrift, clientHeight, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false),
   266  						),
   267  						clienttypes.NewIdentifiedClientState(
   268  							exported.Localhost, localhosttypes.NewClientState("chaindID", clientHeight),
   269  						),
   270  					},
   271  					[]clienttypes.ClientConsensusStates{
   272  						clienttypes.NewClientConsensusStates(
   273  							clientID,
   274  							[]clienttypes.ConsensusStateWithHeight{
   275  								clienttypes.NewConsensusStateWithHeight(
   276  									header.GetHeight().(clienttypes.Height),
   277  									ibctmtypes.NewConsensusState(
   278  										header.GetTime(), commitmenttypes.NewMerkleRoot(header.Header.AppHash), header.Header.NextValidatorsHash,
   279  									),
   280  								),
   281  							},
   282  						),
   283  					},
   284  					[]clienttypes.IdentifiedGenesisMetadata{
   285  						clienttypes.NewIdentifiedGenesisMetadata(
   286  							clientID,
   287  							[]clienttypes.GenesisMetadata{
   288  								clienttypes.NewGenesisMetadata([]byte("key1"), []byte("val1")),
   289  								clienttypes.NewGenesisMetadata([]byte("key2"), []byte("val2")),
   290  							},
   291  						),
   292  					},
   293  					clienttypes.NewParams(exported.Tendermint, exported.Localhost),
   294  					true,
   295  					0,
   296  				),
   297  				ConnectionGenesis: connectiontypes.NewGenesisState(
   298  					[]connectiontypes.IdentifiedConnection{
   299  						connectiontypes.NewIdentifiedConnection(connectionID, connectiontypes.NewConnectionEnd(connectiontypes.INIT, clientID, connectiontypes.NewCounterparty(clientID2, connectionID2, commitmenttypes.NewMerklePrefix([]byte("prefix"))), []*connectiontypes.Version{ibctesting.ConnectionVersion}, 0)),
   300  					},
   301  					[]connectiontypes.ConnectionPaths{
   302  						connectiontypes.NewConnectionPaths(clientID, []string{connectionID}),
   303  					},
   304  					0,
   305  					connectiontypes.NewParams(10),
   306  				),
   307  				ChannelGenesis: channeltypes.NewGenesisState(
   308  					[]channeltypes.IdentifiedChannel{
   309  						channeltypes.NewIdentifiedChannel(
   310  							port1, channel1, channeltypes.NewChannel(
   311  								channeltypes.INIT, channeltypes.ORDERED,
   312  								channeltypes.NewCounterparty(port2, channel2), []string{connectionID}, ibctesting.DefaultChannelVersion,
   313  							),
   314  						),
   315  					},
   316  					[]channeltypes.PacketState{
   317  						channeltypes.NewPacketState(port2, channel2, 1, []byte("ack")),
   318  					},
   319  					[]channeltypes.PacketState{
   320  						channeltypes.NewPacketState(port2, channel2, 1, []byte("")),
   321  					},
   322  					[]channeltypes.PacketState{
   323  						channeltypes.NewPacketState(port1, channel1, 1, []byte("commit_hash")),
   324  					},
   325  					[]channeltypes.PacketSequence{
   326  						channeltypes.NewPacketSequence(port1, channel1, 1),
   327  					},
   328  					[]channeltypes.PacketSequence{
   329  						channeltypes.NewPacketSequence(port2, channel2, 1),
   330  					},
   331  					[]channeltypes.PacketSequence{
   332  						channeltypes.NewPacketSequence(port2, channel2, 1),
   333  					},
   334  					0,
   335  				),
   336  			},
   337  		},
   338  	}
   339  
   340  	for _, tc := range testCases {
   341  		app := simapp.Setup(false)
   342  
   343  		suite.NotPanics(func() {
   344  			ibc.InitGenesis(app.BaseApp.NewContext(false, tmproto.Header{Height: 1}), *app.IBCKeeper.V2Keeper, true, tc.genState)
   345  		})
   346  	}
   347  }