Skip to content

Commit b1674d6

Browse files
committed
test: add unit tests for calculate_input_weight
1 parent e6c7e54 commit b1674d6

File tree

2 files changed

+37
-0
lines changed

2 files changed

+37
-0
lines changed

test/functional/test_framework/wallet_util.py

Lines changed: 36 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,38 @@ 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("", None),
173+
(SKELETON_BYTES + SMALL_LEN_BYTES) * WITNESS_SCALE_FACTOR)
174+
# small scriptSig, no witness
175+
scriptSig_small = "00"*252
176+
self.assertEqual(calculate_input_weight(scriptSig_small, None),
177+
(SKELETON_BYTES + SMALL_LEN_BYTES + 252) * WITNESS_SCALE_FACTOR)
178+
# large scriptSig, no witness
179+
scriptSig_large = "00"*253
180+
self.assertEqual(calculate_input_weight(scriptSig_large, None),
181+
(SKELETON_BYTES + LARGE_LEN_BYTES + 253) * WITNESS_SCALE_FACTOR)
182+
# large scriptSig, empty witness stack
183+
scriptSig_large = "00"*253
184+
self.assertEqual(calculate_input_weight(scriptSig_large, []),
185+
(SKELETON_BYTES + LARGE_LEN_BYTES + 253) * WITNESS_SCALE_FACTOR + SMALL_LEN_BYTES)
186+
# empty scriptSig, 5 small witness stack items
187+
self.assertEqual(calculate_input_weight("", ["00", "11", "22", "33", "44"]),
188+
((SKELETON_BYTES + SMALL_LEN_BYTES) * WITNESS_SCALE_FACTOR) + SMALL_LEN_BYTES + 5 * SMALL_LEN_BYTES + 5)
189+
# empty scriptSig, 253 small witness stack items
190+
self.assertEqual(calculate_input_weight("", ["00"]*253),
191+
((SKELETON_BYTES + SMALL_LEN_BYTES) * WITNESS_SCALE_FACTOR) + LARGE_LEN_BYTES + 253 * SMALL_LEN_BYTES + 253)
192+
# small scriptSig, 3 large witness stack items
193+
self.assertEqual(calculate_input_weight(scriptSig_small, ["00"*253]*3),
194+
((SKELETON_BYTES + SMALL_LEN_BYTES + 252) * WITNESS_SCALE_FACTOR) + SMALL_LEN_BYTES + 3 * LARGE_LEN_BYTES + 3*253)
195+
# large scriptSig, 3 large witness stack items
196+
self.assertEqual(calculate_input_weight(scriptSig_large, ["00"*253]*3),
197+
((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)