Skip to content

Commit 4fa9cd8

Browse files
committed
Updated tests to correct handle wrute responses. Updated CLI to support both formats
Signed-off-by: artem.ivanov <[email protected]>
1 parent 2f0fca0 commit 4fa9cd8

File tree

7 files changed

+75
-78
lines changed

7 files changed

+75
-78
lines changed

cli/src/commands/ledger.rs

Lines changed: 49 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -73,14 +73,13 @@ pub mod nym_command {
7373
.map_err(|err| println_err!("Invalid data has been received: {:?}", err))?;
7474

7575
if let Some(result) = response.result.as_mut() {
76+
result["txn"]["data"]["role"] = get_role_title(&result["txn"]["data"]["role"]);
7677
result["role"] = get_role_title(&result["role"]);
7778
}
7879

7980
let res = handle_transaction_response(response)
8081
.map(|result| print_transaction_response(result,
8182
"Nym request has been sent to Ledger.",
82-
&[("reqId", "Request ID"),
83-
("txnTime", "Transaction time")],
8483
None,
8584
&mut vec![("dest", "Did"),
8685
("verkey", "Verkey"),
@@ -128,9 +127,6 @@ pub mod get_nym_command {
128127
let res = handle_transaction_response(response)
129128
.map(|result| print_transaction_response(result,
130129
"Following NYM has been received.",
131-
&[("seqNo", "Sequence Number"),
132-
("reqId", "Request ID"),
133-
("txnTime", "Transaction time")],
134130
Some("data"),
135131
&[("identifier", "Identifier"),
136132
("dest", "Dest"),
@@ -194,10 +190,6 @@ pub mod attrib_command {
194190
let res = handle_transaction_response(response)
195191
.map(|result| print_transaction_response(result,
196192
"Attrib request has been sent to Ledger.",
197-
&[("dest", "Dest"),
198-
("seqNo", "Sequence Number"),
199-
("reqId", "Request ID"),
200-
("txnTime", "Transaction time")],
201193
None,
202194
&[attribute]));
203195

@@ -249,10 +241,6 @@ pub mod get_attrib_command {
249241
let res = handle_transaction_response(response)
250242
.map(|result| print_transaction_response(result,
251243
"Following ATTRIB has been received.",
252-
&[("dest", "Did"),
253-
("seqNo", "Sequence Number"),
254-
("reqId", "Request ID"),
255-
("txnTime", "Transaction time")],
256244
None,
257245
&[("data", "Data")]));
258246
trace!("execute << {:?}", res);
@@ -313,10 +301,6 @@ pub mod schema_command {
313301
let res = handle_transaction_response(response)
314302
.map(|result| print_transaction_response(result,
315303
"Schema request has been sent to Ledger.",
316-
&[("identifier", "Identifier"),
317-
("seqNo", "Sequence Number"),
318-
("reqId", "Request ID"),
319-
("txnTime", "Transaction time")],
320304
Some("data"),
321305
&[("name", "Name"),
322306
("version", "Version"),
@@ -406,10 +390,6 @@ pub mod get_schema_command {
406390
let res = handle_transaction_response(response)
407391
.map(|result| print_transaction_response(result,
408392
"Following Schema has been received.",
409-
&[("dest", "Did"),
410-
("seqNo", "Sequence Number"),
411-
("reqId", "Request ID"),
412-
("txnTime", "Transaction time")],
413393
Some("data"),
414394
&[("name", "Name"),
415395
("version", "Version"),
@@ -481,10 +461,6 @@ pub mod cred_def_command {
481461
let res = handle_transaction_response(response)
482462
.map(|result| print_transaction_response(result,
483463
"NodeConfig request has been sent to Ledger.",
484-
&[("identifier", "Identifier"),
485-
("seqNo", "Sequence Number"),
486-
("reqId", "Request ID"),
487-
("txnTime", "Transaction time")],
488464
Some("data"),
489465
&[("primary", "Primary Key"),
490466
("revocation", "Revocation Key")]));
@@ -532,10 +508,6 @@ pub mod get_cred_def_command {
532508
let res = handle_transaction_response(response)
533509
.map(|result| print_transaction_response(result,
534510
"Following Credential Definition has been received.",
535-
&[("identifier", "Identifier"),
536-
("seqNo", "Sequence Number"),
537-
("reqId", "Request ID"),
538-
("txnTime", "Transaction time")],
539511
Some("data"),
540512
&[("primary", "Primary Key"),
541513
("revocation", "Revocation Key")]));
@@ -601,10 +573,6 @@ pub mod node_command {
601573
let res = handle_transaction_response(response)
602574
.map(|result| print_transaction_response(result,
603575
"NodeConfig request has been sent to Ledger.",
604-
&[("identifier", "Identifier"),
605-
("seqNo", "Sequence Number"),
606-
("reqId", "Request ID"),
607-
("txnTime", "Transaction time")],
608576
Some("data"),
609577
&[("alias", "Alias"),
610578
("node_ip", "Node Ip"),
@@ -649,10 +617,6 @@ pub mod pool_config_command {
649617
let res = handle_transaction_response(response)
650618
.map(|result| print_transaction_response(result,
651619
"NodeConfig request has been sent to Ledger.",
652-
&[("identifier", "Identifier"),
653-
("seqNo", "Sequence Number"),
654-
("reqId", "Request ID"),
655-
("txnTime", "Transaction time")],
656620
None,
657621
&[("writes", "Writes"),
658622
("force", "Force Apply")]));
@@ -692,9 +656,6 @@ pub mod pool_restart_command {
692656
let res = handle_transaction_response(response)
693657
.map(|result| print_transaction_response(result,
694658
"Restart pool request has been sent to Ledger.",
695-
&[
696-
("identifier", "Identifier"),
697-
("reqId", "Request ID")],
698659
None,
699660
&[
700661
("isSuccess", "IsSuccess"),
@@ -769,10 +730,6 @@ pub mod pool_upgrade_command {
769730
let res = handle_transaction_response(response)
770731
.map(|result| print_transaction_response(result,
771732
"NodeConfig request has been sent to Ledger.",
772-
&[("identifier", "Identifier"),
773-
("seqNo", "Sequence Number"),
774-
("reqId", "Request ID"),
775-
("txnTime", "Transaction time")],
776733
None,
777734
&[("name", "Name"),
778735
("action", "Action"),
@@ -1171,25 +1128,63 @@ fn parse_payment_fees(fees: &Vec<&str>) -> Result<String, ()> {
11711128
}
11721129

11731130
fn print_transaction_response(mut result: serde_json::Value, title: &str,
1174-
metadata_headers: &[(&str, &str)],
1175-
data_field: Option<&str>,
1131+
data_sub_field: Option<&str>,
11761132
data_headers: &[(&str, &str)]) {
1177-
if let Some(txn_time) = result["txnTime"].as_i64() {
1178-
result["txnTime"] = serde_json::Value::String(timestamp_to_datetime(txn_time))
1179-
}
1180-
11811133
println_succ!("{}", title);
1134+
1135+
let (metadata_headers, metadata, data) = match result["ver"].clone().as_str() {
1136+
None => parse_transaction_response_v0(&mut result),
1137+
Some("1") => parse_transaction_response_v1(&mut result),
1138+
ver @ _ => return println_err!("Unsupported transaction response format: {:?}", ver)
1139+
};
1140+
11821141
println_succ!("Metadata:");
1183-
print_table(&result, metadata_headers);
1184-
println_succ!("Data:");
1142+
print_table(&metadata, &metadata_headers);
11851143

1186-
let data = if data_field.is_some() { &result[data_field.unwrap()] } else { &result };
1144+
let data = if data_sub_field.is_some() { &data[data_sub_field.unwrap()] } else { &data };
11871145
let mut data_headers = data_headers.to_vec();
11881146
data_headers.retain(|&(ref key, _)| !data[key].is_null());
11891147

1148+
println_succ!("Data:");
11901149
print_table(data, &data_headers);
11911150
}
11921151

1152+
fn parse_transaction_response_v0(result: &mut serde_json::Value) -> ([(&'static str, &'static str); 4], serde_json::Value, serde_json::Value) {
1153+
if let Some(txn_time) = result["txnTime"].as_i64() {
1154+
result["txnTime"] = serde_json::Value::String(timestamp_to_datetime(txn_time))
1155+
}
1156+
1157+
let metadata_headers = [
1158+
("identifier", "Identifier"),
1159+
("seqNo", "Sequence Number"),
1160+
("reqId", "Request ID"),
1161+
("txnTime", "Transaction time")];
1162+
1163+
(metadata_headers, result.clone(), result.clone())
1164+
}
1165+
1166+
fn parse_transaction_response_v1(result: &mut serde_json::Value) -> ([(&'static str, &'static str); 4], serde_json::Value, serde_json::Value) {
1167+
if let Some(txn_time) = result["txnMetadata"]["txnTime"].as_i64() {
1168+
result["txnMetadata"]["txnTime"] = serde_json::Value::String(timestamp_to_datetime(txn_time))
1169+
}
1170+
1171+
let metadata_headers = [
1172+
("from", "From"),
1173+
("seqNo", "Sequence Number"),
1174+
("reqId", "Request ID"),
1175+
("txnTime", "Transaction time")];
1176+
1177+
let mut metadata_obj = result["txnMetadata"].as_object().unwrap().clone();
1178+
1179+
metadata_obj.insert("reqId".to_string(), result["txn"]["metadata"]["reqId"].clone());
1180+
metadata_obj.insert("from".to_string(), result["txn"]["metadata"]["from"].clone());
1181+
1182+
let metadata = serde_json::Value::Object(metadata_obj);
1183+
let data = result["txn"]["data"].clone();
1184+
1185+
(metadata_headers, metadata, data)
1186+
}
1187+
11931188
pub fn handle_transaction_response(response: Response<serde_json::Value>) -> Result<serde_json::Value, ()> {
11941189
match response {
11951190
Response { op: ResponseType::REPLY, result: Some(result), reason: None } => Ok(result),
@@ -3526,7 +3521,7 @@ pub mod tests {
35263521
let schema_request = Ledger::build_schema_request(&did, schema_data).unwrap();
35273522
let schema_response = Ledger::sign_and_submit_request(pool_handle, wallet_handle, &did, &schema_request).unwrap();
35283523
let schema: serde_json::Value = serde_json::from_str(&schema_response).unwrap();
3529-
let seq_no = schema["result"]["seqNo"].as_i64().unwrap();
3524+
let seq_no = schema["result"]["txnMetadata"]["seqNo"].as_i64().unwrap();
35303525
seq_no.to_string()
35313526
}
35323527

libindy/tests/ledger.rs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -969,19 +969,20 @@ mod high_cases {
969969
let schema_response = LedgerUtils::sign_and_submit_request(pool_handle, wallet_handle, &did, &schema_request).unwrap();
970970
let schema: serde_json::Value = serde_json::from_str(&schema_response).unwrap();
971971

972-
let seq_no = schema["result"]["seqNo"].as_i64().unwrap() as i32;
972+
let seq_no = schema["result"]["txnMetadata"]["seqNo"].as_i64().unwrap() as i32;
973973

974974
thread::sleep(std::time::Duration::from_secs(3));
975975

976976
let get_txn_request = LedgerUtils::build_get_txn_request(&did, seq_no).unwrap();
977977
let get_txn_response = LedgerUtils::submit_request(pool_handle, &get_txn_request).unwrap();
978978

979979
let get_txn_response: Reply<GetTxnResult> = serde_json::from_str(&get_txn_response).unwrap();
980-
981-
let get_txn_schema_result: SchemaResult = serde_json::from_value(get_txn_response.result.data.unwrap()).unwrap();
980+
let get_txn_schema_data: SchemaData = serde_json::from_value(
981+
serde_json::Value::Object(get_txn_response.result.data.unwrap()["txn"]["data"]["data"].as_object().unwrap().clone())
982+
).unwrap();
982983

983984
let expected_schema_data: SchemaData = serde_json::from_str(r#"{"name":"gvt","version":"1.0","attr_names":["name", "age", "sex", "height"]}"#).unwrap();
984-
assert_eq!(expected_schema_data, get_txn_schema_result.data.unwrap());
985+
assert_eq!(expected_schema_data, get_txn_schema_data);
985986

986987
PoolUtils::close(pool_handle).unwrap();
987988
WalletUtils::close_wallet(wallet_handle).unwrap();
@@ -1003,7 +1004,7 @@ mod high_cases {
10031004
let schema_response = LedgerUtils::sign_and_submit_request(pool_handle, wallet_handle, &did, &schema_request).unwrap();
10041005
let schema: serde_json::Value = serde_json::from_str(&schema_response).unwrap();
10051006

1006-
let seq_no = schema["result"]["seqNo"].as_i64().unwrap() as i32;
1007+
let seq_no = schema["result"]["txnMetadata"]["seqNo"].as_i64().unwrap() as i32;
10071008

10081009
let seq_no = seq_no + 1;
10091010

libindy/tests/utils/ledger.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ impl LedgerUtils {
9494

9595
fn _extract_seq_no_from_reply(reply: &str) -> Result<u64, &'static str> {
9696
::serde_json::from_str::<::serde_json::Value>(reply).map_err(|_| "Reply isn't valid JSON")?
97-
["result"]["seqNo"]
97+
["result"]["txnMetadata"]["seqNo"]
9898
.as_u64().ok_or("Missed seqNo in reply")
9999
}
100100

wrappers/java/src/test/java/org/hyperledger/indy/sdk/ledger/GetTxnRequestTest.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,16 +31,17 @@ public void testGetTxnRequestWorks() throws Exception {
3131
String schemaResponse = Ledger.signAndSubmitRequest(pool, wallet, did, schemaRequest).get();
3232

3333
JSONObject schemaResponseObj = new JSONObject(schemaResponse);
34-
int seqNo = schemaResponseObj.getJSONObject("result").getInt("seqNo");
34+
int seqNo = schemaResponseObj.getJSONObject("result").getJSONObject("txnMetadata").getInt("seqNo");
3535

3636
String getTxnRequest = Ledger.buildGetTxnRequest(did, seqNo).get();
3737
String expectedData = "{\"name\":\"gvt\",\"version\":\"1.0\",\"attr_names\": [\"name\"]}";
3838

3939
String getTxnResponse = PoolUtils.ensurePreviousRequestApplied(pool, getTxnRequest, response -> {
4040
JSONObject getTxnResponseObj = new JSONObject(response);
41-
JSONObject schemaTransactionObj = getTxnResponseObj.getJSONObject("result").getJSONObject("data");
41+
JSONObject schemaTransactionObj =
42+
getTxnResponseObj.getJSONObject("result").getJSONObject("data").getJSONObject("txn").getJSONObject("data").getJSONObject("data");
4243

43-
return new JSONObject(expectedData).similar(schemaTransactionObj.getJSONObject("data"));
44+
return new JSONObject(expectedData).similar(schemaTransactionObj);
4445
});
4546
assertNotNull(getTxnResponse);
4647
}
@@ -53,7 +54,7 @@ public void testGetTxnRequestWorksForInvalidSeqNo() throws Exception {
5354
String schemaResponse = Ledger.signAndSubmitRequest(pool, wallet, did, schemaRequest).get();
5455

5556
JSONObject schemaResponseObj = new JSONObject(schemaResponse);
56-
int seqNo = schemaResponseObj.getJSONObject("result").getInt("seqNo") + 1;
57+
int seqNo = schemaResponseObj.getJSONObject("result").getJSONObject("txnMetadata").getInt("seqNo") + 1;
5758

5859
String getTxnRequest = Ledger.buildGetTxnRequest(did, seqNo).get();
5960
String getTxnResponse = Ledger.submitRequest(pool, getTxnRequest).get();

0 commit comments

Comments
 (0)