0g-chain/x/committee/keeper/_param_permission_test.go
2024-08-02 19:26:50 +08:00

269 lines
8.3 KiB
Go

package keeper_test
import (
"testing"
"time"
sdkmath "cosmossdk.io/math"
abci "github.com/cometbft/cometbft/abci/types"
"github.com/cosmos/cosmos-sdk/codec"
sdk "github.com/cosmos/cosmos-sdk/types"
govtypes "github.com/cosmos/cosmos-sdk/x/gov/types"
paramstypes "github.com/cosmos/cosmos-sdk/x/params/types"
"github.com/stretchr/testify/suite"
"github.com/0glabs/0g-chain/app"
bep3types "github.com/0glabs/0g-chain/x/bep3/types"
cdptypes "github.com/0glabs/0g-chain/x/cdp/types"
"github.com/0glabs/0g-chain/x/committee/types"
pricefeedtypes "github.com/0glabs/0g-chain/x/pricefeed/types"
)
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))
}