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  }