github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/x/evm/client/utils/utils_test.go (about) 1 package utils 2 3 import ( 4 "os" 5 "testing" 6 7 fbchain "github.com/fibonacci-chain/fbc/app/types" 8 sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types" 9 "github.com/fibonacci-chain/fbc/x/evm/types" 10 "github.com/stretchr/testify/require" 11 ) 12 13 const ( 14 expectedManageContractDeploymentWhitelistProposalJSON = `{ 15 "title": "default title", 16 "description": "default description", 17 "distributor_addresses": [ 18 "fb1suh2tdzzphg7x7c9hvadntqc00ar9xgjpj9snw", 19 "fb1lz3l5hnchv4wrl759kjvl33dpfr66f7x5fp68c" 20 ], 21 "is_added": true, 22 "deposit": [ 23 { 24 "denom": "fibo", 25 "amount": "100.000000000000000000" 26 } 27 ] 28 }` 29 expectedManageContractBlockedListProposalJSON = `{ 30 "title": "default title", 31 "description": "default description", 32 "contract_addresses": [ 33 "fb1suh2tdzzphg7x7c9hvadntqc00ar9xgjpj9snw", 34 "fb1lz3l5hnchv4wrl759kjvl33dpfr66f7x5fp68c" 35 ], 36 "is_added": true, 37 "deposit": [ 38 { 39 "denom": "fibo", 40 "amount": "100.000000000000000000" 41 } 42 ] 43 }` 44 expectedManageContractMethodBlockedListProposalJSON = `{ 45 "title": "default title", 46 "description": "default description", 47 "contract_addresses":[ 48 { 49 "address": "fb1suh2tdzzphg7x7c9hvadntqc00ar9xgjpj9snw", 50 "block_methods": [ 51 { 52 "sign": "0x371303c0", 53 "extra": "inc()" 54 }, 55 { 56 "sign": "0x579be378", 57 "extra": "onc()" 58 } 59 ] 60 }, 61 { 62 "address": "fb1lz3l5hnchv4wrl759kjvl33dpfr66f7x5fp68c", 63 "block_methods": [ 64 { 65 "sign": "0x371303c0", 66 "extra": "inc()" 67 }, 68 { 69 "sign": "0x579be378", 70 "extra": "onc()" 71 } 72 ] 73 } 74 ], 75 "is_added": true, 76 "deposit": [ 77 { 78 "denom": "fibo", 79 "amount": "100.000000000000000000" 80 } 81 ] 82 }` 83 fileName = "./proposal.json" 84 expectedTitle = "default title" 85 expectedDescription = "default description" 86 expectedDistributorAddr1 = "fb1suh2tdzzphg7x7c9hvadntqc00ar9xgjpj9snw" 87 expectedDistributorAddr2 = "fb1lz3l5hnchv4wrl759kjvl33dpfr66f7x5fp68c" 88 expectedMethodSign1 = "0x371303c0" 89 expectedMethodExtra1 = "inc()" 90 expectedMethodSign2 = "0x579be378" 91 expectedMethodExtra2 = "onc()" 92 ) 93 94 func init() { 95 config := sdk.GetConfig() 96 fbchain.SetBech32Prefixes(config) 97 } 98 99 func TestParseManageContractDeploymentWhitelistProposalJSON(t *testing.T) { 100 // create JSON file 101 f, err := os.OpenFile(fileName, os.O_RDWR|os.O_CREATE, 0666) 102 require.NoError(t, err) 103 _, err = f.WriteString(expectedManageContractDeploymentWhitelistProposalJSON) 104 require.NoError(t, err) 105 require.NoError(t, f.Close()) 106 107 // remove the temporary JSON file 108 defer os.Remove(fileName) 109 110 proposal, err := ParseManageContractDeploymentWhitelistProposalJSON(types.ModuleCdc, fileName) 111 require.NoError(t, err) 112 require.Equal(t, expectedTitle, proposal.Title) 113 require.Equal(t, expectedDescription, proposal.Description) 114 require.True(t, proposal.IsAdded) 115 require.Equal(t, 1, len(proposal.Deposit)) 116 require.Equal(t, sdk.DefaultBondDenom, proposal.Deposit[0].Denom) 117 require.True(t, sdk.NewDec(100).Equal(proposal.Deposit[0].Amount)) 118 require.Equal(t, 2, len(proposal.DistributorAddrs)) 119 require.Equal(t, expectedDistributorAddr1, proposal.DistributorAddrs[0].String()) 120 require.Equal(t, expectedDistributorAddr2, proposal.DistributorAddrs[1].String()) 121 } 122 123 func TestParseManageContractBlockedListProposalJSON(t *testing.T) { 124 // create JSON file 125 f, err := os.OpenFile(fileName, os.O_RDWR|os.O_CREATE, 0666) 126 require.NoError(t, err) 127 _, err = f.WriteString(expectedManageContractBlockedListProposalJSON) 128 require.NoError(t, err) 129 require.NoError(t, f.Close()) 130 131 // remove the temporary JSON file 132 defer os.Remove(fileName) 133 134 proposal, err := ParseManageContractBlockedListProposalJSON(types.ModuleCdc, fileName) 135 require.NoError(t, err) 136 require.Equal(t, expectedTitle, proposal.Title) 137 require.Equal(t, expectedDescription, proposal.Description) 138 require.True(t, proposal.IsAdded) 139 require.Equal(t, 1, len(proposal.Deposit)) 140 require.Equal(t, sdk.DefaultBondDenom, proposal.Deposit[0].Denom) 141 require.True(t, sdk.NewDec(100).Equal(proposal.Deposit[0].Amount)) 142 require.Equal(t, 2, len(proposal.ContractAddrs)) 143 require.Equal(t, expectedDistributorAddr1, proposal.ContractAddrs[0].String()) 144 require.Equal(t, expectedDistributorAddr2, proposal.ContractAddrs[1].String()) 145 } 146 func TestParseManageContractMethodBlockedListProposalJSON(t *testing.T) { 147 // create JSON file 148 f, err := os.OpenFile(fileName, os.O_RDWR|os.O_CREATE, 0666) 149 require.NoError(t, err) 150 _, err = f.WriteString(expectedManageContractMethodBlockedListProposalJSON) 151 require.NoError(t, err) 152 require.NoError(t, f.Close()) 153 154 // remove the temporary JSON file 155 defer os.Remove(fileName) 156 157 proposal, err := ParseManageContractMethodBlockedListProposalJSON(types.ModuleCdc, fileName) 158 require.NoError(t, err) 159 require.Equal(t, expectedTitle, proposal.Title) 160 require.Equal(t, expectedDescription, proposal.Description) 161 require.True(t, proposal.IsAdded) 162 require.Equal(t, 1, len(proposal.Deposit)) 163 require.Equal(t, sdk.DefaultBondDenom, proposal.Deposit[0].Denom) 164 require.True(t, sdk.NewDec(100).Equal(proposal.Deposit[0].Amount)) 165 require.Equal(t, 2, len(proposal.ContractList)) 166 167 methods := types.ContractMethods{ 168 types.ContractMethod{ 169 Sign: expectedMethodSign1, 170 Extra: expectedMethodExtra1, 171 }, 172 types.ContractMethod{ 173 Sign: expectedMethodSign2, 174 Extra: expectedMethodExtra2, 175 }, 176 } 177 addr1, err := sdk.AccAddressFromBech32(expectedDistributorAddr1) 178 require.NoError(t, err) 179 addr2, err := sdk.AccAddressFromBech32(expectedDistributorAddr2) 180 require.NoError(t, err) 181 expectBc1 := types.NewBlockContract(addr1, methods) 182 expectBc2 := types.NewBlockContract(addr2, methods) 183 ok := types.BlockedContractListIsEqual(t, proposal.ContractList, types.BlockedContractList{*expectBc1, *expectBc2}) 184 require.True(t, ok) 185 } 186 187 func TestParseManageSysContractAddressProposalJSON(t *testing.T) { 188 defaultSysContractAddressProposalJSON := `{ 189 "title":"default title", 190 "description":"default description", 191 "contract_address": "0xA4FFCda536CC8fF1eeFe32D32EE943b9B4e70414", 192 "is_added":true, 193 "deposit": [ 194 { 195 "denom": "fibo", 196 "amount": "100.000000000000000000" 197 } 198 ] 199 }` 200 // create JSON file 201 filePathName := "./defaultSysContractAddressProposalJSON.json" 202 f, err := os.OpenFile(filePathName, os.O_RDWR|os.O_CREATE, 0666) 203 require.NoError(t, err) 204 _, err = f.WriteString(defaultSysContractAddressProposalJSON) 205 require.NoError(t, err) 206 require.NoError(t, f.Close()) 207 208 // remove the temporary JSON file 209 defer os.Remove(filePathName) 210 211 proposal, err := ParseManageSysContractAddressProposalJSON(types.ModuleCdc, filePathName) 212 require.NoError(t, err) 213 require.Equal(t, expectedTitle, proposal.Title) 214 require.Equal(t, expectedDescription, proposal.Description) 215 require.True(t, proposal.IsAdded) 216 require.Equal(t, 1, len(proposal.Deposit)) 217 require.Equal(t, sdk.DefaultBondDenom, proposal.Deposit[0].Denom) 218 require.True(t, sdk.NewDec(100).Equal(proposal.Deposit[0].Amount)) 219 }