Add rpacket tests

next
Sayan Nandan 4 years ago
parent ad7987878c
commit ff932f686c
No known key found for this signature in database
GPG Key ID: C31EFD7DDA12AEE0

@ -355,12 +355,18 @@ pub fn parse_result_packet(
Err(_) => return Err(UnrecognizedError(metaframe[4].to_owned())), Err(_) => return Err(UnrecognizedError(metaframe[4].to_owned())),
}; };
let respsize = match metaframe[4].parse::<usize>() {
Ok(r) => r,
Err(_) => return Err(StandardError(TPError::InvalidMetaframe)),
};
if let Some(respcode) = TPError::from_u8(respcode) { if let Some(respcode) = TPError::from_u8(respcode) {
match respcode { match respcode {
Okay => { TPError::Okay => {
// Enter dataframe and check result // Enter dataframe and check result
if let Some(value) = dataframe.get(0) { if let Some(value) = dataframe.get(0) {
if dataframe.get(1).is_none() { if dataframe.get(1).is_none() {
if value.len() == respsize {
return Ok(value.to_string()); return Ok(value.to_string());
} else { } else {
return Err(StandardError(TPError::CorruptDataframe)); return Err(StandardError(TPError::CorruptDataframe));
@ -368,6 +374,9 @@ pub fn parse_result_packet(
} else { } else {
return Err(StandardError(TPError::CorruptDataframe)); return Err(StandardError(TPError::CorruptDataframe));
} }
} else {
return Err(StandardError(TPError::CorruptDataframe));
}
} }
x @ _ => return Err(StandardError(x)), x @ _ => return Err(StandardError(x)),
} }
@ -464,3 +473,42 @@ fn test_qpacket_error() {
eq_corrupt_df eq_corrupt_df
); );
} }
#[cfg(test)]
#[test]
fn test_rpacket_error() {
let v = Version(0, 1, 0);
use TPResultError::*;
let bad_tp_tag = "AP/0.1.0/R/5\n\nsayan".to_owned();
let bad_version = "TP/0.1/R/0/5\n\nsayan".to_owned();
let bad_mf_r_tag = "TP/0.1.0/X/0/5\n\nsayan".to_owned();
let bad_mf_no_size = "TP/0.1.0/R/0\n\nsayan".to_owned();
let bad_df = "TP/0.1.0/R/0/5\n\n".to_owned();
let bad_df_size = "TP/0.1.0/0/4\n\nsaya".to_owned();
let err_invalid_mf = StandardError(TPError::InvalidMetaframe);
let err_corrupt_df = StandardError(TPError::CorruptDataframe);
assert_eq!(
parse_result_packet(&bad_tp_tag, &v).err().unwrap(),
err_invalid_mf
);
assert_eq!(
parse_result_packet(&bad_version, &v).err().unwrap(),
err_invalid_mf
);
assert_eq!(
parse_result_packet(&bad_mf_r_tag, &v).err().unwrap(),
err_invalid_mf
);
assert_eq!(
parse_result_packet(&bad_mf_no_size, &v).err().unwrap(),
err_invalid_mf
);
assert_eq!(
parse_result_packet(&bad_df, &v).err().unwrap(),
err_corrupt_df
);
assert_eq!(
parse_result_packet(&bad_df_size, &v).err().unwrap(),
err_invalid_mf
);
}

Loading…
Cancel
Save