|
6 | 6 |
|
7 | 7 | from time import sleep |
8 | 8 |
|
9 | | -from test_framework.mininode import network_thread_start |
10 | 9 | from test_framework.test_framework import PivxTestFramework |
11 | | -from test_framework.util import connect_nodes_bi, p2p_port |
12 | | -from fake_stake.util import TestNode |
| 10 | +from test_framework.util import connect_nodes_bi, set_node_times, assert_equal, \ |
| 11 | + set_spork, get_spork, is_spork_active, activate_spork, deactivate_spork |
13 | 12 |
|
14 | 13 |
|
15 | 14 | class PIVX_RPCSporkTest(PivxTestFramework): |
| 15 | + |
16 | 16 | def set_test_params(self): |
17 | 17 | self.setup_clean_chain = True |
18 | 18 | self.num_nodes = 2 |
19 | 19 | self.extra_args = [['-staking=1']] * self.num_nodes |
20 | 20 | self.extra_args[0].append('-sporkkey=932HEevBSujW2ud7RfB1YF91AFygbBRQj3de3LyaCRqNzKKgWXi') |
21 | 21 |
|
| 22 | + def setup_chain(self): |
| 23 | + # Start with clean chain |
| 24 | + self._initialize_chain_clean() |
| 25 | + self.enable_mocktime() |
22 | 26 |
|
23 | | - def setup_network(self): |
24 | | - ''' Can't rely on syncing all the nodes when staking=1 |
25 | | - :param: |
26 | | - :return: |
27 | | - ''' |
28 | | - self.setup_nodes() |
29 | | - for i in range(self.num_nodes - 1): |
30 | | - for j in range(i+1, self.num_nodes): |
31 | | - connect_nodes_bi(self.nodes, i, j) |
32 | | - |
33 | | - def init_test(self): |
34 | | - ''' Initializes test parameters |
35 | | - :param: |
36 | | - :return: |
37 | | - ''' |
| 27 | + def log_title(self): |
38 | 28 | title = "*** Starting %s ***" % self.__class__.__name__ |
39 | 29 | underline = "-" * len(title) |
40 | | - self.log.info("\n\n%s\n%s\n%s\n", title, underline, self.description) |
41 | | - |
42 | | - # Setup the p2p connections and start up the network thread. |
43 | | - self.test_nodes = [] |
44 | | - for i in range(self.num_nodes): |
45 | | - self.test_nodes.append(TestNode()) |
46 | | - self.test_nodes[i].peer_connect('127.0.0.1', p2p_port(i)) |
| 30 | + description = "Performs tests on the Spork RPC" |
| 31 | + self.log.info("\n\n%s\n%s\n%s\n", title, underline, description) |
47 | 32 |
|
48 | | - network_thread_start() # Start up network handling in another thread |
49 | | - self.node = self.nodes[0] |
50 | | - |
51 | | - # Let the test nodes get in sync |
52 | | - for i in range(self.num_nodes): |
53 | | - self.test_nodes[i].wait_for_verack() |
| 33 | + def run_test(self): |
| 34 | + self.log_title() |
| 35 | + set_node_times(self.nodes, self.mocktime) |
| 36 | + sporkName = "SPORK_8_MASTERNODE_PAYMENT_ENFORCEMENT" |
54 | 37 |
|
| 38 | + # 0 - check SPORK 8 status from node 1 (must be inactive) |
| 39 | + assert_equal(False, is_spork_active(self.nodes, 1, sporkName)) |
55 | 40 |
|
56 | | - def printDict(self, d): |
57 | | - self.log.info("{") |
58 | | - for k in d: |
59 | | - self.log.info(" %s = %d" % (k, d[k])) |
60 | | - self.log.info("}") |
| 41 | + # 1 - activate SPORK 8 with nodes[0] |
| 42 | + assert_equal("success", activate_spork(self.nodes, 0, sporkName)) |
| 43 | + sleep(1) |
| 44 | + # check SPORK 8 status from nodes[1] (must be active) |
| 45 | + assert_equal(True, is_spork_active(self.nodes, 1, sporkName)) |
61 | 46 |
|
| 47 | + # 2 - Adjust time to 1 sec in the future and deactivate SPORK 8 with node[0] |
| 48 | + self.mocktime += 1 |
| 49 | + set_node_times(self.nodes, self.mocktime) |
| 50 | + assert_equal("success", deactivate_spork(self.nodes, 0, sporkName)) |
| 51 | + sleep(1) |
| 52 | + # check SPORK 8 value from nodes[1] (must be inactive again) |
| 53 | + assert_equal(False, is_spork_active(self.nodes, 1, sporkName)) |
62 | 54 |
|
63 | | - def run_test(self): |
64 | | - self.description = "Performs tests on the Spork RPC" |
65 | | - # check spork values: |
66 | | - sporks = self.nodes[1].spork("show") |
67 | | - self.printDict(sporks) |
68 | | - active = self.nodes[1].spork("active") |
69 | | - assert(not active["SPORK_8_MASTERNODE_PAYMENT_ENFORCEMENT"]) |
70 | | - # activate SPORK 8 |
71 | | - new_value = 1563253447 |
72 | | - res = self.nodes[0].spork("SPORK_8_MASTERNODE_PAYMENT_ENFORCEMENT", new_value) |
73 | | - assert(res == "success") |
| 55 | + # 3 - Adjust time to 1 sec in the future and set new value (mocktime) for SPORK 8 with node[0] |
| 56 | + self.mocktime += 1 |
| 57 | + set_node_times(self.nodes, self.mocktime) |
| 58 | + assert_equal("success", set_spork(self.nodes, 0, sporkName, self.mocktime)) |
74 | 59 | sleep(1) |
75 | | - self.sync_all() |
76 | | - sporks = self.nodes[1].spork("show") |
77 | | - self.printDict(sporks) |
78 | | - assert(sporks["SPORK_8_MASTERNODE_PAYMENT_ENFORCEMENT"] == new_value) |
79 | | - active = self.nodes[0].spork("active") |
80 | | - assert (active["SPORK_8_MASTERNODE_PAYMENT_ENFORCEMENT"]) |
| 60 | + # check SPORK 8 value from nodes[1] (must be equal to mocktime) |
| 61 | + assert_equal(self.mocktime, get_spork(self.nodes, 1, sporkName)) |
| 62 | + |
| 63 | + # 4 - Stop nodes and check value again after restart |
81 | 64 | self.log.info("Stopping nodes...") |
82 | 65 | self.stop_nodes() |
83 | 66 | self.log.info("Restarting node 1...") |
84 | 67 | self.start_node(1, []) |
85 | | - sporks = self.nodes[1].spork("show") |
86 | | - self.printDict(sporks) |
87 | | - assert (sporks["SPORK_8_MASTERNODE_PAYMENT_ENFORCEMENT"] == new_value) |
| 68 | + assert_equal(self.mocktime, get_spork(self.nodes, 1, sporkName)) |
| 69 | + self.log.info("%s: TEST PASSED" % self.__class__.__name__) |
88 | 70 |
|
89 | 71 |
|
90 | 72 |
|
|
0 commit comments