github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/x/wasm/keeper/ibc_test.go (about) 1 package keeper 2 3 import ( 4 "fmt" 5 "testing" 6 7 sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types" 8 "github.com/stretchr/testify/assert" 9 10 "github.com/stretchr/testify/require" 11 ) 12 13 func TestDontBindPortNonIBCContract(t *testing.T) { 14 ctx, keepers := CreateTestInput(t, false, SupportedFeatures) 15 example := InstantiateHackatomExampleContract(t, ctx, keepers) // ensure we bound the port 16 _, _, err := keepers.IBCKeeper.PortKeeper.LookupModuleByPort(ctx, keepers.WasmKeeper.GetContractInfo(ctx, example.Contract).IBCPortID) 17 require.Error(t, err) 18 } 19 20 func TestBindingPortForIBCContractOnInstantiate(t *testing.T) { 21 ctx, keepers := CreateTestInput(t, false, SupportedFeatures) 22 example := InstantiateIBCReflectContract(t, ctx, keepers) // ensure we bound the port 23 owner, _, err := keepers.IBCKeeper.PortKeeper.LookupModuleByPort(ctx, keepers.WasmKeeper.GetContractInfo(ctx, example.Contract).IBCPortID) 24 require.NoError(t, err) 25 require.Equal(t, "wasm", owner) 26 27 initMsgBz := IBCReflectInitMsg{ 28 ReflectCodeID: example.ReflectCodeID, 29 }.GetBytes(t) 30 31 // create a second contract should give yet another portID (and different address) 32 creator := RandomAccountAddress(t) 33 addr, _, err := keepers.ContractKeeper.Instantiate(ctx, example.CodeID, creator, nil, initMsgBz, "ibc-reflect-2", nil) 34 require.NoError(t, err) 35 require.NotEqual(t, example.Contract, addr) 36 37 portID2 := PortIDForContract(addr) 38 owner, _, err = keepers.IBCKeeper.PortKeeper.LookupModuleByPort(ctx, portID2) 39 require.NoError(t, err) 40 require.Equal(t, "wasm", owner) 41 } 42 43 func TestContractFromPortID(t *testing.T) { 44 contractAddr := BuildContractAddress(1, 100) 45 specs := map[string]struct { 46 srcPort string 47 expAddr sdk.AccAddress 48 expErr bool 49 }{ 50 "all good": { 51 srcPort: fmt.Sprintf("wasm.%s", contractAddr.String()), 52 expAddr: contractAddr, 53 }, 54 "without prefix": { 55 srcPort: contractAddr.String(), 56 expErr: true, 57 }, 58 "invalid prefix": { 59 srcPort: fmt.Sprintf("wasmx.%s", contractAddr.String()), 60 expErr: true, 61 }, 62 "without separator char": { 63 srcPort: fmt.Sprintf("wasm%s", contractAddr.String()), 64 expErr: true, 65 }, 66 "invalid account": { 67 srcPort: "wasm.foobar", 68 expErr: true, 69 }, 70 } 71 for name, spec := range specs { 72 t.Run(name, func(t *testing.T) { 73 gotAddr, gotErr := ContractFromPortID(spec.srcPort) 74 if spec.expErr { 75 require.Error(t, gotErr) 76 return 77 } 78 require.NoError(t, gotErr) 79 assert.Equal(t, spec.expAddr, gotAddr) 80 }) 81 } 82 }