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  // }