github.com/lino-network/lino@v0.6.11/x/account/handler_test.go (about) 1 package account 2 3 // import ( 4 // "testing" 5 6 // "github.com/lino-network/lino/param" 7 // "github.com/lino-network/lino/types" 8 // "github.com/lino-network/lino/x/account/model" 9 // accmn "github.com/lino-network/lino/x/account/manager" 10 // "github.com/lino-network/lino/x/global" 11 12 // "github.com/stretchr/testify/assert" 13 14 // sdk "github.com/cosmos/cosmos-sdk/types" 15 // "github.com/tendermint/tendermint/crypto/secp256k1" 16 // ) 17 18 // var ( 19 // user1 = types.AccountKey("user1") 20 // user2 = types.AccountKey("user2") 21 22 // memo = "This is a memo!" 23 // ) 24 25 // func TestTransferNormal(t *testing.T) { 26 // ctx, am, gm := accmn.setupTest(t, 1) 27 // handler := NewHandler(am, &gm) 28 29 // accParam, _ := am.paramHolder.GetAccountParam(ctx) 30 // // create two test users with initial deposit of 100 LNO. 31 // accmn.createTestAccount(ctx, am, "user1") 32 // createTestAccount(ctx, am, "user2") 33 34 // am.AddCoinToUsername(ctx, types.AccountKey("user1"), c2000) 35 36 // testCases := []struct { 37 // testName string 38 // msg TransferMsg 39 // wantOK bool 40 // wantSenderBalance types.Coin 41 // wantReceiverBalance types.Coin 42 // }{ 43 // { 44 // testName: "user1 transfers 200 LNO to user2 (by username)", 45 // msg: NewTransferMsg("user1", "user2", l200, memo), 46 // wantOK: true, 47 // wantSenderBalance: c1800.Plus(accParam.RegisterFee), 48 // wantReceiverBalance: c200.Plus(accParam.RegisterFee), 49 // }, 50 // } 51 52 // for _, tc := range testCases { 53 // result := handler(ctx, tc.msg) 54 55 // if result.IsOK() != tc.wantOK { 56 // t.Errorf("%s diff result, got %v, want %v", tc.testName, result.IsOK(), tc.wantOK) 57 // } 58 59 // senderSaving, _ := am.GetSavingFromUsername(ctx, tc.msg.Sender) 60 // receiverSaving, _ := am.GetSavingFromUsername(ctx, tc.msg.Receiver) 61 62 // if !senderSaving.IsEqual(tc.wantSenderBalance) { 63 // t.Errorf("%s: diff sender saving, got %v, want %v", tc.testName, senderSaving, tc.wantSenderBalance) 64 // } 65 // if !receiverSaving.IsEqual(tc.wantReceiverBalance) { 66 // t.Errorf("%s: diff receiver saving, got %v, want %v", tc.testName, receiverSaving, tc.wantReceiverBalance) 67 // } 68 // } 69 // } 70 71 // func BenchmarkNumTransfer(b *testing.B) { 72 // ctx := getContext(0) 73 // ph := param.NewParamHolder(testParamKVStoreKey) 74 // ph.InitParam(ctx) 75 // accManager := NewAccountManager(testAccountKVStoreKey, ph) 76 // globalManager := global.NewGlobalManager(testGlobalKVStoreKey, ph) 77 // handler := NewHandler(accManager, &globalManager) 78 79 // // create two test users with initial deposit of 100 LNO. 80 // createTestAccount(ctx, accManager, "user1") 81 // createTestAccount(ctx, accManager, "user2") 82 83 // accManager.AddCoinToUsername( 84 // ctx, types.AccountKey("user1"), types.NewCoinFromInt64(100000*int64(b.N))) 85 // b.ResetTimer() 86 // for n := 0; n < b.N; n++ { 87 // handler(ctx, NewTransferMsg("user1", "user2", "1", "")) 88 // } 89 // } 90 91 // func TestSenderCoinNotEnough(t *testing.T) { 92 // ctx, am, gm := setupTest(t, 1) 93 // handler := NewHandler(am, &gm) 94 // accParam, _ := am.paramHolder.GetAccountParam(ctx) 95 96 // // create two test users 97 // createTestAccount(ctx, am, "user1") 98 // createTestAccount(ctx, am, "user2") 99 100 // memo := "This is a memo!" 101 102 // // let user1 transfers 2000 to user2 103 // msg := NewTransferMsg("user1", "user2", l2000, memo) 104 // result := handler(ctx, msg) 105 // assert.Equal(t, ErrAccountSavingCoinNotEnough().Result(), result) 106 107 // acc1Balance, _ := am.GetSavingFromUsername(ctx, types.AccountKey("user1")) 108 // assert.Equal(t, acc1Balance, accParam.RegisterFee) 109 // } 110 111 // func TestReceiverUsernameIncorrect(t *testing.T) { 112 // ctx, am, gm := setupTest(t, 1) 113 // handler := NewHandler(am, &gm) 114 115 // // create two test users 116 // createTestAccount(ctx, am, "user1") 117 // err := am.AddCoinToUsername(ctx, types.AccountKey("user1"), c2000) 118 // if err != nil { 119 // t.Errorf("TestReceiverUsernameIncorrect: failed to add coin to account, got err %v", err) 120 // } 121 122 // memo := "This is a memo!" 123 124 // // let user1 transfers 2000 to a random user 125 // msg := NewTransferMsg("user1", "dnqwondqowindow", l2000, memo) 126 // result := handler(ctx, msg) 127 // // fmt.Println(result) 128 // assert.Equal(t, model.ErrAccountInfoNotFound().Result().Code, result.Code) 129 // } 130 131 // func TestHandleAccountRecover(t *testing.T) { 132 // // ctx, am, gm := setupTest(t, 1) 133 // // handler := NewHandler(am, &gm) 134 // // accParam, _ := am.paramHolder.GetAccountParam(ctx) 135 // // user1 := "user1" 136 137 // // createTestAccount(ctx, am, user1) 138 139 // // testCases := map[string]struct { 140 // // user string 141 // // newResetKey crypto.PubKey 142 // // newTransactionKey crypto.PubKey 143 // // newAppKey crypto.PubKey 144 // // }{ 145 // // "normal case": { 146 // // user: user1, 147 // // newResetKey: secp256k1.GenPrivKey().PubKey(), 148 // // newTransactionKey: secp256k1.GenPrivKey().PubKey(), 149 // // newAppKey: secp256k1.GenPrivKey().PubKey(), 150 // // }, 151 // // } 152 153 // // for testName, tc := range testCases { 154 // // msg := NewRecoverMsg(tc.user, tc.newResetKey, tc.newTransactionKey, tc.newAppKey) 155 // // result := handler(ctx, msg) 156 // // if !assert.Equal(t, sdk.Result{}, result) { 157 // // t.Errorf("%s: diff result, got %v, want %v", testName, result, sdk.Result{}) 158 // // } 159 160 // // accInfo := model.AccountInfo{ 161 // // Username: types.AccountKey(tc.user), 162 // // CreatedAt: ctx.BlockHeader().Time.Unix(), 163 // // SignningKey: tc.newResetKey, 164 // // TransactionKey: tc.newTransactionKey, 165 // // } 166 // // checkAccountInfo(t, ctx, testName, types.AccountKey(tc.user), accInfo) 167 168 // // newBank := model.AccountBank{ 169 // // Saving: accParam.RegisterFee, 170 // // CoinDay: accParam.RegisterFee, 171 // // } 172 // // checkBankKVByUsername(t, ctx, testName, types.AccountKey(tc.user), newBank) 173 // // } 174 // } 175 176 // func TestHandleRegister(t *testing.T) { 177 // ctx, am, gm := setupTest(t, 1) 178 // accParam, _ := am.paramHolder.GetAccountParam(ctx) 179 180 // handler := NewHandler(am, &gm) 181 // referrer := "referrer" 182 183 // createTestAccount(ctx, am, referrer) 184 // am.AddCoinToUsername(ctx, types.AccountKey(referrer), types.NewCoinFromInt64(100*types.Decimals)) 185 186 // testCases := []struct { 187 // testName string 188 // registerMsg RegisterMsg 189 // expectResult sdk.Result 190 // expectReferrerSaving types.Coin 191 // expectNewAccountSaving types.Coin 192 // }{ 193 // { 194 // testName: "normal case", 195 // registerMsg: NewRegisterMsg( 196 // "referrer", "user1", "1", 197 // secp256k1.GenPrivKey().PubKey(), 198 // secp256k1.GenPrivKey().PubKey(), 199 // secp256k1.GenPrivKey().PubKey(), 200 // ), 201 // expectResult: sdk.Result{}, 202 // expectReferrerSaving: c100, 203 // expectNewAccountSaving: c0, 204 // }, 205 // { 206 // testName: "account already exist", 207 // registerMsg: NewRegisterMsg( 208 // "referrer", "user1", "1", 209 // secp256k1.GenPrivKey().PubKey(), 210 // secp256k1.GenPrivKey().PubKey(), 211 // secp256k1.GenPrivKey().PubKey(), 212 // ), 213 // expectResult: ErrAccountAlreadyExists("user1").Result(), 214 // expectReferrerSaving: types.NewCoinFromInt64(99 * types.Decimals), 215 // expectNewAccountSaving: c0, 216 // }, 217 // { 218 // testName: "account register fee insufficient", 219 // registerMsg: NewRegisterMsg( 220 // "referrer", "user2", "0.1", 221 // secp256k1.GenPrivKey().PubKey(), 222 // secp256k1.GenPrivKey().PubKey(), 223 // secp256k1.GenPrivKey().PubKey(), 224 // ), 225 // expectResult: ErrRegisterFeeInsufficient().Result(), 226 // expectReferrerSaving: types.NewCoinFromInt64(99 * types.Decimals), 227 // expectNewAccountSaving: c0, 228 // }, 229 // { 230 // testName: "referrer deposit insufficient", 231 // registerMsg: NewRegisterMsg( 232 // "referrer", "user2", "1000", 233 // secp256k1.GenPrivKey().PubKey(), 234 // secp256k1.GenPrivKey().PubKey(), 235 // secp256k1.GenPrivKey().PubKey(), 236 // ), 237 // expectResult: ErrAccountSavingCoinNotEnough().Result(), 238 // expectReferrerSaving: types.NewCoinFromInt64(98 * types.Decimals), 239 // expectNewAccountSaving: c0, 240 // }, 241 // } 242 243 // for _, tc := range testCases { 244 // result := handler(ctx, tc.registerMsg) 245 // if !assert.Equal(t, tc.expectResult, result) { 246 // t.Errorf("%s: diff result, got %v, want %v", tc.testName, result, tc.expectResult) 247 // } 248 249 // if result.Code.IsOK() { 250 // if !am.DoesAccountExist(ctx, tc.registerMsg.NewUser) { 251 // t.Errorf("%s: account %s doesn't exist", tc.testName, tc.registerMsg.NewUser) 252 // } 253 254 // // resetKey, err := am.GetResetKey(ctx, tc.registerMsg.NewUser) 255 // // if err != nil { 256 // // t.Errorf("%s: failed to get reset key, got err %v", tc.testName, err) 257 // // } 258 // // if !resetKey.Equals(tc.registerMsg.NewResetPubKey) { 259 // // t.Errorf("%s: diff reset key, got %v, want %v", tc.testName, resetKey, tc.registerMsg.NewResetPubKey) 260 // // } 261 262 // txKey, err := am.GetTransactionKey(ctx, tc.registerMsg.NewUser) 263 // if err != nil { 264 // t.Errorf("%s: failed to get transaction key, got err %v", tc.testName, err) 265 // } 266 // if !txKey.Equals(tc.registerMsg.NewResetPubKey) { 267 // t.Errorf("%s: diff transaction key, got %v, want %v", tc.testName, txKey, tc.registerMsg.NewResetPubKey) 268 // } 269 270 // signingKey, err := am.GetSigningKey(ctx, tc.registerMsg.NewUser) 271 // if err != nil { 272 // t.Errorf("%s: failed to get app key, got err %v", tc.testName, err) 273 // } 274 // if !signingKey.Equals(tc.registerMsg.NewTransactionPubKey) { 275 // t.Errorf("%s: diff app key, got %v, want %v", tc.testName, signingKey, tc.registerMsg.NewTransactionPubKey) 276 // } 277 278 // info, err := am.storage.GetInfo(ctx, tc.registerMsg.NewUser) 279 // if err != nil { 280 // t.Errorf("%s: failed to get info, got err %v", tc.testName, err) 281 // } 282 // bank, err := am.storage.GetBank(ctx, info.Address) 283 // if err != nil { 284 // t.Errorf("%s: failed to get bank, got err %v", tc.testName, err) 285 // } 286 // if !bank.Saving.IsEqual(tc.expectNewAccountSaving) { 287 // t.Errorf("%s: diff saving, got %v, want %v", tc.testName, bank.Saving, tc.expectNewAccountSaving) 288 // } 289 // // if !bank.CoinDay.IsEqual(tc.expectNewAccountCoinDay) { 290 // // t.Errorf("%s: diff coin day, got %v, want %v", tc.testName, bank.Saving, tc.expectNewAccountSaving) 291 // // } 292 293 // // accMeta, _ := am.storage.GetMeta(ctx, tc.registerMsg.NewUser) 294 // pool, err := gm.GetValidatorHourlyInflation(ctx) 295 // if err != nil { 296 // t.Errorf("%s: failed to get inflation, got err %v", tc.testName, err) 297 // } 298 // if !pool.IsEqual(accParam.RegisterFee) { 299 // t.Errorf("%s: diff validator inflation, got %v, want %v", tc.testName, pool, accParam.RegisterFee) 300 // } 301 // } 302 303 // saving, err := am.GetSavingFromUsername(ctx, tc.registerMsg.Referrer) 304 // if err != nil { 305 // t.Errorf("%s: failed to get saving from bank, got err %v", tc.testName, err) 306 // } 307 // if !saving.IsEqual(tc.expectReferrerSaving) { 308 // t.Errorf("%s: diff saving, got %v, want %v", tc.testName, saving, tc.expectReferrerSaving) 309 // } 310 // // gm.GetDeveloperMonthlyInflation(ctx) 311 // } 312 // } 313 314 // func TestHandleUpdateAccountMsg(t *testing.T) { 315 // ctx, am, gm := setupTest(t, 1) 316 // handler := NewHandler(am, &gm) 317 318 // createTestAccount(ctx, am, "accKey") 319 320 // testCases := []struct { 321 // testName string 322 // updateAccountMsg UpdateAccountMsg 323 // expectResult sdk.Result 324 // }{ 325 // { 326 // testName: "normal update", 327 // updateAccountMsg: NewUpdateAccountMsg("accKey", "{'link':'https://lino.network'}"), 328 // expectResult: sdk.Result{}, 329 // }, 330 // { 331 // testName: "invalid username", 332 // updateAccountMsg: NewUpdateAccountMsg("invalid", "{'link':'https://lino.network'}"), 333 // expectResult: model.ErrAccountMetaNotFound().Result(), 334 // }, 335 // } 336 // for _, tc := range testCases { 337 // result := handler(ctx, tc.updateAccountMsg) 338 // if !assert.Equal(t, result, tc.expectResult) { 339 // t.Errorf("%s: diff result, got %v, want %v", tc.testName, result, tc.expectResult) 340 // } 341 // } 342 // }