github.com/lino-network/lino@v0.6.11/x/bandwidth/model/storage_test.go (about) 1 package model 2 3 import ( 4 "testing" 5 6 linotypes "github.com/lino-network/lino/types" 7 8 "github.com/cosmos/cosmos-sdk/store" 9 "github.com/stretchr/testify/assert" 10 "github.com/tendermint/tendermint/libs/log" 11 12 sdk "github.com/cosmos/cosmos-sdk/types" 13 abci "github.com/tendermint/tendermint/abci/types" 14 dbm "github.com/tendermint/tm-db" 15 ) 16 17 var ( 18 TestKVStoreKey = sdk.NewKVStoreKey("bandwidth") 19 ) 20 21 func getContext() sdk.Context { 22 db := dbm.NewMemDB() 23 ms := store.NewCommitMultiStore(db) 24 ms.MountStoreWithDB(TestKVStoreKey, sdk.StoreTypeIAVL, db) 25 err := ms.LoadLatestVersion() 26 if err != nil { 27 panic(err) 28 } 29 30 return sdk.NewContext(ms, abci.Header{}, false, log.NewNopLogger()) 31 } 32 33 func TestBandwidthInfo(t *testing.T) { 34 bs := NewBandwidthStorage(TestKVStoreKey) 35 ctx := getContext() 36 37 info := BandwidthInfo{ 38 GeneralMsgEMA: linotypes.NewDecFromRat(311, 1), 39 AppMsgEMA: linotypes.NewDecFromRat(200, 10), 40 MaxMPS: linotypes.NewDecFromRat(12, 3), 41 } 42 err := bs.SetBandwidthInfo(ctx, &info) 43 assert.Nil(t, err) 44 45 resultPtr, err := bs.GetBandwidthInfo(ctx) 46 assert.Nil(t, err) 47 assert.Equal(t, info, *resultPtr, "Bandwidth info should be equal") 48 } 49 50 func TestBlockInfo(t *testing.T) { 51 bs := NewBandwidthStorage(TestKVStoreKey) 52 ctx := getContext() 53 54 info := BlockInfo{ 55 TotalMsgSignedByApp: 213123, 56 TotalMsgSignedByUser: 0, 57 CurMsgFee: linotypes.NewCoinFromInt64(int64(123)), 58 CurU: sdk.NewDec(1), 59 } 60 err := bs.SetBlockInfo(ctx, &info) 61 assert.Nil(t, err) 62 63 resultPtr, err := bs.GetBlockInfo(ctx) 64 assert.Nil(t, err) 65 assert.Equal(t, info, *resultPtr, "BlockInfo info should be equal") 66 } 67 68 func TestAppBandwidthInfo(t *testing.T) { 69 bs := NewBandwidthStorage(TestKVStoreKey) 70 ctx := getContext() 71 72 info := AppBandwidthInfo{ 73 MaxBandwidthCredit: sdk.NewDec(1000), 74 CurBandwidthCredit: sdk.NewDec(1000), 75 MessagesInCurBlock: 100, 76 LastRefilledAt: 1230, 77 ExpectedMPS: sdk.NewDec(200), 78 } 79 accName := linotypes.AccountKey("test") 80 err := bs.SetAppBandwidthInfo(ctx, accName, &info) 81 assert.Nil(t, err) 82 83 resultPtr, err := bs.GetAppBandwidthInfo(ctx, accName) 84 assert.Nil(t, err) 85 assert.Equal(t, info, *resultPtr, "App bandwidth info should be equal") 86 } 87 88 func TestGetAllAppBandwidthInfo(t *testing.T) { 89 bs := NewBandwidthStorage(TestKVStoreKey) 90 ctx := getContext() 91 appName1 := linotypes.AccountKey("app1") 92 appName2 := linotypes.AccountKey("app2") 93 info1 := AppBandwidthInfo{ 94 Username: appName1, 95 MaxBandwidthCredit: sdk.NewDec(1000), 96 CurBandwidthCredit: sdk.NewDec(1000), 97 MessagesInCurBlock: 100, 98 LastRefilledAt: 1230, 99 ExpectedMPS: sdk.NewDec(200), 100 } 101 info2 := AppBandwidthInfo{ 102 Username: appName2, 103 MaxBandwidthCredit: sdk.NewDec(1000), 104 CurBandwidthCredit: sdk.NewDec(2000), 105 MessagesInCurBlock: 1300, 106 LastRefilledAt: 1130, 107 ExpectedMPS: sdk.NewDec(100), 108 } 109 110 err := bs.SetAppBandwidthInfo(ctx, appName1, &info1) 111 assert.Nil(t, err) 112 err = bs.SetAppBandwidthInfo(ctx, appName2, &info2) 113 assert.Nil(t, err) 114 115 resultList, err := bs.GetAllAppBandwidthInfo(ctx) 116 assert.Nil(t, err) 117 assert.Equal(t, []*AppBandwidthInfo{&info1, &info2}, resultList, "App bandwidth info should be equal") 118 }