github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/x/wasm/types/params_test.go (about) 1 package types 2 3 import ( 4 "encoding/json" 5 "testing" 6 7 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/codec" 8 codectypes "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/codec/types" 9 sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types" 10 "github.com/stretchr/testify/assert" 11 "github.com/stretchr/testify/require" 12 ) 13 14 func TestValidateParams(t *testing.T) { 15 var ( 16 anyAddress sdk.AccAddress = make([]byte, ContractAddrLen) 17 invalidAddress = "invalid address" 18 ) 19 20 specs := map[string]struct { 21 src Params 22 expErr bool 23 }{ 24 "all good with defaults": { 25 src: DefaultParams(), 26 }, 27 "all good with nobody": { 28 src: Params{ 29 CodeUploadAccess: AllowNobody, 30 InstantiateDefaultPermission: AccessTypeNobody, 31 }, 32 }, 33 "all good with everybody": { 34 src: Params{ 35 CodeUploadAccess: AllowEverybody, 36 InstantiateDefaultPermission: AccessTypeEverybody, 37 }, 38 }, 39 "all good with only address": { 40 src: Params{ 41 CodeUploadAccess: AccessTypeOnlyAddress.With(anyAddress), 42 InstantiateDefaultPermission: AccessTypeOnlyAddress, 43 }, 44 }, 45 "reject empty type in instantiate permission": { 46 src: Params{ 47 CodeUploadAccess: AllowNobody, 48 }, 49 expErr: true, 50 }, 51 "reject unknown type in instantiate": { 52 src: Params{ 53 CodeUploadAccess: AllowNobody, 54 InstantiateDefaultPermission: 1111, 55 }, 56 expErr: true, 57 }, 58 "reject invalid address in only address": { 59 src: Params{ 60 CodeUploadAccess: AccessConfig{Permission: AccessTypeOnlyAddress, Address: invalidAddress}, 61 InstantiateDefaultPermission: AccessTypeOnlyAddress, 62 }, 63 expErr: true, 64 }, 65 "reject CodeUploadAccess Everybody with obsolete address": { 66 src: Params{ 67 CodeUploadAccess: AccessConfig{Permission: AccessTypeEverybody, Address: anyAddress.String()}, 68 InstantiateDefaultPermission: AccessTypeOnlyAddress, 69 }, 70 expErr: true, 71 }, 72 "reject CodeUploadAccess Nobody with obsolete address": { 73 src: Params{ 74 CodeUploadAccess: AccessConfig{Permission: AccessTypeNobody, Address: anyAddress.String()}, 75 InstantiateDefaultPermission: AccessTypeOnlyAddress, 76 }, 77 expErr: true, 78 }, 79 "reject empty CodeUploadAccess": { 80 src: Params{ 81 InstantiateDefaultPermission: AccessTypeOnlyAddress, 82 }, 83 expErr: true, 84 }, 85 "reject undefined permission in CodeUploadAccess": { 86 src: Params{ 87 CodeUploadAccess: AccessConfig{Permission: AccessTypeUnspecified}, 88 InstantiateDefaultPermission: AccessTypeOnlyAddress, 89 }, 90 expErr: true, 91 }, 92 } 93 for msg, spec := range specs { 94 t.Run(msg, func(t *testing.T) { 95 err := spec.src.ValidateBasic() 96 if spec.expErr { 97 require.Error(t, err) 98 } else { 99 require.NoError(t, err) 100 } 101 }) 102 } 103 } 104 105 func TestAccessTypeMarshalJson(t *testing.T) { 106 specs := map[string]struct { 107 src AccessType 108 exp string 109 }{ 110 "Unspecified": {src: AccessTypeUnspecified, exp: `"Unspecified"`}, 111 "Nobody": {src: AccessTypeNobody, exp: `"Nobody"`}, 112 "OnlyAddress": {src: AccessTypeOnlyAddress, exp: `"OnlyAddress"`}, 113 "Everybody": {src: AccessTypeEverybody, exp: `"Everybody"`}, 114 "unknown": {src: 999, exp: `"Unspecified"`}, 115 } 116 for msg, spec := range specs { 117 t.Run(msg, func(t *testing.T) { 118 got, err := json.Marshal(spec.src) 119 require.NoError(t, err) 120 assert.Equal(t, []byte(spec.exp), got) 121 }) 122 } 123 } 124 125 func TestAccessTypeUnmarshalJson(t *testing.T) { 126 specs := map[string]struct { 127 src string 128 exp AccessType 129 }{ 130 "Unspecified": {src: `"Unspecified"`, exp: AccessTypeUnspecified}, 131 "Nobody": {src: `"Nobody"`, exp: AccessTypeNobody}, 132 "OnlyAddress": {src: `"OnlyAddress"`, exp: AccessTypeOnlyAddress}, 133 "Everybody": {src: `"Everybody"`, exp: AccessTypeEverybody}, 134 "unknown": {src: `""`, exp: AccessTypeUnspecified}, 135 } 136 for msg, spec := range specs { 137 t.Run(msg, func(t *testing.T) { 138 var got AccessType 139 err := json.Unmarshal([]byte(spec.src), &got) 140 require.NoError(t, err) 141 assert.Equal(t, spec.exp, got) 142 }) 143 } 144 } 145 146 func TestParamsUnmarshalJson(t *testing.T) { 147 specs := map[string]struct { 148 src string 149 exp Params 150 }{ 151 "defaults": { 152 src: `{"code_upload_access": {"permission": "Nobody"}, 153 "instantiate_default_permission": "Everybody", 154 "use_contract_blocked_list":true, 155 "vmbridge_enable":false}`, 156 exp: DefaultParams(), 157 }, 158 } 159 for msg, spec := range specs { 160 t.Run(msg, func(t *testing.T) { 161 var val Params 162 interfaceRegistry := codectypes.NewInterfaceRegistry() 163 marshaler := codec.NewProtoCodec(interfaceRegistry) 164 165 err := marshaler.UnmarshalJSON([]byte(spec.src), &val) 166 require.NoError(t, err) 167 assert.Equal(t, spec.exp, val) 168 }) 169 } 170 }