Skip to content

Commit 6d91cb7

Browse files
committed
test: add unit tests for calculate_input_weight
1 parent f81fad5 commit 6d91cb7

File tree

2 files changed

+41
-0
lines changed

2 files changed

+41
-0
lines changed

test/functional/test_framework/wallet_util.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
55
"""Useful util functions for testing the wallet"""
66
from collections import namedtuple
7+
import unittest
78

89
from test_framework.address import (
910
byte_to_base58,
@@ -159,3 +160,42 @@ def __enter__(self):
159160
def __exit__(self, *args):
160161
_ = args
161162
self.wallet.walletlock()
163+
164+
165+
class TestFrameworkWalletUtil(unittest.TestCase):
166+
def test_calculate_input_weight(self):
167+
SKELETON_BYTES = 32 + 4 + 4 # prevout-txid, prevout-index, sequence
168+
SMALL_LEN_BYTES = 1 # bytes needed for encoding scriptSig / witness item lenghts < 253
169+
LARGE_LEN_BYTES = 3 # bytes needed for encoding scriptSig / witness item lengths >= 253
170+
171+
# empty scriptSig, no witness
172+
self.assertEqual(calculate_input_weight(""),
173+
(SKELETON_BYTES + SMALL_LEN_BYTES) * WITNESS_SCALE_FACTOR)
174+
self.assertEqual(calculate_input_weight("", None),
175+
(SKELETON_BYTES + SMALL_LEN_BYTES) * WITNESS_SCALE_FACTOR)
176+
# small scriptSig, no witness
177+
scriptSig_small = "00"*252
178+
self.assertEqual(calculate_input_weight(scriptSig_small, None),
179+
(SKELETON_BYTES + SMALL_LEN_BYTES + 252) * WITNESS_SCALE_FACTOR)
180+
# small scriptSig, empty witness stack
181+
self.assertEqual(calculate_input_weight(scriptSig_small, []),
182+
(SKELETON_BYTES + SMALL_LEN_BYTES + 252) * WITNESS_SCALE_FACTOR + SMALL_LEN_BYTES)
183+
# large scriptSig, no witness
184+
scriptSig_large = "00"*253
185+
self.assertEqual(calculate_input_weight(scriptSig_large, None),
186+
(SKELETON_BYTES + LARGE_LEN_BYTES + 253) * WITNESS_SCALE_FACTOR)
187+
# large scriptSig, empty witness stack
188+
self.assertEqual(calculate_input_weight(scriptSig_large, []),
189+
(SKELETON_BYTES + LARGE_LEN_BYTES + 253) * WITNESS_SCALE_FACTOR + SMALL_LEN_BYTES)
190+
# empty scriptSig, 5 small witness stack items
191+
self.assertEqual(calculate_input_weight("", ["00", "11", "22", "33", "44"]),
192+
((SKELETON_BYTES + SMALL_LEN_BYTES) * WITNESS_SCALE_FACTOR) + SMALL_LEN_BYTES + 5 * SMALL_LEN_BYTES + 5)
193+
# empty scriptSig, 253 small witness stack items
194+
self.assertEqual(calculate_input_weight("", ["00"]*253),
195+
((SKELETON_BYTES + SMALL_LEN_BYTES) * WITNESS_SCALE_FACTOR) + LARGE_LEN_BYTES + 253 * SMALL_LEN_BYTES + 253)
196+
# small scriptSig, 3 large witness stack items
197+
self.assertEqual(calculate_input_weight(scriptSig_small, ["00"*253]*3),
198+
((SKELETON_BYTES + SMALL_LEN_BYTES + 252) * WITNESS_SCALE_FACTOR) + SMALL_LEN_BYTES + 3 * LARGE_LEN_BYTES + 3*253)
199+
# large scriptSig, 3 large witness stack items
200+
self.assertEqual(calculate_input_weight(scriptSig_large, ["00"*253]*3),
201+
((SKELETON_BYTES + LARGE_LEN_BYTES + 253) * WITNESS_SCALE_FACTOR) + SMALL_LEN_BYTES + 3 * LARGE_LEN_BYTES + 3*253)

test/functional/test_runner.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@
8585
"crypto.ripemd160",
8686
"script",
8787
"segwit_addr",
88+
"wallet_util",
8889
]
8990

9091
EXTENDED_SCRIPTS = [

0 commit comments

Comments
 (0)