github.com/klaytn/klaytn@v1.10.2/cmd/utils/nodecmd/flags_test.go (about) 1 // Modifications Copyright 2019 The klaytn Authors 2 // Copyright 2016 The go-ethereum Authors 3 // This file is part of go-ethereum. 4 // 5 // go-ethereum is free software: you can redistribute it and/or modify 6 // it under the terms of the GNU General Public License as published by 7 // the Free Software Foundation, either version 3 of the License, or 8 // (at your option) any later version. 9 // 10 // go-ethereum is distributed in the hope that it will be useful, 11 // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 // GNU General Public License for more details. 14 // 15 // You should have received a copy of the GNU General Public License 16 // along with go-ethereum. If not, see <http://www.gnu.org/licenses/>. 17 // 18 // This file is derived from cmd/geth/genesis_test.go (2018/06/04). 19 // Modified and improved for the klaytn development. 20 21 package nodecmd 22 23 import ( 24 "io/ioutil" 25 "os" 26 "path/filepath" 27 "testing" 28 ) 29 30 var genesis = `{"config":{"chainId":2019,"istanbul":{"epoch":30,"policy":2,"sub":13},"unitPrice":25000000000,"deriveShaImpl":2,"governance":{"governingNode":"0xdddfb991127b43e209c2f8ed08b8b3d0b5843d36","governanceMode":"single","reward":{"mintingAmount":9600000000000000000,"ratio":"34/54/12","useGiniCoeff":false,"deferredTxFee":true,"stakingUpdateInterval":60,"proposerUpdateInterval":30,"minimumStake":5000000}}},"timestamp":"0x5ce33d6e","extraData":"0x0000000000000000000000000000000000000000000000000000000000000000f89af85494dddfb991127b43e209c2f8ed08b8b3d0b5843d3694195ba9cc787b00796a7ae6356e5b656d4360353794777fd033b5e3bcaad6006bc9f481ffed6b83cf5a94d473284239f704adccd24647c7ca132992a28973b8410000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0","governanceData":null,"blockScore":"0x1","alloc":{"195ba9cc787b00796a7ae6356e5b656d43603537":{"balance":"0x446c3b15f9926687d2c40534fdb564000000000000"},"777fd033b5e3bcaad6006bc9f481ffed6b83cf5a":{"balance":"0x446c3b15f9926687d2c40534fdb564000000000000"},"d473284239f704adccd24647c7ca132992a28973":{"balance":"0x446c3b15f9926687d2c40534fdb564000000000000"},"dddfb991127b43e209c2f8ed08b8b3d0b5843d36":{"balance":"0x446c3b15f9926687d2c40534fdb564000000000000"},"f4316f69d9522667c0674afcd8638288489f0333":{"balance":"0x446c3b15f9926687d2c40534fdb564000000000000"}},"number":"0x0","gasUsed":"0x0","parentHash":"0x0000000000000000000000000000000000000000000000000000000000000000"}` 31 32 const ( 33 FlagTypeBoolean = iota 34 FlagTypeArgument 35 ) 36 37 const ( 38 ErrorIncorrectUsage = iota 39 ErrorInvalidValue 40 ErrorFatal 41 // TODO-Klaytn-Node fix the configuration to filter wrong input flags before the klay server is launched 42 NonError // This error case expects an error, but currently it does not filter the wrong value. 43 ) 44 45 var ( 46 commonThreeErrors = []string{"abcdefg", "1234567", "!@#$%^&"} 47 commonTwoErrors = []string{"abcdefg", "!@#$%^&"} 48 ) 49 50 var flagsWithValues = []struct { 51 flag string 52 flagType uint16 53 values []string 54 wrongValues []string 55 errors []int 56 }{ 57 // TODO-Klaytn-Node the flag is not defined on any klay binaries 58 //{ 59 // flag: "--networktype", 60 // flagType: FlagTypeArgument, 61 // // values: []string{"mn", "scn"}, 62 // values: []string{}, 63 // wrongValues: []string{"baobab", "abcdefg", "1234567", "!@#$%^&"}, 64 // errors: []string{}, 65 //}, 66 { 67 flag: "--dbtype", 68 flagType: FlagTypeArgument, 69 values: []string{"LevelDB", "BadgerDB", "MemoryDB", "DynamoDBS3"}, 70 wrongValues: append(commonThreeErrors, "oracle"), 71 errors: []int{NonError, NonError, NonError, NonError}, 72 }, 73 { 74 flag: "--srvtype", 75 flagType: FlagTypeArgument, 76 values: []string{"http", "fasthttp"}, 77 wrongValues: commonThreeErrors, 78 errors: []int{NonError, NonError, NonError}, 79 }, 80 { 81 flag: "--keystore", 82 flagType: FlagTypeArgument, 83 values: []string{""}, 84 wrongValues: []string{}, 85 errors: []int{}, 86 }, 87 { 88 flag: "--networkid", 89 flagType: FlagTypeArgument, 90 values: []string{"1", "1000", "1001", "12312"}, 91 wrongValues: commonTwoErrors, 92 errors: []int{ErrorInvalidValue, ErrorInvalidValue}, 93 }, 94 { 95 flag: "--identity", 96 flagType: FlagTypeArgument, 97 values: []string{"abc", "abde-", "oai121"}, 98 wrongValues: []string{}, 99 errors: []int{}, 100 }, 101 //TODO-Klaytn-Node the flag is not defined on any klay binaries 102 //{ 103 // flag: "--docroot", 104 // flagType: FlagTypeBoolean, 105 // values: []string{}, 106 //}, 107 { 108 flag: "--syncmode", 109 flagType: FlagTypeArgument, 110 values: []string{"full"}, //[]string{"fast", "full"}, 111 wrongValues: commonThreeErrors, 112 errors: []int{ErrorInvalidValue, ErrorInvalidValue, ErrorInvalidValue}, 113 }, 114 { 115 flag: "--gcmode", 116 flagType: FlagTypeArgument, 117 values: []string{"full", "archive"}, 118 wrongValues: commonThreeErrors, 119 errors: []int{ErrorFatal, ErrorFatal, ErrorFatal}, 120 }, 121 { 122 flag: "--lightkdf", 123 flagType: FlagTypeBoolean, 124 }, 125 { 126 flag: "--txpool.nolocals", 127 flagType: FlagTypeBoolean, 128 }, 129 { 130 flag: "--txpool.journal", 131 flagType: FlagTypeArgument, 132 values: []string{"transactions.rlp"}, 133 wrongValues: []string{}, 134 errors: []int{}, 135 }, 136 { 137 flag: "--txpool.journal-interval", 138 flagType: FlagTypeArgument, 139 values: []string{"1h0m0s", "0h0m0s", "0h0m1s", "0h1m0s", "0.5h0.5m0.5s"}, 140 wrongValues: commonThreeErrors, 141 errors: []int{ErrorInvalidValue, ErrorInvalidValue, ErrorInvalidValue}, 142 }, 143 { 144 flag: "--txpool.pricelimit", 145 flagType: FlagTypeArgument, 146 values: []string{"1"}, 147 wrongValues: commonTwoErrors, 148 errors: []int{ErrorInvalidValue, ErrorInvalidValue}, 149 }, 150 { 151 flag: "--txpool.pricebump", 152 flagType: FlagTypeArgument, 153 values: []string{"10"}, 154 wrongValues: commonTwoErrors, 155 errors: []int{ErrorInvalidValue, ErrorInvalidValue}, 156 }, 157 { 158 flag: "--txpool.exec-slots.account", 159 flagType: FlagTypeArgument, 160 values: []string{"16"}, 161 wrongValues: commonTwoErrors, 162 errors: []int{ErrorInvalidValue, ErrorInvalidValue}, 163 }, 164 { 165 flag: "--txpool.exec-slots.all", 166 flagType: FlagTypeArgument, 167 values: []string{"4096"}, 168 wrongValues: commonTwoErrors, 169 errors: []int{ErrorInvalidValue, ErrorInvalidValue}, 170 }, 171 { 172 flag: "--txpool.nonexec-slots.account", 173 flagType: FlagTypeArgument, 174 values: []string{"64"}, 175 wrongValues: commonTwoErrors, 176 errors: []int{ErrorInvalidValue, ErrorInvalidValue}, 177 }, 178 { 179 flag: "--txpool.nonexec-slots.all", 180 flagType: FlagTypeArgument, 181 values: []string{"1024"}, 182 wrongValues: commonTwoErrors, 183 errors: []int{ErrorInvalidValue, ErrorInvalidValue}, 184 }, 185 //TODO-Klaytn-Node the flag is not defined on any klay binaries 186 //{ 187 // flag: "--txpool.keeplocals", 188 // flagType: FlagTypeBoolean, 189 // values: []string{}, 190 //}, 191 { 192 flag: "--txpool.lifetime", 193 flagType: FlagTypeArgument, 194 values: []string{"0h20m0s"}, 195 wrongValues: commonThreeErrors, 196 errors: []int{ErrorInvalidValue, ErrorInvalidValue, ErrorInvalidValue}, 197 }, 198 { 199 flag: "--db.single", 200 flagType: FlagTypeBoolean, 201 }, 202 { 203 flag: "--db.num-statetrie-shards", 204 flagType: FlagTypeArgument, 205 // values: []string{"1", "2"}, 206 values: []string{"1"}, 207 wrongValues: commonTwoErrors, 208 errors: []int{ErrorInvalidValue, ErrorInvalidValue}, 209 }, 210 { 211 flag: "--db.leveldb.cache-size", 212 flagType: FlagTypeArgument, 213 values: []string{"768"}, 214 wrongValues: commonTwoErrors, 215 errors: []int{ErrorInvalidValue, ErrorInvalidValue}, 216 }, 217 { 218 flag: "--db.leveldb.compression", 219 flagType: FlagTypeArgument, 220 values: []string{"0", "1", "2", "3"}, 221 wrongValues: commonTwoErrors, 222 errors: []int{ErrorInvalidValue, ErrorInvalidValue}, 223 }, 224 { 225 flag: "--db.leveldb.no-buffer-pool", 226 flagType: FlagTypeBoolean, 227 }, 228 { 229 flag: "--db.no-parallel-write", 230 flagType: FlagTypeBoolean, 231 }, 232 { 233 flag: "--state.cache-size", 234 flagType: FlagTypeArgument, 235 values: []string{"64", "128", "256", "512"}, 236 wrongValues: commonTwoErrors, 237 errors: []int{ErrorInvalidValue, ErrorInvalidValue}, 238 }, 239 { 240 flag: "--state.block-interval", 241 flagType: FlagTypeArgument, 242 values: []string{"64", "128", "256"}, 243 wrongValues: commonTwoErrors, 244 errors: []int{ErrorInvalidValue, ErrorInvalidValue}, 245 }, 246 { 247 flag: "--cache.type", 248 flagType: FlagTypeArgument, 249 values: []string{"0", "1", "2"}, 250 wrongValues: commonTwoErrors, 251 errors: []int{ErrorInvalidValue, ErrorInvalidValue}, 252 }, 253 { 254 flag: "--cache.scale", 255 flagType: FlagTypeArgument, 256 values: []string{"100"}, 257 wrongValues: commonTwoErrors, 258 errors: []int{ErrorInvalidValue, ErrorInvalidValue}, 259 }, 260 { 261 flag: "--cache.level", 262 flagType: FlagTypeBoolean, 263 values: []string{"saving", "normal", "extreme"}, 264 wrongValues: commonThreeErrors, 265 errors: []int{ErrorInvalidValue, ErrorInvalidValue, ErrorInvalidValue}, 266 }, 267 { 268 flag: "--cache.memory", 269 flagType: FlagTypeArgument, 270 values: []string{"16"}, 271 wrongValues: commonTwoErrors, 272 errors: []int{ErrorInvalidValue, ErrorInvalidValue}, 273 }, 274 { 275 flag: "--state.trie-cache-limit", 276 flagType: FlagTypeArgument, 277 values: []string{"512", "1024", "2048", "4096"}, 278 wrongValues: commonTwoErrors, 279 errors: []int{ErrorInvalidValue, ErrorInvalidValue}, 280 }, 281 { 282 flag: "--sendertxhashindexing", 283 flagType: FlagTypeBoolean, 284 }, 285 { 286 flag: "--childchainindexing", 287 flagType: FlagTypeBoolean, 288 }, 289 { 290 flag: "--targetgaslimit", 291 flagType: FlagTypeArgument, 292 values: []string{"4712388"}, 293 wrongValues: commonTwoErrors, 294 errors: []int{ErrorInvalidValue, ErrorInvalidValue}, 295 }, 296 { 297 flag: "--scsigner", 298 flagType: FlagTypeArgument, 299 values: []string{"0x777fd033b5e3bcaad6006bc9f481ffed6b83cf5a"}, 300 wrongValues: commonThreeErrors, 301 errors: []int{ErrorFatal, ErrorFatal, ErrorFatal}, 302 }, 303 { 304 flag: "--rewardbase", 305 flagType: FlagTypeArgument, 306 values: []string{"0x777fd033b5e3bcaad6006bc9f481ffed6b83cf5a"}, 307 wrongValues: commonThreeErrors, 308 errors: []int{ErrorFatal, ErrorFatal, ErrorFatal}, 309 }, 310 { 311 flag: "--extradata", 312 flagType: FlagTypeArgument, 313 values: []string{"0x0000000000000000000000000000000000000000000000000000000000000000f89af85494dddfb991127b43e209c2f8ed08b8b3d0b5843d3694195ba9cc787b00796a7ae6356e5b656d4360353794777fd033b5e3bcaad6006bc9f481ffed6b83cf5a94d473284239f704adccd24647c7ca132992a28973b8410000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0"}, 314 wrongValues: []string{}, 315 errors: []int{}, 316 }, 317 { 318 flag: "--txresend.interval", 319 flagType: FlagTypeArgument, 320 values: []string{"3", "5", "7"}, 321 wrongValues: commonTwoErrors, 322 errors: []int{ErrorInvalidValue, ErrorInvalidValue}, 323 }, 324 { 325 flag: "--txresend.max-count", 326 flagType: FlagTypeArgument, 327 values: []string{"1000", "2000"}, 328 wrongValues: commonTwoErrors, 329 errors: []int{ErrorInvalidValue, ErrorInvalidValue}, 330 }, 331 { 332 flag: "--txresend.use-legacy", 333 flagType: FlagTypeBoolean, 334 }, 335 { 336 flag: "--unlock", 337 flagType: FlagTypeArgument, 338 values: []string{"", "0x0", "0x777fd033b5e3bcaad6006bc9f481ffed6b83cf5a"}, 339 wrongValues: []string{"abcdefg", "!@#$%^&", "0x921jfinowaae333"}, 340 errors: []int{NonError, NonError, NonError}, 341 }, 342 { 343 flag: "--password", 344 flagType: FlagTypeArgument, 345 values: []string{"abcd", "aoije091"}, 346 wrongValues: []string{}, 347 errors: []int{}, 348 }, 349 { 350 flag: "--vmdebug", 351 flagType: FlagTypeBoolean, 352 }, 353 { 354 flag: "--vmlog", 355 flagType: FlagTypeArgument, 356 values: []string{"0", "1", "2", "3"}, 357 wrongValues: append(commonThreeErrors, "4"), 358 errors: []int{NonError, NonError, NonError, NonError}, 359 }, 360 { 361 flag: "--metrics", 362 flagType: FlagTypeBoolean, 363 }, 364 { 365 flag: "--prometheus", 366 flagType: FlagTypeBoolean, 367 }, 368 { 369 flag: "--prometheusport", 370 flagType: FlagTypeArgument, 371 values: []string{"61001"}, 372 wrongValues: commonThreeErrors, 373 errors: []int{ErrorInvalidValue, NonError, ErrorInvalidValue}, 374 }, 375 { 376 flag: "--rpc", 377 flagType: FlagTypeBoolean, 378 }, 379 { 380 flag: "--rpcaddr", 381 flagType: FlagTypeArgument, 382 values: []string{"localhost", "123.123.123.123"}, 383 wrongValues: append(commonThreeErrors, "123.123.123.256"), 384 errors: []int{NonError, NonError, NonError, NonError}, 385 }, 386 { 387 flag: "--rpcport", 388 flagType: FlagTypeArgument, 389 values: []string{"8551"}, 390 wrongValues: commonThreeErrors, 391 errors: []int{ErrorInvalidValue, NonError, ErrorInvalidValue}, 392 }, 393 { 394 flag: "--rpccorsdomain", 395 flagType: FlagTypeArgument, 396 values: []string{"", "localhost", "123.123.123.123"}, 397 wrongValues: append(commonThreeErrors, "123.123.123.256"), 398 errors: []int{NonError, NonError, NonError, NonError}, 399 }, 400 { 401 flag: "--rpcvhosts", 402 flagType: FlagTypeArgument, 403 values: []string{"*"}, 404 wrongValues: commonThreeErrors, 405 errors: []int{NonError, NonError, NonError}, 406 }, 407 { 408 flag: "--rpcapi", 409 flagType: FlagTypeArgument, 410 values: []string{"", "klay", "klay,personal,istanbul,debug,miner"}, 411 wrongValues: commonThreeErrors, 412 errors: []int{NonError, NonError, NonError}, 413 }, 414 { 415 flag: "--ipcdisable", 416 flagType: FlagTypeBoolean, 417 }, 418 { 419 flag: "--ipcpath", 420 flagType: FlagTypeBoolean, 421 }, 422 { 423 flag: "--ws", 424 flagType: FlagTypeBoolean, 425 }, 426 { 427 flag: "--wsaddr", 428 flagType: FlagTypeArgument, 429 values: []string{"localhost"}, 430 wrongValues: commonThreeErrors, 431 errors: []int{NonError, NonError, NonError}, 432 }, 433 { 434 flag: "--wsport", 435 flagType: FlagTypeArgument, 436 values: []string{"8552"}, 437 wrongValues: commonThreeErrors, 438 errors: []int{NonError, NonError, NonError}, 439 }, 440 { 441 flag: "--grpc", 442 flagType: FlagTypeBoolean, 443 }, 444 { 445 flag: "--grpcaddr", 446 flagType: FlagTypeArgument, 447 values: []string{"localhost", "123.123.123.123"}, 448 wrongValues: commonThreeErrors, 449 errors: []int{NonError, NonError, NonError}, 450 }, 451 { 452 flag: "--grpcport", 453 flagType: FlagTypeArgument, 454 values: []string{"8553"}, 455 wrongValues: commonThreeErrors, 456 errors: []int{ErrorInvalidValue, NonError, ErrorInvalidValue}, 457 }, 458 { 459 flag: "--wsapi", 460 flagType: FlagTypeArgument, 461 values: []string{"", "klay", "klay,personal,istanbul,debug,miner"}, 462 wrongValues: commonThreeErrors, 463 errors: []int{NonError, NonError, NonError}, 464 }, 465 { 466 flag: "--wsorigins", 467 flagType: FlagTypeArgument, 468 values: []string{""}, 469 wrongValues: []string{}, 470 errors: []int{}, 471 }, 472 { 473 flag: "--exec", 474 flagType: FlagTypeArgument, 475 values: []string{"klay.blockNumber", "klat.getBlock(0)", "governance.chainConfig.governance.reward.proposerUpdateInterval"}, 476 wrongValues: commonThreeErrors, 477 errors: []int{NonError, NonError, NonError}, 478 }, 479 { 480 flag: "--preload", 481 flagType: FlagTypeArgument, 482 values: []string{"abc.js", "tmp.js", "tmp"}, 483 wrongValues: []string{}, 484 errors: []int{}, 485 }, 486 //TODO-Klaytn-Node the flag is not defined on any klay binaries 487 //{ 488 // flag: "--nodetype", 489 // flagType: FlagTypeArgument, 490 // values: []string{"cn", "pn", "en"}, 491 // wrongValues: []string{}, 492 // errors: []int{}, 493 //}, 494 { 495 flag: "--maxconnections", 496 flagType: FlagTypeArgument, 497 values: []string{"0", "30", "25000"}, 498 wrongValues: commonTwoErrors, 499 errors: []int{ErrorInvalidValue, ErrorInvalidValue}, 500 }, 501 { 502 flag: "--maxpendpeers", 503 flagType: FlagTypeArgument, 504 values: []string{"0", "30", "50"}, 505 wrongValues: commonTwoErrors, 506 errors: []int{ErrorInvalidValue, ErrorInvalidValue}, 507 }, 508 { 509 flag: "--port", 510 flagType: FlagTypeArgument, 511 values: []string{"32323", "30303"}, 512 wrongValues: commonThreeErrors, 513 errors: []int{ErrorInvalidValue, NonError, ErrorInvalidValue}, 514 }, 515 { 516 flag: "--subport", 517 flagType: FlagTypeArgument, 518 values: []string{"32324", "32325", "32327"}, 519 wrongValues: commonThreeErrors, 520 errors: []int{ErrorInvalidValue, NonError, ErrorInvalidValue}, 521 }, 522 { 523 flag: "--multichannel", 524 flagType: FlagTypeBoolean, 525 }, 526 { 527 flag: "--bootnodes", 528 flagType: FlagTypeArgument, 529 values: []string{"0xf4316f69d9522667c0674afcd8638288489f0333", "", "0xf4316f69d9522667c0674afcd8638288489f0333, d473284239f704adccd24647c7ca132992a28973"}, 530 wrongValues: []string{}, 531 errors: []int{}, 532 }, 533 { 534 flag: "--nodekey", 535 flagType: FlagTypeArgument, 536 values: []string{""}, 537 wrongValues: []string{}, 538 errors: []int{}, 539 }, 540 { 541 flag: "--nodekeyhex", 542 flagType: FlagTypeArgument, 543 values: []string{"8da4ef21b864d2cc526dbdb2a120bd2874c36c9d0a1fb7f8c63d7f7a8b41de8f"}, 544 wrongValues: commonThreeErrors, 545 errors: []int{ErrorFatal, ErrorFatal, ErrorFatal}, 546 }, 547 { 548 flag: "--nat", 549 flagType: FlagTypeArgument, 550 values: []string{"any", "none", "upnp", "pmp", "extip:127.0.0.1"}, 551 wrongValues: []string{}, 552 errors: []int{}, 553 }, 554 { 555 flag: "--nodiscover", 556 flagType: FlagTypeBoolean, 557 }, 558 { 559 flag: "--netrestrict", 560 flagType: FlagTypeArgument, 561 values: []string{}, 562 wrongValues: []string{}, 563 errors: []int{}, 564 }, 565 { 566 flag: "--chaintxperiod", 567 flagType: FlagTypeArgument, 568 values: []string{"1", "5", "100"}, 569 wrongValues: commonTwoErrors, 570 errors: []int{ErrorInvalidValue, ErrorInvalidValue}, 571 }, 572 { 573 flag: "--chaintxlimit", 574 flagType: FlagTypeArgument, 575 values: []string{"100", "200"}, 576 wrongValues: commonTwoErrors, 577 errors: []int{ErrorInvalidValue, ErrorInvalidValue}, 578 }, 579 { 580 flag: "--jspath", 581 flagType: FlagTypeArgument, 582 values: []string{".", "root/abc/efg"}, 583 wrongValues: commonThreeErrors, 584 errors: []int{NonError, NonError, NonError}, 585 }, 586 { 587 flag: "--baobab", 588 flagType: FlagTypeBoolean, 589 }, 590 //TODO-Klaytn-Node the flag is not defined on any klay binaries 591 //{ 592 // flag: "--bnaddr", 593 // flagType: FlagTypeArgument, 594 // values: []string{}, 595 // wrongValues: []string{}, 596 // errors: []int{}, 597 //}, 598 //TODO-Klaytn-Node the flag is not defined on any klay binaries 599 //{ 600 // flag: "--genkey", 601 // flagType: FlagTypeArgument, 602 // values: []string{}, 603 // wrongValues: []string{}, 604 // errors: []int{}, 605 //}, 606 //TODO-Klaytn-Node the flag is not defined on any klay binaries 607 //{ 608 // flag: "--writeaddress", 609 // flagType: FlagTypeBoolean, 610 //}, 611 { 612 flag: "--mainbridge", 613 flagType: FlagTypeBoolean, 614 }, 615 { 616 flag: "--subbridge", 617 flagType: FlagTypeBoolean, 618 }, 619 { 620 flag: "--mainbridgeport", 621 flagType: FlagTypeArgument, 622 values: []string{"50505", "23232"}, 623 wrongValues: commonThreeErrors, 624 errors: []int{ErrorInvalidValue, NonError, ErrorInvalidValue}, 625 }, 626 { 627 flag: "--subbridgeport", 628 flagType: FlagTypeArgument, 629 values: []string{"50505", "23232"}, 630 wrongValues: commonThreeErrors, 631 errors: []int{ErrorInvalidValue, NonError, ErrorInvalidValue}, 632 }, 633 { 634 flag: "--vtrecovery", 635 flagType: FlagTypeBoolean, 636 }, 637 { 638 flag: "--vtrecoveryinterval", 639 flagType: FlagTypeArgument, 640 values: []string{"60", "100", "200"}, 641 wrongValues: commonTwoErrors, 642 errors: []int{ErrorInvalidValue, ErrorInvalidValue}, 643 }, 644 { 645 flag: "--scnewaccount", 646 flagType: FlagTypeBoolean, 647 }, 648 { 649 flag: "--dbsyncer", 650 flagType: FlagTypeBoolean, 651 }, 652 { 653 flag: "--dbsyncer.db.host", 654 flagType: FlagTypeArgument, 655 values: []string{"localhost", "123.123.123.123", "127.0.0.1"}, 656 wrongValues: commonThreeErrors, 657 errors: []int{NonError, NonError, NonError}, 658 }, 659 { 660 flag: "--dbsyncer.db.port", 661 flagType: FlagTypeArgument, 662 values: []string{"3306", "32323"}, 663 wrongValues: commonThreeErrors, 664 errors: []int{NonError, NonError, NonError}, 665 }, 666 { 667 flag: "--dbsyncer.db.name", 668 flagType: FlagTypeBoolean, 669 }, 670 { 671 flag: "--dbsyncer.db.user", 672 flagType: FlagTypeBoolean, 673 }, 674 { 675 flag: "--dbsyncer.db.password", 676 flagType: FlagTypeArgument, 677 values: []string{"aboaise", "jaooao122!@", "18231@#!@412!"}, 678 wrongValues: []string{}, 679 errors: []int{}, 680 }, 681 { 682 flag: "--dbsyncer.logmode", 683 flagType: FlagTypeBoolean, 684 }, 685 { 686 flag: "--dbsyncer.db.max.idle", 687 flagType: FlagTypeArgument, 688 values: []string{"50", "100"}, 689 wrongValues: commonTwoErrors, 690 errors: []int{ErrorInvalidValue, ErrorInvalidValue}, 691 }, 692 { 693 flag: "--dbsyncer.db.max.open", 694 flagType: FlagTypeArgument, 695 values: []string{"30", "50", "100"}, 696 wrongValues: commonTwoErrors, 697 errors: []int{ErrorInvalidValue, ErrorInvalidValue}, 698 }, 699 { 700 flag: "--dbsyncer.db.max.lifetime", 701 flagType: FlagTypeArgument, 702 values: []string{"1h0m0s", "0h0m10s"}, 703 wrongValues: commonThreeErrors, 704 errors: []int{ErrorInvalidValue, ErrorInvalidValue, ErrorInvalidValue}, 705 }, 706 { 707 flag: "--dbsyncer.block.channel.size", 708 flagType: FlagTypeArgument, 709 values: []string{"5"}, 710 wrongValues: commonTwoErrors, 711 errors: []int{ErrorInvalidValue, ErrorInvalidValue}, 712 }, 713 { 714 flag: "--dbsyncer.mode", 715 flagType: FlagTypeArgument, 716 values: []string{"single", "multi", "context"}, 717 wrongValues: commonThreeErrors, 718 errors: []int{NonError, NonError, NonError}, 719 }, 720 { 721 flag: "--dbsyncer.genquery.th", 722 flagType: FlagTypeArgument, 723 values: []string{"50", "123"}, 724 wrongValues: commonTwoErrors, 725 errors: []int{ErrorInvalidValue, ErrorInvalidValue}, 726 }, 727 { 728 flag: "--dbsyncer.insert.th", 729 flagType: FlagTypeArgument, 730 values: []string{"30", "123"}, 731 wrongValues: commonTwoErrors, 732 errors: []int{ErrorInvalidValue, ErrorInvalidValue}, 733 }, 734 { 735 flag: "--dbsyncer.bulk.size", 736 flagType: FlagTypeArgument, 737 values: []string{"200"}, 738 wrongValues: commonTwoErrors, 739 errors: []int{ErrorInvalidValue, ErrorInvalidValue}, 740 }, 741 { 742 flag: "--dbsyncer.event.mode", 743 flagType: FlagTypeArgument, 744 values: []string{"block", "head"}, 745 wrongValues: commonThreeErrors, 746 errors: []int{NonError, NonError, NonError}, 747 }, 748 { 749 flag: "--dbsyncer.max.block.diff", 750 flagType: FlagTypeArgument, 751 values: []string{"0", "5", "100"}, 752 wrongValues: commonTwoErrors, 753 errors: []int{ErrorInvalidValue, ErrorInvalidValue}, 754 }, 755 { 756 flag: "--autorestart.daemon.path", 757 flagType: FlagTypeArgument, 758 values: []string{"~/klaytn/bin/kcnd", "~/klaytn/bin/kpnd", "~/klaytn/bin/kend"}, 759 wrongValues: commonThreeErrors, 760 errors: []int{NonError, NonError, NonError}, 761 }, 762 { 763 flag: "--autorestart.enable", 764 flagType: FlagTypeBoolean, 765 }, 766 { 767 flag: "--autorestart.timeout", 768 flagType: FlagTypeArgument, 769 values: []string{"10m", "60s", "1h"}, 770 wrongValues: commonThreeErrors, 771 errors: []int{ErrorInvalidValue, ErrorInvalidValue, ErrorInvalidValue}, 772 }, 773 } 774 775 func testFlags(t *testing.T, flag string, value string, idx int) { 776 datadir := tmpdir(t) 777 defer os.RemoveAll(datadir) 778 779 json := filepath.Join(datadir, "genesis.json") 780 if err := ioutil.WriteFile(json, []byte(genesis), 0o600); err != nil { 781 t.Fatalf("test %d: failed to write genesis file: %v", idx, err) 782 } 783 784 runKlay(t, "klay-test-flag", "--verbosity", "0", "--datadir", datadir, "init", json).WaitExit() 785 786 klay := runKlay(t, "klay-test-flag", "--datadir", datadir, flag, value) 787 klay.ExpectExit() 788 } 789 790 func testWrongFlags(t *testing.T, flag string, value string, idx int, expectedError string) { 791 datadir := tmpdir(t) 792 defer os.RemoveAll(datadir) 793 794 json := filepath.Join(datadir, "genesis.json") 795 if err := ioutil.WriteFile(json, []byte(genesis), 0o600); err != nil { 796 t.Fatalf("test %d: failed to write genesis file: %v", idx, err) 797 } 798 799 runKlay(t, "klay-test-flag", "--verbosity", "0", "--datadir", datadir, "init", json).WaitExit() 800 801 klay := runKlay(t, "klay-test-flag", "--datadir", datadir, flag, value) 802 klay.ExpectRegexp(expectedError) 803 } 804 805 func TestFlags(t *testing.T) { 806 expectedError := []string{ 807 "Incorrect Usage. flag provided but not defined: (.*)", 808 "Incorrect Usage. invalid value (.*)", 809 "Fatal:(.*)", 810 "(.*)", 811 } 812 for idx, fwv := range flagsWithValues { 813 switch fwv.flagType { 814 case FlagTypeBoolean: 815 t.Run("klay-test-flag"+fwv.flag, func(t *testing.T) { 816 testFlags(t, fwv.flag, "", idx) 817 }) 818 case FlagTypeArgument: 819 for _, item := range fwv.values { 820 t.Run("klay-test-flag"+fwv.flag+"-"+item, func(t *testing.T) { 821 testFlags(t, fwv.flag, item, idx) 822 }) 823 } 824 for idx2, wrongItem := range fwv.wrongValues { 825 t.Run("klay-test-flag"+fwv.flag+"-"+wrongItem, func(t *testing.T) { 826 testWrongFlags(t, fwv.flag, wrongItem, idx, expectedError[fwv.errors[idx2]]) 827 }) 828 } 829 } 830 } 831 }