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")