Join GitHub today
GitHub is home to over 20 million developers working together to host and review code, manage projects, and build software together.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
Already on GitHub? Sign in to your account
[test] Add getblockchaininfo functional test #11370
Conversation
| + res = self.nodes[0].getblockchaininfo() | ||
| + # should have exact fields | ||
| + assert_equal(sorted(res.keys()), keys) | ||
| + |
jnewbery
Sep 20, 2017
Member
value: only if you're testing a meaningful value
type: I don't think we do this for other RPC methods, so I wouldn't bother
Thinking about this some more, perhaps we can add some utility method check_rpc_return_object(dict) which tests the presence and type of each field in the return object? Obviously not for this PR.
fanquake
added
the
Tests
label
Sep 19, 2017
promag
referenced this pull request
Sep 20, 2017
Merged
[rpc] getblockchaininfo: add size_on_disk, prune_target_size #11367
jnewbery
reviewed
Sep 20, 2017
concept ACK. Thanks for improving coverage here!
A few nits inline. Nothing blocking this from being merged if you don't want to take them.
| @@ -44,6 +45,38 @@ def run_test(self): | ||
| self._test_stopatheight() | ||
| assert self.nodes[0].verifychain(4, 0) | ||
| + def _test_getblockchaininfo(self): |
| + res = self.nodes[0].getblockchaininfo() | ||
| + # should have exact fields | ||
| + assert_equal(sorted(res.keys()), keys) | ||
| + |
jnewbery
Sep 20, 2017
Member
value: only if you're testing a meaningful value
type: I don't think we do this for other RPC methods, so I wouldn't bother
Thinking about this some more, perhaps we can add some utility method check_rpc_return_object(dict) which tests the presence and type of each field in the return object? Obviously not for this PR.
| + assert_equal(sorted(res.keys()), keys) | ||
| + | ||
| + # restart node with pruning enabled | ||
| + self.stop_node(0) |
jnewbery
Sep 20, 2017
Member
You can speed this test up by starting with pruning the first time, and then restart without pruning (saves one stop-start which is a slow operation). Do that by setting self.extra_args = [['-stopatheight=207', '-prune=1']] in set_test_params() and then setting self.extra_args = [['-stopatheight=207']] before restarting.
| + | ||
| + # restore node | ||
| + self.stop_node(0) | ||
| + self.start_node(0, self.extra_args[0]) |
jnewbery
Sep 20, 2017
Member
I think you can just use self.start_node(0). The default will use self.extra_args[0] for its args.
| @@ -44,6 +45,38 @@ def run_test(self): | ||
| self._test_stopatheight() | ||
| assert self.nodes[0].verifychain(4, 0) | ||
| + def _test_getblockchaininfo(self): |
| @@ -273,6 +273,11 @@ def stop_nodes(self): | ||
| # Wait for nodes to stop | ||
| node.wait_until_stopped() | ||
| + def restart_node(self, i): |
promag
Sep 20, 2017
Contributor
Convenient method to stop and start a node with the same arguments as before. If this gets ACK's I can push a commit to use where appropriate or submit this in a separate PR.
jnewbery
Sep 20, 2017
Member
Great! Ideally the stop and start methods in TestFramework would be methods on the TestNode class, and so would this, but we can clean that up later.
You can change this to:
def restart_node(self, i):
"""Stop and start a test node"""
self.stop_node(i)
self.start_node(i)As long as you also take my change to blockchain.py above.
jnewbery
reviewed
Sep 20, 2017
I like the new restart_node() helper function. A couple of comments inline.
| + assert res['pruneheight'] >= 0 | ||
| + | ||
| + # restart node | ||
| + self.extra_args[0] = ['-stopatheight=207'] |
jnewbery
Sep 20, 2017
Member
Sorry, I misled you here. You should use self.nodes[0].extra_args = .... The self.extra_args class variable is only used when instantiating the TestNode. That's important for restart_node()
| @@ -273,6 +273,11 @@ def stop_nodes(self): | ||
| # Wait for nodes to stop | ||
| node.wait_until_stopped() | ||
| + def restart_node(self, i): |
jnewbery
Sep 20, 2017
Member
Great! Ideally the stop and start methods in TestFramework would be methods on the TestNode class, and so would this, but we can clean that up later.
You can change this to:
def restart_node(self, i):
"""Stop and start a test node"""
self.stop_node(i)
self.start_node(i)As long as you also take my change to blockchain.py above.
promag
added some commits
Sep 19, 2017
| @@ -273,6 +273,11 @@ def stop_nodes(self): | ||
| # Wait for nodes to stop | ||
| node.wait_until_stopped() | ||
| + def restart_node(self, i, extra_args=None): |
promag
Sep 20, 2017
Contributor
@jnewbery added the option to override node.extra_args. I wonder if that this new extra_arg should be saved in node.
|
Noted for #11367, can update to include relevant checks (or vice versa, whichever goes in first I guess) |
|
Tested ACK f6ffb14 |
|
@promag @esotericnonsense - I think it's a good idea if you decide between yourselves which should go in first and then rebase the other on top of it (otherwise there's a risk they both get merged independently and no tests are added for #11367) |
|
I'll rebase on top, given that there seem to be a few niggles with #11367 this one can go in first. |
promag commentedSep 19, 2017
•
Edited 1 time
-
promag
Sep 19, 2017
Adds functional test for
getblockchaininfo. Also deals with the fact thatpruneheightis only in the response when pruning is enabled (related to #11366).