|
| 1 | +#!/usr/bin/env python3 |
| 2 | +# Licensed under CC0 (Public domain) |
| 3 | + |
| 4 | +# Test that name_show displays expired names if allow_expired = true, |
| 5 | +# and otherwise throws "not found" errors (if allow_expired = false). |
| 6 | + |
| 7 | +from test_framework.names import NameTestFramework |
| 8 | +from test_framework.util import * |
| 9 | + |
| 10 | +class NameExpirationTest(NameTestFramework): |
| 11 | + |
| 12 | + def set_test_params(self): |
| 13 | + self.num_nodes = 2 |
| 14 | + self.setup_name_test([ |
| 15 | + ["-allowexpired"], |
| 16 | + ["-noallowexpired"] |
| 17 | + ]) |
| 18 | + |
| 19 | + def run_test(self): |
| 20 | + idx_allow = 0 |
| 21 | + idx_disallow = 1 |
| 22 | + node = self.nodes[idx_allow] |
| 23 | + node_disallow = self.nodes[idx_disallow] |
| 24 | + node.generate(200) |
| 25 | + |
| 26 | + self.log.info("Begin registration of two names.") |
| 27 | + # "d/active" and (2) "d/expired". |
| 28 | + # "d/active" will be renewed. |
| 29 | + # "d/expired" will be let to lapse. |
| 30 | + # |
| 31 | + # To look up "d/expired" should either succeed or throw an error, |
| 32 | + # depending on the values of (1) the JSON option allowExpired |
| 33 | + # and (2) the command-line parameter -allowexpired. |
| 34 | + # Looking up "d/active" should always succeed regardless. |
| 35 | + new_active = node.name_new("d/active") |
| 36 | + new_expired = node.name_new("d/expired") |
| 37 | + node.generate(12) |
| 38 | + |
| 39 | + self.log.info("Register the names.") |
| 40 | + self.firstupdateName(0, "d/active", new_active, "value") |
| 41 | + self.firstupdateName(0, "d/expired", new_expired, "value") |
| 42 | + node.generate(1) |
| 43 | + # names on regtest expire after 30 blocks |
| 44 | + self.log.info("Wait 1 block, make sure domains registered.") |
| 45 | + self.checkName(0, "d/active", "value", 30, False) |
| 46 | + self.checkName(0, "d/expired", "value", 30, False) |
| 47 | + |
| 48 | + self.log.info("Let half a registration interval pass.") |
| 49 | + node.generate(15) |
| 50 | + |
| 51 | + self.log.info("Renew d/active.") |
| 52 | + node.name_update("d/active", "renewed") |
| 53 | + # Don't renew d/expired. |
| 54 | + self.log.info("Let d/expired lapse.") |
| 55 | + node.generate(16) |
| 56 | + # 30 - 15 = 15 |
| 57 | + |
| 58 | + self.log.info("Check default behaviors.") |
| 59 | + self.sync_blocks(self.nodes) |
| 60 | + self.checkName(idx_allow, "d/expired", "value", -1, True) |
| 61 | + assert_raises_rpc_error(-4, 'name not found', |
| 62 | + node_disallow.name_show, "d/expired") |
| 63 | + |
| 64 | + self.log.info("Check positive JSON overrides.") |
| 65 | + # checkName only accepts one parameter, use checkNameData |
| 66 | + self.checkNameData( |
| 67 | + node.name_show("d/expired", {"allowExpired": True}), |
| 68 | + "d/expired", "value", -1, True) |
| 69 | + self.checkNameData( |
| 70 | + node_disallow.name_show("d/expired", {"allowExpired": True}), |
| 71 | + "d/expired", "value", -1, True) |
| 72 | + |
| 73 | + self.log.info("Check negative JSON overrides.") |
| 74 | + assert_raises_rpc_error(-4, 'name not found', |
| 75 | + node.name_show, "d/expired", {"allowExpired": False}) |
| 76 | + assert_raises_rpc_error(-4, 'name not found', |
| 77 | + node_disallow.name_show, "d/expired", {"allowExpired": False}) |
| 78 | + |
| 79 | +if __name__ == '__main__': |
| 80 | + NameExpirationTest ().main () |
0 commit comments