github.com/platonnetwork/platon-go@v0.7.6/cases/tests/ppos/test_configuration_verification.py (about)

     1  import time
     2  import json
     3  from copy import copy
     4  
     5  import pytest
     6  from dacite import from_dict
     7  from client_sdk_python import Web3
     8  from tests.lib.genesis import Genesis
     9  from environment.node import Node
    10  
    11  
    12  def assert_error_deploy(env: Node, genesis_file, msg="Error config"):
    13      env.clean_db()
    14      is_success, err_msg = env.deploy_me(genesis_file)
    15      print(is_success)
    16      assert not is_success, "{}-{}".format(msg, err_msg)
    17  
    18  
    19  @pytest.fixture(scope="module", autouse=True)
    20  def stop(global_test_env):
    21      global_test_env.stop_all()
    22      yield
    23      # global_test_env.deploy_all()
    24  
    25  
    26  @pytest.fixture()
    27  def reset_cfg_env_node(global_test_env):
    28      new_env_node = copy(global_test_env.get_rand_node())
    29      cfg = global_test_env.cfg
    30      genesis_config = global_test_env.genesis_config
    31      backup_cfg = copy(cfg)
    32      genesis = from_dict(data_class=Genesis, data=genesis_config)
    33      id_cfg = id(cfg)
    34      setattr(new_env_node, "genesis", genesis)
    35      setattr(new_env_node, "genesis_path", global_test_env.cfg.env_tmp + "/genesis.json")
    36      yield new_env_node
    37      new_env_node.stop()
    38      if id_cfg != id(global_test_env.cfg) or id(genesis_config) != id(global_test_env.genesis_config):
    39          global_test_env.set_cfg(backup_cfg)
    40  
    41  
    42  @pytest.mark.P2
    43  @pytest.mark.parametrize('value', [2, 8, ""])
    44  def test_IP_PR_001_to_012(value, reset_cfg_env_node):
    45      """
    46      IP_PR_001:校验结算周期是共识周期的倍数<4
    47      IP_PR_002:增发周期是结算周期的倍数<4
    48      """
    49      genesis = reset_cfg_env_node.genesis
    50      genesis.economicModel.common.maxEpochMinutes = value
    51      genesis.to_file(reset_cfg_env_node.genesis_path)
    52      assert_error_deploy(reset_cfg_env_node, reset_cfg_env_node.genesis_path, "Multiple of abnormal billing cycle")
    53  
    54  
    55  @pytest.mark.P2
    56  def test_IP_PR_003(reset_cfg_env_node):
    57      """
    58      IP_PR_003:备选验证人节点数小于验证节点数
    59      """
    60      genesis = reset_cfg_env_node.genesis
    61      genesis.economicModel.staking.maxValidators = 3
    62      genesis.to_file(reset_cfg_env_node.genesis_path)
    63      msg = "The number of alternate verifier nodes is less than the number of verified nodes"
    64      assert_error_deploy(reset_cfg_env_node, reset_cfg_env_node.genesis_path, msg)
    65  
    66  
    67  @pytest.mark.P2
    68  def test_IP_PR_004(reset_cfg_env_node):
    69      """
    70      正常范围内的质押Token数
    71      """
    72      value = Web3.toWei(1000000, "ether")
    73      genesis = reset_cfg_env_node.genesis
    74      genesis.economicModel.staking.stakeThreshold = value
    75      genesis.to_file(reset_cfg_env_node.genesis_path)
    76      reset_cfg_env_node.deploy_me(reset_cfg_env_node.genesis_path)
    77      config = reset_cfg_env_node.debug.economicConfig()
    78      assert value == config["staking"]["stakeThreshold"], "Inconsistent with the genesis file configuration amount"
    79  
    80  
    81  @pytest.mark.P2
    82  @pytest.mark.parametrize('value', [9, 0])
    83  def test_IP_PR_004_005(value, reset_cfg_env_node):
    84      """
    85      Abnormal pledge Token number
    86      1、创建验证人最低的质押Token数<10 * 10^18 von
    87      2、创建验证人最低的质押Token数 = 0
    88      """
    89      value = Web3.toWei(value, "ether")
    90      genesis = reset_cfg_env_node.genesis
    91      genesis.economicModel.staking.stakeThreshold = value
    92      new_file = reset_cfg_env_node.genesis_path
    93      genesis.to_file(new_file)
    94      assert_error_deploy(reset_cfg_env_node, new_file, "Abnormal pledge Token number")
    95  
    96  
    97  @pytest.mark.P2
    98  def test_IP_PR_006_1(reset_cfg_env_node):
    99      value = Web3.toWei(100, 'ether')
   100      genesis = reset_cfg_env_node.genesis
   101      genesis.economicModel.staking.operatingThreshold = value
   102      new_file = reset_cfg_env_node.genesis_path
   103      genesis.to_file(new_file)
   104      reset_cfg_env_node.deploy_me(new_file)
   105      config = reset_cfg_env_node.debug.economicConfig()
   106      assert value == config["staking"]["operatingThreshold"]
   107  
   108  
   109  @pytest.mark.P2
   110  @pytest.mark.parametrize('value', [9, 0])
   111  def test_IP_PR_006_2(value, reset_cfg_env_node):
   112      """
   113      修改每次委托及赎回的最低Token数
   114      1、委托人每次委托及赎回的最低Token数<10 * 10^18 von
   115      2、委托人每次委托及赎回的最低Token数 = 0
   116      """
   117      value = Web3.toWei(value, 'ether')
   118      genesis = reset_cfg_env_node.genesis
   119      genesis.economicModel.staking.operatingThreshold = value
   120      new_file = reset_cfg_env_node.genesis_path
   121      genesis.to_file(new_file)
   122      assert_error_deploy(reset_cfg_env_node, new_file, "The abnormal redemption amount")
   123  
   124  
   125  @pytest.mark.P2
   126  def test_IP_PR_007_1(reset_cfg_env_node):
   127      """
   128      正常范围内的犹豫期(多少个结算周期)
   129      """
   130      value = 3
   131      genesis = reset_cfg_env_node.genesis
   132      genesis.economicModel.staking.hesitateRatio = value
   133      new_file = reset_cfg_env_node.genesis_path
   134      genesis.to_file(new_file)
   135      reset_cfg_env_node.deploy_me(new_file)
   136      config = reset_cfg_env_node.debug.economicConfig()
   137      assert value == config["staking"]["hesitateRatio"]
   138  
   139  
   140  @pytest.mark.P2
   141  @pytest.mark.parametrize('value', [-1, 0, ""])
   142  def test_IP_PR_007(value, reset_cfg_env_node):
   143      """
   144      修改犹豫期(多少个结算周期)
   145      1、犹豫期(多少个结算周期)<=0
   146      2、犹豫期(多少个结算周期)=0
   147      """
   148      genesis = reset_cfg_env_node.genesis
   149      genesis.economicModel.staking.hesitateRatio = value
   150      new_file = reset_cfg_env_node.genesis_path
   151      genesis.to_file(new_file)
   152      assert_error_deploy(reset_cfg_env_node, new_file, "An abnormal billing cycle")
   153  
   154  
   155  @pytest.mark.P2
   156  def test_IP_PR_008_1(reset_cfg_env_node):
   157      """
   158      正常范围内的节点质押退回锁定周期
   159      """
   160      value = 3
   161      genesis = reset_cfg_env_node.genesis
   162      genesis.economicModel.staking.unStakeFreezeDuration = value
   163      new_file = reset_cfg_env_node.genesis_path
   164      genesis.to_file(new_file)
   165      reset_cfg_env_node.deploy_me(new_file)
   166      config = reset_cfg_env_node.debug.economicConfig()
   167      assert value == config["staking"]["unStakeFreezeDuration"]
   168  
   169  
   170  @pytest.mark.P2
   171  @pytest.mark.parametrize('value', [-1, 0, ""])
   172  def test_IP_PR_008_2(value, reset_cfg_env_node):
   173      """
   174      修改点质押退回锁定周期
   175      1、节点质押退回锁定周期<0
   176      2、节点质押退回锁定周期=0
   177      """
   178      genesis = reset_cfg_env_node.genesis
   179      genesis.economicModel.staking.unStakeFreezeDuration = value
   180      new_file = reset_cfg_env_node.genesis_path
   181      genesis.to_file(new_file)
   182      assert_error_deploy(reset_cfg_env_node, new_file, "Abnormal pledge return lock cycle")
   183  
   184  
   185  @pytest.mark.P2
   186  def test_IP_PR_009_1(reset_cfg_env_node):
   187      """
   188      正常范围内的基金会分配年
   189      """
   190      value = 3
   191      genesis = reset_cfg_env_node.genesis
   192      genesis.economicModel.reward.platONFoundationYear = value
   193      new_file = reset_cfg_env_node.genesis_path
   194      genesis.to_file(new_file)
   195      reset_cfg_env_node.deploy_me(new_file)
   196      config = reset_cfg_env_node.debug.economicConfig()
   197      assert value == config["reward"]["platonFoundationYear"]
   198  
   199  
   200  @pytest.mark.P2
   201  @pytest.mark.parametrize('value', [-1, 0, ""])
   202  def test_IP_PR_009(value, reset_cfg_env_node):
   203      """
   204      修改基金会分配年
   205      1、基金会分配年<0
   206      2、基金会分配年=0
   207      """
   208      genesis = reset_cfg_env_node.genesis
   209      genesis.economicModel.reward.platONFoundationYear = value
   210      new_file = reset_cfg_env_node.genesis_path
   211      genesis.to_file(new_file)
   212      assert_error_deploy(reset_cfg_env_node, new_file, "Abnormal fund allocation year")
   213  
   214  
   215  @pytest.mark.P2
   216  @pytest.mark.parametrize('value', [40, 0, 100])
   217  def test_IP_PR_011(reset_cfg_env_node, value):
   218      """
   219      正常范围内的奖励池分配给出块奖励的比例
   220      IP_PR_011:奖励池分配给出块奖励的比例=0
   221      IP_PR_013:奖励池分配给出块奖励的比例=100
   222      """
   223      genesis = reset_cfg_env_node.genesis
   224      genesis.economicModel.reward.newBlockRate = value
   225      new_file = reset_cfg_env_node.genesis_path
   226      genesis.to_file(new_file)
   227      reset_cfg_env_node.deploy_me(new_file)
   228      config = reset_cfg_env_node.debug.economicConfig()
   229      assert value == config["reward"]["newBlockRate"]
   230  
   231  
   232  @pytest.mark.P2
   233  @pytest.mark.parametrize('value', [-1, 110, ""])
   234  def test_IP_PR_010_012(reset_cfg_env_node, value):
   235      """
   236      IP_PR_010:奖励池分配给出块奖励的比例<0
   237      IP_PR_012:奖励池分配给出块奖励的比例>100
   238      """
   239      genesis = reset_cfg_env_node.genesis
   240      genesis.economicModel.reward.newBlockRate = value
   241      new_file = reset_cfg_env_node.genesis_path
   242      genesis.to_file(new_file)
   243      assert_error_deploy(reset_cfg_env_node, new_file, "Abnormal reward pool allocation")
   244  
   245  
   246  @pytest.mark.P2
   247  @pytest.mark.parametrize('value', ["ss", ""])
   248  def test_IP_CP_001(value, reset_cfg_env_node):
   249      """
   250      创世文件链参数验证
   251      修改eip155Block参数字符串
   252      修改eip155Block参数空值
   253      """
   254      genesis = reset_cfg_env_node.genesis
   255      genesis.config.eip155Block = value
   256      new_file = reset_cfg_env_node.genesis_path
   257      genesis.to_file(new_file)
   258      assert_error_deploy(reset_cfg_env_node, new_file, "Abnormal eip155Block")
   259  
   260  
   261  @pytest.mark.P2
   262  @pytest.mark.parametrize('value', ["ss", ""])
   263  def test_IP_CP_002_amount(reset_cfg_env_node, value):
   264      """
   265      创世文件共识参数验证
   266      :return:
   267      """
   268      genesis = reset_cfg_env_node.genesis
   269      genesis.config.cbft.amount = value
   270      new_file = reset_cfg_env_node.genesis_path
   271      genesis.to_file(new_file)
   272      assert_error_deploy(reset_cfg_env_node, new_file, "Abnormal amount")
   273  
   274  
   275  @pytest.mark.P2
   276  @pytest.mark.parametrize('value', [0.1, "ss", ""])
   277  def test_IP_CP_002_validator_mode(reset_cfg_env_node, value):
   278      """
   279      创世文件共识参数验证
   280      :return:
   281      """
   282      if value == "":
   283          genesis = reset_cfg_env_node.genesis
   284          genesis.config.cbft.validatorMode = value
   285          new_file = reset_cfg_env_node.genesis_path
   286          genesis.to_file(new_file)
   287          reset_cfg_env_node.deploy_me(new_file)
   288      else:
   289          genesis = reset_cfg_env_node.genesis
   290          genesis.config.cbft.validatorMode = value
   291          new_file = reset_cfg_env_node.genesis_path
   292          genesis.to_file(new_file)
   293          assert_error_deploy(reset_cfg_env_node, new_file, "Abnormal validatorMode")
   294  
   295  
   296  @pytest.mark.P2
   297  @pytest.mark.parametrize('value', [0.1, "ss", ""])
   298  def test_IP_CP_002_period(reset_cfg_env_node, value):
   299      """
   300      创世文件共识参数验证
   301      :return:
   302      """
   303      genesis = reset_cfg_env_node.genesis
   304      genesis.config.cbft.period = value
   305      new_file = reset_cfg_env_node.genesis_path
   306      genesis.to_file(new_file)
   307      assert_error_deploy(reset_cfg_env_node, new_file, "Abnormal validatorMode")
   308  
   309  
   310  def test_IP_CP_003_1(reset_cfg_env_node):
   311      """
   312      创世文件经济参数验证
   313      """
   314      genesis = reset_cfg_env_node.genesis
   315      genesis.economicModel.common.additionalCycleTime = ""
   316      new_file = reset_cfg_env_node.genesis_path
   317      genesis.to_file(new_file)
   318      assert_error_deploy(reset_cfg_env_node, new_file, "Abnormal economicModel")
   319  
   320  
   321  @pytest.mark.P2
   322  def test_IP_CP_003_2(reset_cfg_env_node):
   323      genesis = reset_cfg_env_node.genesis
   324      genesis.economicModel.innerAcc.cdfAccount = ""
   325      new_file = reset_cfg_env_node.genesis_path
   326      genesis.to_file(new_file)
   327      assert_error_deploy(reset_cfg_env_node, new_file, "Abnormal economicModel")
   328  
   329  
   330  @pytest.mark.P2
   331  @pytest.mark.parametrize("key", ["slashFractionDuplicateSign", "duplicateSignReportReward", "slashBlocksReward", "maxEvidenceAge"])
   332  def test_IP_CP_004(reset_cfg_env_node, key):
   333      """
   334      创世文件处罚参数验证
   335      :return:
   336      """
   337      genesis = reset_cfg_env_node.genesis
   338      setattr(genesis.economicModel.slashing, key, "")
   339      new_file = reset_cfg_env_node.genesis_path
   340      genesis.to_file(new_file)
   341      assert_error_deploy(reset_cfg_env_node, new_file, "Abnormal Slashing")
   342  
   343  
   344  @pytest.mark.P2
   345  @pytest.mark.parametrize('value', [0.1, "ss", ""])
   346  def test_IP_CP_005(reset_cfg_env_node, value):
   347      """
   348      创世文件共识参数验证
   349      :return:
   350      """
   351      genesis = reset_cfg_env_node.genesis
   352      genesis.config.chainId = value
   353      new_file = reset_cfg_env_node.genesis_path
   354      genesis.to_file(new_file)
   355      assert_error_deploy(reset_cfg_env_node, new_file, "Abnormal chain id")