def test_hashing_not_equal(self): entity1 = Entity() entity2 = Entity() addr1 = Address(entity1) addr2 = Address(entity2) self.assertNotEqual(hash(addr1), hash(addr2))
def test_hex_display(self): entity = Entity() address = Address(entity) address_bytes = bytes(address) hex_address = binascii.hexlify(address_bytes).decode() self.assertEqual(hex_address, address.to_hex())
def test_hex_display(self): entity = Entity() address = Address(entity) address_bytes = bytes(address) hex_address = address_bytes.hex() self.assertEqual(hex_address, address.to_hex())
def test_invalid_display(self): entity = Entity() address = Address(entity) address_bytes = bytes(address) invalid_checksum = bytes([0] * Address.CHECKSUM_SIZE) invalid_display = base58.b58encode(address_bytes + invalid_checksum).decode() with self.assertRaises(ValueError): _ = Address(invalid_display)
def test_smart_contract(self): EXPECTED_DIGEST = "9ea094e71cbe846192429db3d7e8b02b649730c8b525c3268eb9ff5633c27130" EXPECTED_PAYLOAD = \ "a1604000532398dd883d1990f7dad3fde6a53a53347afc2680a04748f7f15ad03cadc4d400c103e8c2000f424080" \ "e6672a9d98da667e5dc25b2bca8acf9644a7ac0797f01cb5968abf39de011df2066c61756e636802676f00000000" \ "000000000418c2a33af8bd2cba7fa714a840a308a217aa4483880b1ef14b4fdffe08ab956e3f4b921cec33be7c25" \ "8cfd7025a2b9a942770e5b17758bcc4961bbdc75a0251c" # build the payload bytes for the transaction with mock.patch('random.getrandbits') as mock_counter: mock_counter.side_effect = [0] payload = Transaction() payload.from_address = IDENTITIES[0] payload.add_signer(IDENTITIES[0]) payload.charge_rate = 1000 payload.charge_limit = 1000000 payload.target_contract(Address(IDENTITIES[4]), BitVector()) payload.action = 'launch' payload.data = 'go'.encode('ascii') # sign the final transaction payload.sign(ENTITIES[0]) transaction_bytes = transaction.encode_transaction(payload) self.assertIsExpectedTx(payload, transaction_bytes, EXPECTED_PAYLOAD) # attempt to decode a transaction from the generated bytes buffer = io.BytesIO(transaction_bytes) success, tx = transaction.decode_transaction(buffer) self.assertTrue(success) self.assertTxAreEqual(payload, tx) # Check payload digest self.assertEqual(sha256_hex(payload.encode_payload()), EXPECTED_DIGEST)
def test_construction_from_identity(self): entity = Entity() address = Address(entity) # manually compute the address value expected_address_bytes, expected_display = _calc_address(entity.public_key_bytes) self.assertEqual(expected_address_bytes, bytes(address)) self.assertEqual(expected_display, str(address))
def test_construction_from_string(self): entity = Entity() # manually compute the address value expected_address_bytes, expected_display = _calc_address(entity.public_key_bytes) # re-create the address from the display string address = Address(expected_display) self.assertEqual(bytes(address), expected_address_bytes) self.assertEqual(str(address), expected_display)
def test_synergetic_data_submission(self): EXPECTED_DIGEST = "261ba516c9b7b4d3ecb39f349dbb0a35db0d9fc362f2b9cc81c7d844be4d0081" EXPECTED_PAYLOAD = \ "a160c000532398dd883d1990f7dad3fde6a53a53347afc2680a04748f7f15ad03cadc4d4c1271001c3000000e8d4" \ "a5100080e6672a9d98da667e5dc25b2bca8acf9644a7ac0797f01cb5968abf39de011df204646174610f7b227661" \ "6c7565223a20313233347d00000000000000000418c2a33af8bd2cba7fa714a840a308a217aa4483880b1ef14b4f" \ "dffe08ab956e3f4b921cec33be7c258cfd7025a2b9a942770e5b17758bcc4961bbdc75a0251c" # build the payload bytes for the transaction with mock.patch('random.getrandbits') as mock_counter: mock_counter.side_effect = [0] payload = Transaction() payload.from_address = IDENTITIES[0] payload.valid_until = 10000 payload.target_synergetic_data(Address(IDENTITIES[4]), BitVector()) payload.charge_rate = 1 payload.charge_limit = 1000000000000 payload.action = 'data' payload.data = json.dumps({'value': 1234}).encode('ascii') payload.add_signer(IDENTITIES[0]) # sign the final transaction payload.sign(ENTITIES[0]) transaction_bytes = transaction.encode_transaction(payload) self.assertIsExpectedTx(payload, transaction_bytes, EXPECTED_PAYLOAD) # attempt to decode a transaction from the generated bytes buffer = io.BytesIO(transaction_bytes) success, tx = transaction.decode_transaction(buffer) self.assertTrue(success) self.assertTxAreEqual(payload, tx) # Check payload digest self.assertEqual(sha256_hex(payload.encode_payload()), EXPECTED_DIGEST)
def test_not_equal(self): addr1 = Address(bytes(range(32))) addr2 = Address(bytes(range(1, 33))) self.assertTrue(addr1 != addr2)
def test_invalid_length_bytes(self): with self.assertRaises(ValueError): _ = Address(bytes())
def test_invalid_type(self): with self.assertRaises(RuntimeError): _ = Address(int(42))
def test_invalid_length_string(self): with self.assertRaises(RuntimeError): _ = Address(str())
def test_construction_from_address(self): entity = Entity() address1 = Address(entity) address2 = Address(address1) self.assertEqual(bytes(address1), bytes(address2))
def test_construction_from_bytes(self): dummy_address = bytes(list(range(32))) address = Address(dummy_address) self.assertEqual(dummy_address, bytes(address))
def test_invalid_type(self): with self.assertRaises(ValueError): _ = Address(42)
def test_equality(self): entity = Entity() addr1 = Address(entity) addr2 = Address(entity) self.assertEqual(addr1, addr2)
def test_hashing_equal(self): entity = Entity() addr1 = Address(entity) addr2 = Address(entity) self.assertEqual(hash(addr1), hash(addr2))