mirror of
https://github.com/dashpay/dash.git
synced 2024-12-27 13:03:17 +01:00
84 lines
4.6 KiB
Python
Executable File
84 lines
4.6 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
# Copyright (c) 2018-2024 The Dash Core developers
|
|
# Distributed under the MIT software license, see the accompanying
|
|
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|
"""Tests around dash governance objects."""
|
|
|
|
import time
|
|
|
|
from test_framework.governance import prepare_object
|
|
from test_framework.messages import uint256_to_string
|
|
from test_framework.test_framework import DashTestFramework
|
|
from test_framework.util import assert_equal, assert_greater_than, assert_raises_rpc_error
|
|
|
|
|
|
def validate_object(prepared, rpc_prepared):
|
|
assert_equal(prepared["parentHash"], rpc_prepared["parentHash"])
|
|
assert_equal(prepared["collateralHash"], rpc_prepared["collateralHash"])
|
|
assert_equal(prepared["createdAt"], rpc_prepared["createdAt"])
|
|
assert_equal(prepared["revision"], rpc_prepared["revision"])
|
|
assert_equal(prepared["hex"], rpc_prepared["data"]["hex"])
|
|
del rpc_prepared["data"]["hex"]
|
|
assert_equal(prepared["data"], rpc_prepared["data"])
|
|
|
|
class DashGovernanceTest (DashTestFramework):
|
|
def set_test_params(self):
|
|
self.set_dash_test_params(2, 1)
|
|
|
|
def prepare_object(self, object_type, parent_hash, creation_time, revision, name, amount):
|
|
payment_address = self.nodes[0].getnewaddress()
|
|
return prepare_object(self.nodes[0], object_type, parent_hash, creation_time, revision, name, amount, payment_address)
|
|
|
|
def run_test(self):
|
|
|
|
time_start = time.time()
|
|
object_type = 1 # GOVERNANCE PROPOSAL
|
|
|
|
# At start there should be no prepared objects available
|
|
assert_equal(len(self.nodes[0].gobject("list-prepared")), 0)
|
|
# Create 5 proposals with different creation times and validate their ordered like expected
|
|
p1 = self.prepare_object(object_type, uint256_to_string(0), time_start, 0, "SortByTime1", 1)
|
|
p2 = self.prepare_object(object_type, uint256_to_string(0), time_start + 10, 1000, "SortByTime2", 10)
|
|
p3 = self.prepare_object(object_type, uint256_to_string(0), time_start - 10, 1000000000, "SortByTime3", 20)
|
|
p4 = self.prepare_object(object_type, uint256_to_string(0), time_start + 1, -20, "SortByTime4", 400)
|
|
p5 = self.prepare_object(object_type, uint256_to_string(0), time_start + 30, 1, "SortByTime5", 100000000)
|
|
|
|
rpc_list_prepared = self.nodes[0].gobject("list-prepared")
|
|
assert_equal(len(rpc_list_prepared), 5)
|
|
|
|
expected_order = [p3, p1, p4, p2, p5]
|
|
for i in range(len(expected_order)):
|
|
validate_object(expected_order[i], rpc_list_prepared[i])
|
|
|
|
# Create two more with the same time
|
|
self.prepare_object(object_type, uint256_to_string(0), time_start + 60, 1, "SameTime1", 2)
|
|
self.prepare_object(object_type, uint256_to_string(0), time_start + 60, 2, "SameTime2", 2)
|
|
# Query them with count=2
|
|
rpc_list_prepared = self.nodes[0].gobject("list-prepared", 2)
|
|
# And make sure it does only return 2 of the 7 available
|
|
assert_equal(len(rpc_list_prepared), 2)
|
|
# Since they have the same time they should be sorted by hex data, in this case, the second should be greater
|
|
assert_greater_than(rpc_list_prepared[1]["data"]["hex"], rpc_list_prepared[0]["data"]["hex"])
|
|
# Restart node0 and make sure it still contains all valid proposals after restart
|
|
rpc_full_list_pre_restart = self.nodes[0].gobject("list-prepared")
|
|
self.restart_node(0)
|
|
rpc_full_list_post_restart = self.nodes[0].gobject("list-prepared")
|
|
assert_equal(rpc_full_list_pre_restart, rpc_full_list_post_restart)
|
|
# Create more objects so that we have a total of 11
|
|
self.prepare_object(object_type, uint256_to_string(0), time_start, 0, "More1", 1)
|
|
self.prepare_object(object_type, uint256_to_string(0), time_start, 0, "More2", 1)
|
|
self.prepare_object(object_type, uint256_to_string(0), time_start, 0, "More3", 1)
|
|
self.prepare_object(object_type, uint256_to_string(0), time_start, 0, "More4", 1)
|
|
# Make sure default count is 10 while there are 11 in total
|
|
assert_equal(len(self.nodes[0].gobject("list-prepared")), 10)
|
|
assert_equal(len(self.nodes[0].gobject("list-prepared", 12)), 11)
|
|
# Make sure it returns 0 objects with count=0
|
|
assert_equal(len(self.nodes[0].gobject("list-prepared", 0)), 0)
|
|
# And test some invalid count values
|
|
assert_raises_rpc_error(-8, "Negative count", self.nodes[0].gobject, "list-prepared", -1)
|
|
assert_raises_rpc_error(-8, "Negative count", self.nodes[0].gobject, "list-prepared", -1000)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
DashGovernanceTest().main()
|