diff --git a/src/cfdp/pdu/eof.rs b/src/cfdp/pdu/eof.rs index df96286..b251f47 100644 --- a/src/cfdp/pdu/eof.rs +++ b/src/cfdp/pdu/eof.rs @@ -205,11 +205,22 @@ mod tests { let mut buf: [u8; 64] = [0; 64]; eof_pdu.write_to_bytes(&mut buf).unwrap(); let eof_read_back = EofPdu::from_bytes(&buf); - if !eof_read_back.is_ok() { + if eof_read_back.is_err() { let e = eof_read_back.unwrap_err(); panic!("deserialization failed with: {e}") } let eof_read_back = eof_read_back.unwrap(); assert_eq!(eof_read_back, eof_pdu); } + + #[test] + fn test_write_to_vec() { + let pdu_conf = common_pdu_conf(CrcFlag::NoCrc, LargeFileFlag::Normal); + let pdu_header = PduHeader::new_no_file_data(pdu_conf, 0); + let eof_pdu = EofPdu::new_no_error(pdu_header, 0x01020304, 12); + let mut buf: [u8; 64] = [0; 64]; + let written = eof_pdu.write_to_bytes(&mut buf).unwrap(); + let pdu_vec = eof_pdu.to_vec().unwrap(); + assert_eq!(buf[0..written], pdu_vec); + } } diff --git a/src/cfdp/pdu/file_data.rs b/src/cfdp/pdu/file_data.rs index d6090cb..4c334a6 100644 --- a/src/cfdp/pdu/file_data.rs +++ b/src/cfdp/pdu/file_data.rs @@ -234,13 +234,13 @@ mod tests { use crate::cfdp::{SegmentMetadataFlag, SegmentationControl}; use crate::util::UbfU8; + const SRC_ID: UbfU8 = UbfU8::new(1); + const DEST_ID: UbfU8 = UbfU8::new(2); + const SEQ_NUM: UbfU8 = UbfU8::new(3); + #[test] fn test_basic() { - let src_id = UbfU8::new(1); - let dest_id = UbfU8::new(2); - let transaction_seq_num = UbfU8::new(3); - let common_conf = - CommonPduConfig::new_with_byte_fields(src_id, dest_id, transaction_seq_num).unwrap(); + let common_conf = CommonPduConfig::new_with_byte_fields(SRC_ID, DEST_ID, SEQ_NUM).unwrap(); let pdu_header = PduHeader::new_for_file_data_default(common_conf, 0); let file_data: [u8; 4] = [1, 2, 3, 4]; let fd_pdu = FileDataPdu::new_no_seg_metadata(pdu_header, 10, &file_data); @@ -255,11 +255,7 @@ mod tests { #[test] fn test_serialization() { - let src_id = UbfU8::new(1); - let dest_id = UbfU8::new(2); - let transaction_seq_num = UbfU8::new(3); - let common_conf = - CommonPduConfig::new_with_byte_fields(src_id, dest_id, transaction_seq_num).unwrap(); + let common_conf = CommonPduConfig::new_with_byte_fields(SRC_ID, DEST_ID, SEQ_NUM).unwrap(); let pdu_header = PduHeader::new_for_file_data_default(common_conf, 0); let file_data: [u8; 4] = [1, 2, 3, 4]; let fd_pdu = FileDataPdu::new_no_seg_metadata(pdu_header, 10, &file_data); @@ -288,13 +284,21 @@ mod tests { assert_eq!(buf[current_idx], 4); } + #[test] + fn test_write_to_vec() { + let common_conf = CommonPduConfig::new_with_byte_fields(SRC_ID, DEST_ID, SEQ_NUM).unwrap(); + let pdu_header = PduHeader::new_for_file_data_default(common_conf, 0); + let file_data: [u8; 4] = [1, 2, 3, 4]; + let fd_pdu = FileDataPdu::new_no_seg_metadata(pdu_header, 10, &file_data); + let mut buf: [u8; 64] = [0; 64]; + let written = fd_pdu.write_to_bytes(&mut buf).unwrap(); + let pdu_vec = fd_pdu.to_vec().unwrap(); + assert_eq!(buf[0..written], pdu_vec); + } + #[test] fn test_deserialization() { - let src_id = UbfU8::new(1); - let dest_id = UbfU8::new(2); - let transaction_seq_num = UbfU8::new(3); - let common_conf = - CommonPduConfig::new_with_byte_fields(src_id, dest_id, transaction_seq_num).unwrap(); + let common_conf = CommonPduConfig::new_with_byte_fields(SRC_ID, DEST_ID, SEQ_NUM).unwrap(); let pdu_header = PduHeader::new_for_file_data_default(common_conf, 0); let file_data: [u8; 4] = [1, 2, 3, 4]; let fd_pdu = FileDataPdu::new_no_seg_metadata(pdu_header, 10, &file_data); diff --git a/src/cfdp/pdu/finished.rs b/src/cfdp/pdu/finished.rs index b68aef5..d56d5a0 100644 --- a/src/cfdp/pdu/finished.rs +++ b/src/cfdp/pdu/finished.rs @@ -335,6 +335,20 @@ mod tests { generic_serialization_test_no_error(DeliveryCode::Incomplete, FileStatus::Unreported); } + #[test] + fn test_write_to_vec() { + let finished_pdu = generic_finished_pdu( + CrcFlag::NoCrc, + LargeFileFlag::Normal, + DeliveryCode::Complete, + FileStatus::Retained, + ); + let mut buf: [u8; 64] = [0; 64]; + let written = finished_pdu.write_to_bytes(&mut buf).unwrap(); + let pdu_vec = finished_pdu.to_vec().unwrap(); + assert_eq!(buf[0..written], pdu_vec); + } + #[test] fn test_deserialization_simple() { let finished_pdu = generic_finished_pdu( diff --git a/src/cfdp/pdu/metadata.rs b/src/cfdp/pdu/metadata.rs index 2246edc..d68444c 100644 --- a/src/cfdp/pdu/metadata.rs +++ b/src/cfdp/pdu/metadata.rs @@ -388,6 +388,16 @@ pub mod tests { assert_eq!(current_idx, written); } + #[test] + fn test_write_to_vec() { + let (_, _, metadata_pdu) = + generic_metadata_pdu(CrcFlag::NoCrc, LargeFileFlag::Normal, None); + let mut buf: [u8; 64] = [0; 64]; + let pdu_vec = metadata_pdu.to_vec().unwrap(); + let written = metadata_pdu.write_to_bytes(&mut buf).unwrap(); + assert_eq!(buf[0..written], pdu_vec); + } + #[test] fn test_deserialization() { let (_, _, metadata_pdu) = diff --git a/src/ecss/tc.rs b/src/ecss/tc.rs index 06ee7bc..6e7bc53 100644 --- a/src/ecss/tc.rs +++ b/src/ecss/tc.rs @@ -905,6 +905,20 @@ mod tests { verify_crc_no_app_data(&test_buf); } + #[test] + fn test_writing_into_vec() { + let pus_tc = base_ping_tc_simple_ctor(); + let tc_vec = pus_tc.to_vec().expect("Error writing TC to buffer"); + assert_eq!(tc_vec.len(), 13); + let (tc_from_raw, size) = PusTcReader::new(tc_vec.as_slice()) + .expect("Creating PUS TC struct from raw buffer failed"); + assert_eq!(size, 13); + verify_test_tc_with_reader(&tc_from_raw, false, 13); + assert!(tc_from_raw.user_data().is_empty()); + verify_test_tc_raw(&tc_vec); + verify_crc_no_app_data(&tc_vec); + } + #[test] fn test_update_func() { let mut sph = SpHeader::tc_unseg(0x02, 0x34, 0).unwrap(); diff --git a/src/ecss/tm.rs b/src/ecss/tm.rs index bb8e84e..a12db61 100644 --- a/src/ecss/tm.rs +++ b/src/ecss/tm.rs @@ -999,7 +999,7 @@ mod tests { #[test] fn test_setters() { let timestamp = dummy_timestamp(); - let mut pus_tm = base_ping_reply_full_ctor(×tamp); + let mut pus_tm = base_ping_reply_full_ctor(timestamp); pus_tm.set_sc_time_ref_status(0b1010); pus_tm.set_dest_id(0x7fff); pus_tm.set_msg_counter(0x1f1f); @@ -1010,10 +1010,21 @@ mod tests { assert_eq!(pus_tm.apid(), 0x7ff); } + #[test] + fn test_write_into_vec() { + let timestamp = dummy_timestamp(); + let pus_tm = base_ping_reply_full_ctor(timestamp); + let tm_vec = pus_tm.to_vec().expect("Serialization failed"); + assert_eq!(tm_vec.len(), 22); + let (tm_deserialized, size) = + PusTmReader::new(tm_vec.as_slice(), 7).expect("Deserialization failed"); + assert_eq!(tm_vec.len(), size); + verify_ping_reply_with_reader(&tm_deserialized, false, 22, dummy_timestamp()); + } #[test] fn test_deserialization_no_source_data() { let timestamp = dummy_timestamp(); - let pus_tm = base_ping_reply_full_ctor(×tamp); + let pus_tm = base_ping_reply_full_ctor(timestamp); let mut buf: [u8; 32] = [0; 32]; let ser_len = pus_tm .write_to_bytes(&mut buf) @@ -1045,7 +1056,7 @@ mod tests { #[test] fn test_target_buf_too_small() { let timestamp = dummy_timestamp(); - let pus_tm = base_ping_reply_full_ctor(×tamp); + let pus_tm = base_ping_reply_full_ctor(timestamp); let mut buf: [u8; 16] = [0; 16]; let res = pus_tm.write_to_bytes(&mut buf); assert!(res.is_err());