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  }