def test_get_txn_author_agreement_cannot_have_more_than_one_parameter( params, looper, nodeSetWithoutTaa, sdk_pool_handle, sdk_wallet_client): with pytest.raises(RequestNackedException) as e: sdk_get_txn_author_agreement(looper, sdk_pool_handle, sdk_wallet_client, **params) assert e.match("GET_TXN_AUTHOR_AGREEMENT request can have at most one " "of the following parameters: version, digest, timestamp")
def test_get_txn_author_agreement_works_on_clear_state(params, looper, txnPoolNodeSet, sdk_pool_handle, sdk_wallet_client): reply = sdk_get_txn_author_agreement(looper, sdk_pool_handle, sdk_wallet_client, **params)[1] assert reply['op'] == REPLY assert reply['result']['data'] is None
def test_get_txn_author_agreement_doesnt_return_taa_when_it_didnt_exist( looper, nodeSetWithTaa, sdk_pool_handle, sdk_wallet_client): reply = sdk_get_txn_author_agreement(looper, sdk_pool_handle, sdk_wallet_client, timestamp=TIMESTAMP_V1 - 2)[1] assert reply['op'] == REPLY result = reply['result'] assert result['data'] is None check_state_proof(result, '2:latest', None)
def test_get_txn_author_agreement_returns_latest_taa_by_default( looper, set_txn_author_agreement_aml, nodeSetWithTaa, sdk_pool_handle, sdk_wallet_client): reply = sdk_get_txn_author_agreement(looper, sdk_pool_handle, sdk_wallet_client)[1] assert reply['op'] == REPLY result = reply['result'] assert result['data'][TXN_AUTHOR_AGREEMENT_TEXT] == TEXT_V2 assert result['data'][TXN_AUTHOR_AGREEMENT_VERSION] == V2 check_state_proof(result, '2:latest', DIGEST_V2)
def test_get_txn_author_agreement_works_on_clear_state(params, state_key, looper, nodeSetWithoutTaa, sdk_pool_handle, sdk_wallet_client): reply = sdk_get_txn_author_agreement(looper, sdk_pool_handle, sdk_wallet_client, **params)[1] assert reply['op'] == REPLY result = reply['result'] assert result['data'] is None check_state_proof(result, state_key, None)
def test_get_txn_author_agreement_doesnt_return_taa_for_nonexistent_digest( looper, nodeSetWithTaa, sdk_pool_handle, sdk_wallet_client): invalid_digest = randomString(16) reply = sdk_get_txn_author_agreement(looper, sdk_pool_handle, sdk_wallet_client, digest=invalid_digest)[1] assert reply['op'] == REPLY result = reply['result'] assert result['data'] is None check_state_proof(result, '2:d:{}'.format(invalid_digest), None)
def test_get_txn_author_agreement_can_return_taa_for_current_version( looper, nodeSetWithTaa, sdk_pool_handle, sdk_wallet_client): reply = sdk_get_txn_author_agreement(looper, sdk_pool_handle, sdk_wallet_client, version=V2)[1] assert reply['op'] == REPLY result = reply['result'] assert result['data'][TXN_AUTHOR_AGREEMENT_TEXT] == TEXT_V2 assert result['data'][TXN_AUTHOR_AGREEMENT_VERSION] == V2 check_state_proof(result, '2:v:{}'.format(V2), DIGEST_V2)
def test_send_valid_txn_author_agreement_succeeds(looper, setup_aml, txnPoolNodeSet, sdk_pool_handle, sdk_wallet_trustee, sdk_wallet_client): text = randomString(1024) version = randomString(16) sdk_send_txn_author_agreement(looper, sdk_pool_handle, sdk_wallet_trustee, text, version) reply = sdk_get_txn_author_agreement(looper, sdk_pool_handle, sdk_wallet_client)[1] assert reply['op'] == REPLY result = reply['result']['data'] assert result[TXN_AUTHOR_AGREEMENT_TEXT] == text assert result[TXN_AUTHOR_AGREEMENT_VERSION] == version
def test_get_txn_author_agreement_can_return_taa_for_fresh_ts( looper, nodeSetWithTaa, sdk_pool_handle, sdk_wallet_client): reply = sdk_get_txn_author_agreement(looper, sdk_pool_handle, sdk_wallet_client, timestamp=TIMESTAMP_V2 + 2)[1] assert reply['op'] == REPLY result = reply['result'] assert result['data'][TXN_AUTHOR_AGREEMENT_TEXT] == TEXT_V2 assert result['data'][TXN_AUTHOR_AGREEMENT_VERSION] == V2 check_state_proof(result, '2:latest', DIGEST_V2)
def test_get_txn_author_agreement_can_return_taa_for_old_digest( looper, nodeSetWithTaa, sdk_pool_handle, sdk_wallet_client): reply = sdk_get_txn_author_agreement(looper, sdk_pool_handle, sdk_wallet_client, digest=DIGEST_V1)[1] assert reply['op'] == REPLY result = reply['result'] assert result['data'][TXN_AUTHOR_AGREEMENT_TEXT] == TEXT_V1 assert result['data'][TXN_AUTHOR_AGREEMENT_VERSION] == V1 check_state_proof(result, '2:d:{}'.format(DIGEST_V1), taa_value(result, TEXT_V1, V1))
def test_recover_taa_from_ledger(txnPoolNodeSet, sdk_pool_handle, sdk_wallet_trustee, looper, monkeypatch, setup_aml, tconf, tdir, allPluginsPath): orig_handlers = {} # Step 1. Stop one node node_to_stop = txnPoolNodeSet[-1] rest_pool = txnPoolNodeSet[:-1] disconnect_node_and_ensure_disconnected(looper, txnPoolNodeSet, node_to_stop.name, stopNode=True) looper.removeProdable(name=node_to_stop.name) # Step 2. Patch all the rest nodes for using old version TAA handler # it's ugly but it works globals()['CURRENT_TXN_PAYLOAD_VERSIONS'][TXN_AUTHOR_AGREEMENT] = '1' for node in rest_pool: handler = node.write_manager.request_handlers.get( TXN_AUTHOR_AGREEMENT)[0] orig_handlers[node.name] = handler handler_for_v_1 = node.write_manager._request_handlers_with_version.get( (TXN_AUTHOR_AGREEMENT, "1"))[0] node.write_manager.request_handlers[TXN_AUTHOR_AGREEMENT] = [ handler_for_v_1 ] # Step 3. Send TAA txn in old way text = randomString(1024) version_0 = randomString(16) res = sdk_send_txn_author_agreement(looper, sdk_pool_handle, sdk_wallet_trustee, version_0, text)[1] taa_0_ratification_ts = get_txn_time(res['result']) version_1 = randomString(16) res = sdk_send_txn_author_agreement(looper, sdk_pool_handle, sdk_wallet_trustee, version_1, text)[1] taa_1_ratification_ts = get_txn_time(res['result']) # Step 4. return original TAA handlers back # it's ugly but it works globals()['CURRENT_TXN_PAYLOAD_VERSIONS'][TXN_AUTHOR_AGREEMENT] = '2' for node in rest_pool: node.write_manager.request_handlers[TXN_AUTHOR_AGREEMENT] = [ orig_handlers[node.name] ] # Step 5. Send another TAA txn in new way without optional parameters text_2 = randomString(1024) version_2 = randomString(16) ratified_2 = get_utc_epoch() - 300 res_0 = sdk_send_txn_author_agreement(looper, sdk_pool_handle, sdk_wallet_trustee, version_2, text_2, ratified=ratified_2)[1] # Step 6. Send another TAA txn in new way without optional parameter text = randomString(1024) version_3 = randomString(16) ratified_3 = get_utc_epoch() - 300 sdk_send_txn_author_agreement(looper, sdk_pool_handle, sdk_wallet_trustee, version_3, text, ratified=ratified_3) # Step 7. Send taa updating for the second taa transaction (for checking txn with optional parameter) retired_time = int(time.time()) + 20 retired_time_in_past = int(time.time()) - 20 sdk_send_txn_author_agreement(looper, sdk_pool_handle, sdk_wallet_trustee, version_2, retired=retired_time) # Step 8. Ensure, that all TAAs was written res_1 = sdk_get_txn_author_agreement(looper, sdk_pool_handle, sdk_wallet_trustee, version=version_1)[1] assert TXN_AUTHOR_AGREEMENT_DIGEST not in res_1['result']['data'] assert TXN_AUTHOR_AGREEMENT_RATIFICATION_TS not in res_1['result']['data'] assert res_1['result']['data'][TXN_AUTHOR_AGREEMENT_VERSION] == version_1 res_2 = sdk_get_txn_author_agreement(looper, sdk_pool_handle, sdk_wallet_trustee, version=version_2)[1] check_result_contains_expected_taa_data(res_2, version_2, ratified_2, retired_time) res_3 = sdk_get_txn_author_agreement(looper, sdk_pool_handle, sdk_wallet_trustee, version=version_3)[1] check_result_contains_expected_taa_data(res_3, version_3, ratified_3) # Step 9. Return previous disconnected node back node_to_stop = start_stopped_node(node_to_stop, looper, tconf, tdir, allPluginsPath) txnPoolNodeSet = rest_pool + [node_to_stop] # Step 10. Ensure that all nodes have the same data ensure_all_nodes_have_same_data(looper, txnPoolNodeSet) # Step 11. Send another taa txns for checking pool writability text = randomString(1024) version_4 = randomString(16) ratified_4 = get_utc_epoch() - 300 sdk_send_txn_author_agreement(looper, sdk_pool_handle, sdk_wallet_trustee, version_4, text, ratified=ratified_4) # Step 12. Ensure that all nodes have the same data ensure_all_nodes_have_same_data(looper, txnPoolNodeSet) # Step 13. Retire TAA written using old handler, make sure ratification date is not spoiled sdk_send_txn_author_agreement(looper, sdk_pool_handle, sdk_wallet_trustee, version_1, retired=retired_time_in_past) res_1 = sdk_get_txn_author_agreement(looper, sdk_pool_handle, sdk_wallet_trustee, version=version_1)[1] check_result_contains_expected_taa_data(res_1, version_1, taa_1_ratification_ts, retired_time_in_past) # Step 14. Disable TAAs written using old handler, make sure ratification date is not spoiled disable_res = sdk_send_txn_author_agreement_disable( looper, sdk_pool_handle, sdk_wallet_trustee)[1] res_0 = sdk_get_txn_author_agreement(looper, sdk_pool_handle, sdk_wallet_trustee, version=version_0)[1] check_result_contains_expected_taa_data( res_0, version_0, taa_0_ratification_ts, get_txn_time(disable_res['result'])) res_1 = sdk_get_txn_author_agreement(looper, sdk_pool_handle, sdk_wallet_trustee, version=version_1)[1] check_result_contains_expected_taa_data(res_1, version_1, taa_1_ratification_ts, retired_time_in_past)
def test_get_txn_author_agreement_cannot_have_more_than_one_parameter( params, looper, nodeSetWithoutTaa, sdk_pool_handle, sdk_wallet_client): with pytest.raises(CommonInvalidParam3) as e: sdk_get_txn_author_agreement(looper, sdk_pool_handle, sdk_wallet_client, **params)