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 }