def test_bad_encode_size(self): """Test that bad sized hashes fail to encode.""" for bits_size in self.valid_sizes: size = bits_size // 8 # Make size invalid size += 1 # Convert to a valid number of bytes for a hash hashbytes = bytes(random.randint(0, 255) for i in range(size)) with self.assertRaises(ValueError): cashaddr.encode_full(BSV_PREFIX, cashaddr.PUBKEY_TYPE, hashbytes)
def test_encode_bad_inputs(self): with self.assertRaises(TypeError): cashaddr.encode_full(2, cashaddr.PUBKEY_TYPE, bytes(20)) with self.assertRaises(TypeError): cashaddr.encode_full(BSV_PREFIX, cashaddr.PUBKEY_TYPE, '0' * 40) with self.assertRaises(ValueError): cashaddr.encode_full(BSV_PREFIX, 15, bytes(20))
def test_encode_decode(self): """Test whether valid addresses encode and decode properly, for all valid hash sizes. """ for prefix in (BSV_PREFIX, BSV_TESTNET_PREFIX): for bits_size in self.valid_sizes: size = bits_size // 8 # Convert to a valid number of bytes for a hash hashbytes = bytes(random.randint(0, 255) for i in range(size)) addr = cashaddr.encode_full(prefix, cashaddr.PUBKEY_TYPE, hashbytes) rprefix, kind, addr_hash = cashaddr.decode(addr) self.assertEqual(rprefix, prefix) self.assertEqual(kind, cashaddr.PUBKEY_TYPE) self.assertEqual(addr_hash, hashbytes)
def test_bad_decode_checksum(self): """Test whether addresses with invalid checksums fail to decode.""" for bits_size in self.valid_sizes: size = bits_size // 8 # Convert to a valid number of bytes for a hash hashbytes = bytes(random.randint(0, 255) for i in range(size)) addr = cashaddr.encode_full(BSV_PREFIX, cashaddr.PUBKEY_TYPE, hashbytes) addrlist = list(addr) # Inject an error values = list(cashaddr._CHARSET) while True: pos = random.randint(0, len(addr) - 1) choice = random.choice(values) if choice != addrlist[pos] and addrlist[pos] in values: addrlist[pos] = choice break mangled_addr = ''.join(addrlist) with self.assertRaises(ValueError) as e: cashaddr.decode(mangled_addr) self.assertTrue('invalid checksum' in e.exception.args[0])