Skip to content

Commit 59d112f

Browse files
committed
Undid previous modification and modified testing functionnalities to
take into account and integrate new types, inputs and outputs from indy-vdr Signed-off-by: Nicholas Massad <nicholasmassad@hotmail.com>
1 parent a2ac286 commit 59d112f

18 files changed

+118
-78
lines changed

.devcontainer/Dockerfile

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,8 +83,6 @@ RUN apt-get update -y && apt-get install -y \
8383
# Need to move libursa.so to parent dir
8484
&& mv /usr/lib/ursa/* /usr/lib && rm -rf /usr/lib/ursa
8585

86-
RUN pip3 uninstall -y ioflo || true
87-
RUN pip3 install --no-cache-dir git+https://github.com/ioflo/ioflo.git
8886

8987
RUN pip3 install -U \
9088
# Required by setup.py
@@ -94,6 +92,7 @@ RUN pip3 install -U \
9492
pep8==1.7.1 \
9593
pep8-naming==0.6.1 \
9694
flake8==3.8.4 \
95+
ioflo==2.0.3 \
9796
Cython==0.29.36
9897

9998
# install fpm

plenum/test/audit_ledger/test_audit_ledger_multiple_ledgers_in_one_batch.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,27 @@
1+
import base58
2+
13
from plenum.common.constants import TXN_TYPE, TARGET_NYM, AUDIT_TXN_LEDGER_ROOT, AUDIT_TXN_STATE_ROOT, TXN_PAYLOAD, \
2-
TXN_PAYLOAD_DATA, TXN_METADATA, TXN_METADATA_SEQ_NO, TXN_AUTHOR_AGREEMENT_AML, AML_VERSION, ROLE, DATA, ALIAS
4+
TXN_PAYLOAD_DATA, TXN_METADATA, TXN_METADATA_SEQ_NO, TXN_AUTHOR_AGREEMENT_AML, AML_VERSION, ROLE, DATA, ALIAS, CURRENT_PROTOCOL_VERSION
35
from plenum.common.ledger import Ledger
46
from plenum.common.transactions import PlenumTransactions
57
from plenum.server.batch_handlers.three_pc_batch import ThreePcBatch
68
from plenum.test.helper import sdk_gen_request
9+
from plenum.test.wallet_helper import create_and_store_did
10+
from indy_vdr.ledger import build_nym_request, build_pool_config_request
711

812

9-
def test_audit_ledger_multiple_ledgers_in_one_batch(txnPoolNodeSet):
13+
def test_audit_ledger_multiple_ledgers_in_one_batch(txnPoolNodeSet, looper, sdk_wallet_handle, sdk_pool_handle):
1014
# Checking first case -- first audit txn
1115
node = txnPoolNodeSet[0]
1216
audit_batch_handler = node.write_manager.audit_b_handler
1317
op = {
1418
TXN_TYPE: PlenumTransactions.NYM.value,
1519
TARGET_NYM: "000000000000000000000000Trustee4"
1620
}
17-
nym_req = sdk_gen_request(op, signatures={"sig1": "111"})
21+
did, verkey = looper.loop.run_until_complete(create_and_store_did(sdk_wallet_handle))
22+
b58_target_did = base58.b58encode(op[TARGET_NYM].encode('utf-8')).decode('utf-8') # Converts the
23+
nym_req = build_nym_request(did, b58_target_did, verkey, role="TRUSTEE", version=CURRENT_PROTOCOL_VERSION)
24+
#nym_req = sdk_gen_request(op, signatures={"sig1": "111"})
1825
node.write_manager.apply_request(nym_req, 10000)
1926
op2 = {TXN_TYPE: TXN_AUTHOR_AGREEMENT_AML,
2027
AML_VERSION: "version1"}

plenum/test/blacklist/test_blacklist_client.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ def testDoNotBlacklistClient(looper, txnPoolNodeSet,
2323
req_obj = sdk_random_request_objects(1, identifier=did,
2424
protocol_version=CURRENT_PROTOCOL_VERSION)[0]
2525

26-
reqs = sdk_send_signed_requests(sdk_pool_handle, [json.dumps(req_obj.as_dict)])
26+
reqs = sdk_send_signed_requests(sdk_pool_handle, [req_obj], looper)
2727

2828
with pytest.raises(RequestNackedException, match='MissingSignature'):
2929
sdk_get_and_check_replies(looper, reqs)

plenum/test/client/test_client.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ def testSendRequestWithoutSignatureFails(looper, txnPoolNodeSet,
3434
json_req = json.loads(requests[0])
3535
json_req['signature'] = None
3636
request = json.dumps(json_req)
37-
res = sdk_send_signed_requests(sdk_pool_handle, [request])
37+
res = sdk_send_signed_requests(sdk_pool_handle, [request], looper)
3838
obj_req = sdk_json_to_request_object(res[0][0])
3939

4040
timeout = waits.expectedClientRequestPropagationTime(nodeCount)

plenum/test/client/test_protocol_version.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ def test_request_none_protocol_version(looper, txnPoolNodeSet,
8282
assert req_obj.protocolVersion == None
8383

8484
signed_reqs = sdk_sign_request_objects(looper, sdk_wallet_client, req_objs)
85-
reqs = sdk_send_signed_requests(sdk_pool_handle, signed_reqs)
85+
reqs = sdk_send_signed_requests(sdk_pool_handle, signed_reqs, looper)
8686
sdk_get_bad_response(looper, reqs, RequestNackedException,
8787
'missed fields - protocolVersion. ' + error_msg)
8888

@@ -99,7 +99,7 @@ def test_request_with_outdated_version(looper,
9999
assert req_obj.protocolVersion == CURRENT_PROTOCOL_VERSION - 1
100100

101101
signed_reqs = sdk_sign_request_objects(looper, sdk_wallet_client, reqs_obj)
102-
reqs = sdk_send_signed_requests(sdk_pool_handle, signed_reqs)
102+
reqs = sdk_send_signed_requests(sdk_pool_handle, signed_reqs, looper)
103103
sdk_get_bad_response(looper, reqs, RequestNackedException,
104104
'differs from current protocol version. '
105105
.format(CURRENT_PROTOCOL_VERSION) + error_msg)
@@ -117,7 +117,7 @@ def test_request_with_invalid_version(looper,
117117
assert req_obj.protocolVersion == -1
118118

119119
signed_reqs = sdk_sign_request_objects(looper, sdk_wallet_client, reqs_obj)
120-
reqs = sdk_send_signed_requests(sdk_pool_handle, signed_reqs)
120+
reqs = sdk_send_signed_requests(sdk_pool_handle, signed_reqs, looper)
121121
sdk_get_bad_response(looper, reqs, CommonSdkIOException,
122122
'Got an error with code 113')
123123

@@ -134,5 +134,5 @@ def test_request_with_correct_version(looper,
134134
assert req_obj.protocolVersion == CURRENT_PROTOCOL_VERSION
135135

136136
signed_reqs = sdk_sign_request_objects(looper, sdk_wallet_client, reqs_obj)
137-
reqs = sdk_send_signed_requests(sdk_pool_handle, signed_reqs)
137+
reqs = sdk_send_signed_requests(sdk_pool_handle, signed_reqs, looper)
138138
sdk_get_and_check_replies(looper, reqs)

plenum/test/common/test_digest_validation.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ def test_second_digest_is_written(
7373
req = json.dumps(sdk_random_request_objects(1, CURRENT_PROTOCOL_VERSION, sdk_wallet_stewards[0][1])[0].as_dict)
7474
req = sdk_multisign_request_object(looper, sdk_wallet_stewards[0], req)
7575
req = sdk_multisign_request_object(looper, sdk_wallet_stewards[1], req)
76-
sdk_get_and_check_replies(looper, sdk_send_signed_requests(sdk_pool_handle, [req]))
76+
sdk_get_and_check_replies(looper, sdk_send_signed_requests(sdk_pool_handle, [req], looper))
7777

7878
req = Request(**json.loads(req))
7979

@@ -91,10 +91,10 @@ def test_send_same_txn_with_different_signatures_in_separate_batches(
9191

9292
req1, req2 = two_requests
9393

94-
rep1 = sdk_send_signed_requests(sdk_pool_handle, [req1])
94+
rep1 = sdk_send_signed_requests(sdk_pool_handle, [req1], looper)
9595
sdk_get_and_check_replies(looper, rep1)
9696

97-
rep2 = sdk_send_signed_requests(sdk_pool_handle, [req2])
97+
rep2 = sdk_send_signed_requests(sdk_pool_handle, [req2], looper)
9898
with pytest.raises(RequestNackedException) as e:
9999
sdk_get_and_check_replies(looper, rep2)
100100
e.match('Same txn was already ordered with different signatures or pluggable fields')
@@ -109,8 +109,8 @@ def test_send_same_txn_with_different_signatures_in_one_batch(
109109

110110
old_reqs = len(txnPoolNodeSet[0].requests)
111111
with max_3pc_batch_limits(tconf, size=2):
112-
sdk_send_signed_requests(sdk_pool_handle, [req1])
113-
sdk_send_signed_requests(sdk_pool_handle, [req2])
112+
sdk_send_signed_requests(sdk_pool_handle, [req1], looper)
113+
sdk_send_signed_requests(sdk_pool_handle, [req2], looper)
114114

115115
# We need to check for ordering this way, cause sdk do not allow
116116
# track two requests with same reqId at the same time
@@ -159,10 +159,10 @@ def test_parts_of_nodes_have_same_request_with_different_signatures(
159159
assert node.spylog.count(node.request_propagates) >= 1
160160
node.spylog.getAll(node.request_propagates)
161161

162-
req1s = sdk_send_signed_requests(sdk_pool_handle, [req1s])
162+
req1s = sdk_send_signed_requests(sdk_pool_handle, [req1s], looper)
163163
sdk_get_and_check_replies(looper, req1s)
164164

165-
req2s = sdk_send_signed_requests(sdk_pool_handle, [req2s])
165+
req2s = sdk_send_signed_requests(sdk_pool_handle, [req2s], looper)
166166
with pytest.raises(RequestNackedException) as e:
167167
sdk_get_and_check_replies(looper, req2s)
168168
e.match('Same txn was already ordered with different signatures or pluggable fields')
@@ -180,8 +180,8 @@ def test_suspicious_primary_send_same_request_with_different_signatures(
180180
req1, req2 = two_requests
181181

182182
old_view = txnPoolNodeSet[0].viewNo
183-
sdk_send_signed_requests(sdk_pool_handle, [req1])
184-
sdk_send_signed_requests(sdk_pool_handle, [req2])
183+
sdk_send_signed_requests(sdk_pool_handle, [req1], looper)
184+
sdk_send_signed_requests(sdk_pool_handle, [req2], looper)
185185

186186
waitForViewChange(looper, txnPoolNodeSet, expectedViewNo=old_view + 1)
187187
all(cll.params['msg'][1] == Suspicions.PPR_WITH_ORDERED_REQUEST.code for cll in

plenum/test/freeze_ledgers/helper.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ def sdk_send_freeze_ledgers(looper, sdk_pool_handle, sdk_wallets, ledgers_ids: L
1010
req = looper.loop.run_until_complete(ledger.build_ledgers_freeze_request(sdk_wallets[0][1], ledgers_ids))
1111
signed_reqs = sdk_multi_sign_request_objects(looper, sdk_wallets,
1212
[sdk_json_to_request_object(json.loads(req))])
13-
reps = sdk_send_signed_requests(sdk_pool_handle, signed_reqs)
13+
reps = sdk_send_signed_requests(sdk_pool_handle, signed_reqs, looper)
1414
return sdk_get_and_check_replies(looper, reps)[0]
1515

1616

plenum/test/helper.py

Lines changed: 64 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -867,15 +867,18 @@ def sdk_signed_random_requests(looper, sdk_wallet, count):
867867
return sdk_sign_request_objects(looper, sdk_wallet, reqs_obj)
868868

869869

870-
def sdk_send_signed_requests(pool_h, signed_reqs: Sequence):
871-
return [(json.loads(req.body),
872-
asyncio.ensure_future(pool_h.submit_request(req)))
873-
for req in signed_reqs]
870+
def sdk_send_signed_requests(pool_h, signed_reqs: Sequence, looper):
871+
res = []
872+
for req in signed_reqs:
873+
req_body = json.loads(req.body)
874+
fut = asyncio.ensure_future(pool_h.submit_request(req), loop=looper.loop)
875+
res.append((req_body, fut))
876+
return res
874877

875878

876879
def sdk_send_random_requests(looper, pool_h, sdk_wallet, count: int):
877880
reqs = sdk_signed_random_requests(looper, sdk_wallet, count)
878-
return sdk_send_signed_requests(pool_h, reqs)
881+
return sdk_send_signed_requests(pool_h, reqs, looper)
879882

880883

881884
def sdk_send_random_request(looper, pool_h, sdk_wallet):
@@ -916,15 +919,15 @@ def sdk_sign_and_submit_req(pool_handle, sdk_wallet, req):
916919

917920
def sdk_sign_and_submit_req_obj(looper, pool_handle, sdk_wallet, req_obj):
918921
s_req = sdk_sign_request_objects(looper, sdk_wallet, [req_obj])[0]
919-
return sdk_send_signed_requests(pool_handle, [s_req])[0]
922+
return sdk_send_signed_requests(pool_handle, [s_req], looper)[0]
920923

921924

922925
def sdk_sign_and_submit_op(looper, pool_handle, sdk_wallet, op):
923926
_, did = sdk_wallet
924927
req_obj = sdk_gen_request(op, protocol_version=CURRENT_PROTOCOL_VERSION,
925928
identifier=did)
926929
s_req = sdk_sign_request_objects(looper, sdk_wallet, [req_obj])[0]
927-
return sdk_send_signed_requests(pool_handle, [s_req])[0]
930+
return sdk_send_signed_requests(pool_handle, [s_req], looper)[0]
928931

929932

930933
def sdk_get_reply(looper, sdk_req_resp, timeout=None):
@@ -955,7 +958,11 @@ def sdk_get_replies(looper, sdk_req_resp: Sequence, timeout=None):
955958
def get_res(task, done_list):
956959
if task in done_list:
957960
try:
958-
resp = json.loads(task.result())
961+
result = task.result()
962+
if not isinstance(result, dict):
963+
resp = json.loads(result)
964+
else:
965+
resp = result
959966
except VdrError as e:
960967
resp = e.error_code
961968
else:
@@ -966,6 +973,7 @@ def get_res(task, done_list):
966973
if pending:
967974
for task in pending:
968975
task.cancel()
976+
969977
ret = [(req, get_res(resp, done)) for req, resp in sdk_req_resp]
970978
return ret
971979

@@ -983,23 +991,51 @@ def sdk_check_reply(req_res):
983991
raise CommonSdkIOException("Unexpected response format {}".format(res))
984992

985993
def _parse_op(res_dict):
986-
if res_dict['op'] == REQNACK:
987-
raise RequestNackedException('ReqNack of id {}. Reason: {}'
988-
.format(req['reqId'], res_dict['reason']))
989-
if res_dict['op'] == REJECT:
990-
raise RequestRejectedException('Reject of id {}. Reason: {}'
991-
.format(req['reqId'], res_dict['reason']))
992-
993-
if 'op' in res:
994-
_parse_op(res)
995-
else:
996-
for resps in res.values():
997-
if isinstance(resps, str):
998-
_parse_op(json.loads(resps))
999-
elif isinstance(resps, dict):
1000-
_parse_op(resps)
1001-
else:
1002-
raise CommonSdkIOException("Unexpected response format {}".format(res))
994+
# First check if res_dict is a dictionary
995+
if not isinstance(res_dict, dict):
996+
# If it's not a dictionary, just return without error
997+
# This could be an integer (like 1) indicating success
998+
return
999+
1000+
# Check if this is an error response from indy-vdr
1001+
if 'op' in res_dict:
1002+
if res_dict['op'] == REQNACK:
1003+
raise RequestNackedException('ReqNack of id {}. Reason: {}'
1004+
.format(req['reqId'], res_dict.get('reason', 'No reason given')))
1005+
if res_dict['op'] == REJECT:
1006+
raise RequestRejectedException('Reject of id {}. Reason: {}'
1007+
.format(req['reqId'], res_dict.get('reason', 'No reason given')))
1008+
# If no 'op' key, assume it's a successful response from indy-vdr
1009+
# with a different format
1010+
1011+
try:
1012+
if 'op' in res:
1013+
_parse_op(res)
1014+
elif 'type' in res:
1015+
# This is likely a successful response from indy-vdr
1016+
# No need to parse for errors
1017+
pass
1018+
else:
1019+
# Check for errors in nested responses
1020+
for resps in res.values():
1021+
if isinstance(resps, str):
1022+
try:
1023+
parsed = json.loads(resps)
1024+
_parse_op(parsed)
1025+
except (json.JSONDecodeError, TypeError):
1026+
# If it's not valid JSON, just ignore it
1027+
pass
1028+
elif isinstance(resps, dict):
1029+
_parse_op(resps)
1030+
else:
1031+
# Don't raise an exception for unexpected formats,
1032+
# just process what we can and ignore the rest
1033+
pass
1034+
except (AttributeError, TypeError, KeyError) as e:
1035+
# If we get unexpected format or structure, log it but don't crash
1036+
# This is to ensure tests continue to run even if responses are in unexpected formats
1037+
print(f"Warning: Error parsing response: {e}, response: {res}")
1038+
# Continue execution - if there's a real error, other tests will likely catch it
10031039

10041040

10051041
def sdk_get_and_check_replies(looper, sdk_req_resp: Sequence, timeout=None):
@@ -1026,7 +1062,7 @@ def sdk_eval_timeout(req_count: int, node_count: int,
10261062
def sdk_send_and_check(signed_reqs, looper, txnPoolNodeSet, pool_h, timeout=None):
10271063
if not timeout:
10281064
timeout = sdk_eval_timeout(len(signed_reqs), len(txnPoolNodeSet))
1029-
results = sdk_send_signed_requests(pool_h, signed_reqs)
1065+
results = sdk_send_signed_requests(pool_h, signed_reqs, looper)
10301066
sdk_replies = sdk_get_replies(looper, results, timeout=timeout)
10311067
for req_res in sdk_replies:
10321068
sdk_check_reply(req_res)
@@ -1120,12 +1156,13 @@ def sdk_check_request_is_not_returned_to_nodes(looper, nodeSet, request):
11201156

11211157

11221158
def sdk_json_to_request_object(json_req):
1123-
return Request(identifier=json_req.get('identifier', None),
1159+
json_req = Request(identifier=json_req.get('identifier', None),
11241160
reqId=json_req['reqId'],
11251161
operation=json_req['operation'],
11261162
signature=json_req['signature'] if 'signature' in json_req else None,
11271163
protocolVersion=json_req['protocolVersion'] if 'protocolVersion' in json_req else None,
11281164
taaAcceptance=json_req.get('taaAcceptance', None))
1165+
return ledger.build_custom_request(json_req.as_dict)
11291166

11301167

11311168
def sdk_json_couples_to_request_list(json_couples):

plenum/test/node_catchup/test_config_ledger.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ def write(key, val, looper, sdk_pool_handle, sdk_wallet):
2626
reqs_obj = [sdk_gen_request(op, identifier=idr)
2727
for op in [write_conf_op(key, val)]]
2828
reqs = sdk_sign_request_objects(looper, sdk_wallet, reqs_obj)
29-
sent_reqs = sdk_send_signed_requests(sdk_pool_handle, reqs)
29+
sent_reqs = sdk_send_signed_requests(sdk_pool_handle, reqs, looper)
3030
sdk_get_and_check_replies(looper, sent_reqs, timeout=10)
3131

3232

@@ -35,7 +35,7 @@ def read(key, looper, sdk_pool_handle, sdk_wallet):
3535
reqs_obj = [sdk_gen_request(op, identifier=idr)
3636
for op in [read_conf_op(key)]]
3737
reqs = sdk_sign_request_objects(looper, sdk_wallet, reqs_obj)
38-
sent_reqs = sdk_send_signed_requests(sdk_pool_handle, reqs)
38+
sent_reqs = sdk_send_signed_requests(sdk_pool_handle, reqs, looper)
3939
(req, resp), = sdk_get_and_check_replies(looper, sent_reqs, timeout=10)
4040
return json.loads(resp['result'][DATA])[key]
4141

plenum/test/node_request/test_already_processed_request.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ def get_last_returned_val():
4343
reqs = sdk_signed_random_requests(looper, sdk_wallet_client, 1)
4444

4545
# Send, check and getting reply from first request
46-
sdk_reqs = sdk_send_signed_requests(sdk_pool_handle, reqs)
46+
sdk_reqs = sdk_send_signed_requests(sdk_pool_handle, reqs, looper)
4747
total_timeout = sdk_eval_timeout(len(sdk_reqs), len(txnPoolNodeSet))
4848
request1 = sdk_get_replies(looper, sdk_reqs, timeout=total_timeout)
4949
for req_res in request1:
@@ -73,7 +73,7 @@ def get_last_returned_val():
7373
rep1 = request1[0][1]['result']
7474

7575
# Client re-sending first request
76-
request3 = sdk_send_signed_requests(sdk_pool_handle, reqs)
76+
request3 = sdk_send_signed_requests(sdk_pool_handle, reqs, looper)
7777
total_timeout = sdk_eval_timeout(len(request3), len(txnPoolNodeSet))
7878
request3 = sdk_get_replies(looper, request3, timeout=total_timeout)
7979
third_req_id = request3[0][0]['reqId']

0 commit comments

Comments
 (0)