mirror of
				https://github.com/0glabs/0g-chain.git
				synced 2025-11-04 00:27:41 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			115 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			115 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package issuance_test
 | 
						|
 | 
						|
import (
 | 
						|
	"testing"
 | 
						|
	"time"
 | 
						|
 | 
						|
	"github.com/stretchr/testify/suite"
 | 
						|
 | 
						|
	sdkmath "cosmossdk.io/math"
 | 
						|
	sdk "github.com/cosmos/cosmos-sdk/types"
 | 
						|
 | 
						|
	tmproto "github.com/tendermint/tendermint/proto/tendermint/types"
 | 
						|
	tmtime "github.com/tendermint/tendermint/types/time"
 | 
						|
 | 
						|
	"github.com/0glabs/0g-chain/app"
 | 
						|
	"github.com/0glabs/0g-chain/x/issuance"
 | 
						|
	"github.com/0glabs/0g-chain/x/issuance/keeper"
 | 
						|
	"github.com/0glabs/0g-chain/x/issuance/types"
 | 
						|
)
 | 
						|
 | 
						|
// Test suite used for all keeper tests
 | 
						|
type ABCITestSuite struct {
 | 
						|
	suite.Suite
 | 
						|
 | 
						|
	keeper     keeper.Keeper
 | 
						|
	app        app.TestApp
 | 
						|
	ctx        sdk.Context
 | 
						|
	addrs      []sdk.AccAddress
 | 
						|
	modAccount sdk.AccAddress
 | 
						|
	blockTime  time.Time
 | 
						|
}
 | 
						|
 | 
						|
// The default state used by each test
 | 
						|
func (suite *ABCITestSuite) SetupTest() {
 | 
						|
	tApp := app.NewTestApp()
 | 
						|
	blockTime := tmtime.Now()
 | 
						|
	ctx := tApp.NewContext(true, tmproto.Header{Height: 1, Time: blockTime})
 | 
						|
	tApp.InitializeFromGenesisStates()
 | 
						|
	_, addrs := app.GeneratePrivKeyAddressPairs(5)
 | 
						|
	keeper := tApp.GetIssuanceKeeper()
 | 
						|
	modAccount, err := sdk.AccAddressFromBech32("kava1cj7njkw2g9fqx4e768zc75dp9sks8u9znxrf0w")
 | 
						|
	suite.Require().NoError(err)
 | 
						|
	suite.app = tApp
 | 
						|
	suite.ctx = ctx
 | 
						|
	suite.keeper = keeper
 | 
						|
	suite.addrs = addrs
 | 
						|
	suite.modAccount = modAccount
 | 
						|
	suite.blockTime = blockTime
 | 
						|
}
 | 
						|
 | 
						|
func (suite *ABCITestSuite) TestRateLimitingTimePassage() {
 | 
						|
	type args struct {
 | 
						|
		assets         []types.Asset
 | 
						|
		supplies       []types.AssetSupply
 | 
						|
		blockTimes     []time.Duration
 | 
						|
		expectedSupply types.AssetSupply
 | 
						|
	}
 | 
						|
	testCases := []struct {
 | 
						|
		name string
 | 
						|
		args args
 | 
						|
	}{
 | 
						|
		{
 | 
						|
			"time passage same period",
 | 
						|
			args{
 | 
						|
				assets: []types.Asset{
 | 
						|
					types.NewAsset(suite.addrs[0].String(), "usdtoken", []string{suite.addrs[1].String()}, false, true, types.NewRateLimit(true, sdkmath.NewInt(10000000000), time.Hour*24)),
 | 
						|
				},
 | 
						|
				supplies: []types.AssetSupply{
 | 
						|
					types.NewAssetSupply(sdk.NewCoin("usdtoken", sdk.ZeroInt()), time.Hour),
 | 
						|
				},
 | 
						|
				blockTimes:     []time.Duration{time.Hour},
 | 
						|
				expectedSupply: types.NewAssetSupply(sdk.NewCoin("usdtoken", sdk.ZeroInt()), time.Hour*2),
 | 
						|
			},
 | 
						|
		},
 | 
						|
		{
 | 
						|
			"time passage new period",
 | 
						|
			args{
 | 
						|
				assets: []types.Asset{
 | 
						|
					types.NewAsset(suite.addrs[0].String(), "usdtoken", []string{suite.addrs[1].String()}, false, true, types.NewRateLimit(true, sdkmath.NewInt(10000000000), time.Hour*24)),
 | 
						|
				},
 | 
						|
				supplies: []types.AssetSupply{
 | 
						|
					types.NewAssetSupply(sdk.NewCoin("usdtoken", sdk.ZeroInt()), time.Hour),
 | 
						|
				},
 | 
						|
				blockTimes:     []time.Duration{time.Hour * 12, time.Hour * 12},
 | 
						|
				expectedSupply: types.NewAssetSupply(sdk.NewCoin("usdtoken", sdk.ZeroInt()), time.Duration(0)),
 | 
						|
			},
 | 
						|
		},
 | 
						|
	}
 | 
						|
	for _, tc := range testCases {
 | 
						|
		suite.Run(tc.name, func() {
 | 
						|
			suite.SetupTest()
 | 
						|
			params := types.NewParams(tc.args.assets)
 | 
						|
			suite.keeper.SetParams(suite.ctx, params)
 | 
						|
			for _, supply := range tc.args.supplies {
 | 
						|
				suite.keeper.SetAssetSupply(suite.ctx, supply, supply.GetDenom())
 | 
						|
			}
 | 
						|
			suite.keeper.SetPreviousBlockTime(suite.ctx, suite.blockTime)
 | 
						|
			for _, bt := range tc.args.blockTimes {
 | 
						|
				nextBlockTime := suite.ctx.BlockTime().Add(bt)
 | 
						|
				suite.ctx = suite.ctx.WithBlockTime(nextBlockTime)
 | 
						|
				suite.Require().NotPanics(func() {
 | 
						|
					issuance.BeginBlocker(suite.ctx, suite.keeper)
 | 
						|
				})
 | 
						|
			}
 | 
						|
			actualSupply, found := suite.keeper.GetAssetSupply(suite.ctx, tc.args.expectedSupply.GetDenom())
 | 
						|
			suite.Require().True(found)
 | 
						|
			suite.Require().Equal(tc.args.expectedSupply, actualSupply)
 | 
						|
		})
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func TestABCITestSuite(t *testing.T) {
 | 
						|
	suite.Run(t, new(ABCITestSuite))
 | 
						|
}
 |