mirror of
https://github.com/0glabs/0g-chain.git
synced 2024-12-26 08:15:19 +00:00
259 lines
7.9 KiB
Go
259 lines
7.9 KiB
Go
|
package keeper_test
|
||
|
|
||
|
import (
|
||
|
"testing"
|
||
|
|
||
|
"github.com/cosmos/cosmos-sdk/codec"
|
||
|
"github.com/stretchr/testify/suite"
|
||
|
|
||
|
"github.com/0glabs/0g-chain/app"
|
||
|
)
|
||
|
|
||
|
type PermissionTestSuite struct {
|
||
|
suite.Suite
|
||
|
cdc codec.Codec
|
||
|
}
|
||
|
|
||
|
func (suite *PermissionTestSuite) SetupTest() {
|
||
|
app := app.NewTestApp()
|
||
|
suite.cdc = app.AppCodec()
|
||
|
}
|
||
|
|
||
|
// func (suite *PermissionTestSuite) TestSubParamChangePermission_Allows() {
|
||
|
// // cdp CollateralParams
|
||
|
// testCPs := cdptypes.CollateralParams{
|
||
|
// {
|
||
|
// Denom: "bnb",
|
||
|
// Type: "bnb-a",
|
||
|
// LiquidationRatio: d("2.0"),
|
||
|
// DebtLimit: c("usdx", 1000000000000),
|
||
|
// StabilityFee: d("1.000000001547125958"),
|
||
|
// LiquidationPenalty: d("0.05"),
|
||
|
// AuctionSize: i(100),
|
||
|
// Prefix: 0x20,
|
||
|
// ConversionFactor: i(6),
|
||
|
// SpotMarketID: "bnb:usd",
|
||
|
// LiquidationMarketID: "bnb:usd",
|
||
|
// },
|
||
|
// {
|
||
|
// Denom: "btc",
|
||
|
// Type: "btc-a",
|
||
|
// LiquidationRatio: d("1.5"),
|
||
|
// DebtLimit: c("usdx", 1000000000),
|
||
|
// StabilityFee: d("1.000000001547125958"),
|
||
|
// LiquidationPenalty: d("0.10"),
|
||
|
// AuctionSize: i(1000),
|
||
|
// Prefix: 0x30,
|
||
|
// ConversionFactor: i(8),
|
||
|
// SpotMarketID: "btc:usd",
|
||
|
// LiquidationMarketID: "btc:usd",
|
||
|
// },
|
||
|
// }
|
||
|
// testCPUpdatedDebtLimit := make(cdptypes.CollateralParams, len(testCPs))
|
||
|
// copy(testCPUpdatedDebtLimit, testCPs)
|
||
|
// testCPUpdatedDebtLimit[0].DebtLimit = c("usdx", 5000000)
|
||
|
|
||
|
// // cdp DebtParam
|
||
|
// testDP := cdptypes.DebtParam{
|
||
|
// Denom: "usdx",
|
||
|
// ReferenceAsset: "usd",
|
||
|
// ConversionFactor: i(6),
|
||
|
// DebtFloor: i(10000000),
|
||
|
// }
|
||
|
// testDPUpdatedDebtFloor := testDP
|
||
|
// testDPUpdatedDebtFloor.DebtFloor = i(1000)
|
||
|
|
||
|
// // cdp Genesis
|
||
|
// testCDPParams := cdptypes.DefaultParams()
|
||
|
// testCDPParams.CollateralParams = testCPs
|
||
|
// testCDPParams.DebtParam = testDP
|
||
|
// testCDPParams.GlobalDebtLimit = testCPs[0].DebtLimit.Add(testCPs[0].DebtLimit) // correct global debt limit to pass genesis validation
|
||
|
|
||
|
// testDeputy, err := sdk.AccAddressFromBech32("0g1xy7hrjy9r0algz9w3gzm8u6mrpq97kwta747gj")
|
||
|
// suite.Require().NoError(err)
|
||
|
// // bep3 Asset Params
|
||
|
// testAPs := bep3types.AssetParams{
|
||
|
// bep3types.AssetParam{
|
||
|
// Denom: "bnb",
|
||
|
// CoinID: 714,
|
||
|
// SupplyLimit: bep3types.SupplyLimit{
|
||
|
// Limit: sdkmath.NewInt(350000000000000),
|
||
|
// TimeLimited: false,
|
||
|
// TimeBasedLimit: sdk.ZeroInt(),
|
||
|
// TimePeriod: time.Hour,
|
||
|
// },
|
||
|
// Active: true,
|
||
|
// DeputyAddress: testDeputy,
|
||
|
// FixedFee: sdkmath.NewInt(1000),
|
||
|
// MinSwapAmount: sdk.OneInt(),
|
||
|
// MaxSwapAmount: sdkmath.NewInt(1000000000000),
|
||
|
// MinBlockLock: bep3types.DefaultMinBlockLock,
|
||
|
// MaxBlockLock: bep3types.DefaultMaxBlockLock,
|
||
|
// },
|
||
|
// bep3types.AssetParam{
|
||
|
// Denom: "inc",
|
||
|
// CoinID: 9999,
|
||
|
// SupplyLimit: bep3types.SupplyLimit{
|
||
|
// Limit: sdkmath.NewInt(100000000000000),
|
||
|
// TimeLimited: true,
|
||
|
// TimeBasedLimit: sdkmath.NewInt(50000000000),
|
||
|
// TimePeriod: time.Hour,
|
||
|
// },
|
||
|
// Active: false,
|
||
|
// DeputyAddress: testDeputy,
|
||
|
// FixedFee: sdkmath.NewInt(1000),
|
||
|
// MinSwapAmount: sdk.OneInt(),
|
||
|
// MaxSwapAmount: sdkmath.NewInt(1000000000000),
|
||
|
// MinBlockLock: bep3types.DefaultMinBlockLock,
|
||
|
// MaxBlockLock: bep3types.DefaultMaxBlockLock,
|
||
|
// },
|
||
|
// }
|
||
|
// testAPsUpdatedActive := make(bep3types.AssetParams, len(testAPs))
|
||
|
// copy(testAPsUpdatedActive, testAPs)
|
||
|
// testAPsUpdatedActive[1].Active = true
|
||
|
|
||
|
// // bep3 Genesis
|
||
|
// testBep3Params := bep3types.DefaultParams()
|
||
|
// testBep3Params.AssetParams = testAPs
|
||
|
|
||
|
// // pricefeed Markets
|
||
|
// testMs := pricefeedtypes.Markets{
|
||
|
// {
|
||
|
// MarketID: "bnb:usd",
|
||
|
// BaseAsset: "bnb",
|
||
|
// QuoteAsset: "usd",
|
||
|
// Oracles: []sdk.AccAddress{},
|
||
|
// Active: true,
|
||
|
// },
|
||
|
// {
|
||
|
// MarketID: "btc:usd",
|
||
|
// BaseAsset: "btc",
|
||
|
// QuoteAsset: "usd",
|
||
|
// Oracles: []sdk.AccAddress{},
|
||
|
// Active: true,
|
||
|
// },
|
||
|
// }
|
||
|
// testMsUpdatedActive := make(pricefeedtypes.Markets, len(testMs))
|
||
|
// copy(testMsUpdatedActive, testMs)
|
||
|
// testMsUpdatedActive[1].Active = true
|
||
|
|
||
|
// testcases := []struct {
|
||
|
// name string
|
||
|
// genState []app.GenesisState
|
||
|
// permission types.SubParamChangePermission
|
||
|
// pubProposal types.PubProposal
|
||
|
// expectAllowed bool
|
||
|
// }{
|
||
|
// {
|
||
|
// name: "normal",
|
||
|
// genState: []app.GenesisState{
|
||
|
// newPricefeedGenState([]string{"bnb", "btc"}, []sdk.Dec{d("15.01"), d("9500")}),
|
||
|
// newCDPGenesisState(testCDPParams),
|
||
|
// newBep3GenesisState(testBep3Params),
|
||
|
// },
|
||
|
// permission: types.SubParamChangePermission{
|
||
|
// AllowedParams: types.AllowedParams{
|
||
|
// {Subspace: cdptypes.ModuleName, Key: string(cdptypes.KeyDebtThreshold)},
|
||
|
// {Subspace: cdptypes.ModuleName, Key: string(cdptypes.KeyCollateralParams)},
|
||
|
// {Subspace: cdptypes.ModuleName, Key: string(cdptypes.KeyDebtParam)},
|
||
|
// {Subspace: bep3types.ModuleName, Key: string(bep3types.KeyAssetParams)},
|
||
|
// {Subspace: pricefeedtypes.ModuleName, Key: string(pricefeedtypes.KeyMarkets)},
|
||
|
// },
|
||
|
// AllowedCollateralParams: types.AllowedCollateralParams{
|
||
|
// {
|
||
|
// Type: "bnb-a",
|
||
|
// DebtLimit: true,
|
||
|
// StabilityFee: true,
|
||
|
// },
|
||
|
// { // TODO currently even if a perm doesn't allow a change in one element it must still be present in list
|
||
|
// Type: "btc-a",
|
||
|
// },
|
||
|
// },
|
||
|
// AllowedDebtParam: types.AllowedDebtParam{
|
||
|
// DebtFloor: true,
|
||
|
// },
|
||
|
// AllowedAssetParams: types.AllowedAssetParams{
|
||
|
// {
|
||
|
// Denom: "bnb",
|
||
|
// },
|
||
|
// {
|
||
|
// Denom: "inc",
|
||
|
// Active: true,
|
||
|
// },
|
||
|
// },
|
||
|
// AllowedMarkets: types.AllowedMarkets{
|
||
|
// {
|
||
|
// MarketID: "bnb:usd",
|
||
|
// },
|
||
|
// {
|
||
|
// MarketID: "btc:usd",
|
||
|
// Active: true,
|
||
|
// },
|
||
|
// },
|
||
|
// },
|
||
|
// pubProposal: paramstypes.NewParameterChangeProposal(
|
||
|
// "A Title",
|
||
|
// "A description for this proposal.",
|
||
|
// []paramstypes.ParamChange{
|
||
|
// {
|
||
|
// Subspace: cdptypes.ModuleName,
|
||
|
// Key: string(cdptypes.KeyDebtThreshold),
|
||
|
// Value: string(suite.cdc.MustMarshalJSON(i(1234))),
|
||
|
// },
|
||
|
// {
|
||
|
// Subspace: cdptypes.ModuleName,
|
||
|
// Key: string(cdptypes.KeyCollateralParams),
|
||
|
// Value: string(suite.cdc.MustMarshalJSON(testCPUpdatedDebtLimit)),
|
||
|
// },
|
||
|
// {
|
||
|
// Subspace: cdptypes.ModuleName,
|
||
|
// Key: string(cdptypes.KeyDebtParam),
|
||
|
// Value: string(suite.cdc.MustMarshalJSON(testDPUpdatedDebtFloor)),
|
||
|
// },
|
||
|
// {
|
||
|
// Subspace: bep3types.ModuleName,
|
||
|
// Key: string(bep3types.KeyAssetParams),
|
||
|
// Value: string(suite.cdc.MustMarshalJSON(testAPsUpdatedActive)),
|
||
|
// },
|
||
|
// {
|
||
|
// Subspace: pricefeedtypes.ModuleName,
|
||
|
// Key: string(pricefeedtypes.KeyMarkets),
|
||
|
// Value: string(suite.cdc.MustMarshalJSON(testMsUpdatedActive)),
|
||
|
// },
|
||
|
// },
|
||
|
// ),
|
||
|
// expectAllowed: true,
|
||
|
// },
|
||
|
// {
|
||
|
// name: "not allowed (wrong pubproposal type)",
|
||
|
// permission: types.SubParamChangePermission{},
|
||
|
// pubProposal: govtypes.NewTextProposal("A Title", "A description for this proposal."),
|
||
|
// expectAllowed: false,
|
||
|
// },
|
||
|
// {
|
||
|
// name: "not allowed (nil pubproposal)",
|
||
|
// permission: types.SubParamChangePermission{},
|
||
|
// pubProposal: nil,
|
||
|
// expectAllowed: false,
|
||
|
// },
|
||
|
// // TODO more cases
|
||
|
// }
|
||
|
|
||
|
// for _, tc := range testcases {
|
||
|
// suite.Run(tc.name, func() {
|
||
|
// tApp := app.NewTestApp()
|
||
|
// ctx := tApp.NewContext(true, abci.Header{})
|
||
|
// tApp.InitializeFromGenesisStates(tc.genState...)
|
||
|
|
||
|
// suite.Equal(
|
||
|
// tc.expectAllowed,
|
||
|
// tc.permission.Allows(ctx, tApp.Codec(), tApp.GetParamsKeeper(), tc.pubProposal),
|
||
|
// )
|
||
|
// })
|
||
|
// }
|
||
|
// }
|
||
|
|
||
|
func TestPermissionTestSuite(t *testing.T) {
|
||
|
suite.Run(t, new(PermissionTestSuite))
|
||
|
}
|