make first acked test work
This commit is contained in:
115
src/dest.rs
115
src/dest.rs
@@ -1826,6 +1826,12 @@ mod tests {
|
||||
|
||||
use super::*;
|
||||
|
||||
#[derive(Debug, Clone, Copy)]
|
||||
pub struct TransferInfo {
|
||||
id: TransactionId,
|
||||
header: PduHeader,
|
||||
}
|
||||
|
||||
type TestDestHandler = DestinationHandler<
|
||||
TestCfdpSender,
|
||||
TestFaultHandler,
|
||||
@@ -1906,6 +1912,14 @@ mod tests {
|
||||
&mut self.handler.local_cfg.indication_cfg
|
||||
}
|
||||
|
||||
fn pdu_queue_empty(&mut self) -> bool {
|
||||
self.handler.pdu_sender.queue_empty()
|
||||
}
|
||||
|
||||
fn pdu_queue_len(&mut self) -> usize {
|
||||
self.handler.pdu_sender.queue_len()
|
||||
}
|
||||
|
||||
fn get_next_pdu(&mut self) -> Option<SentPdu> {
|
||||
self.handler.pdu_sender.retrieve_next_pdu()
|
||||
}
|
||||
@@ -1934,7 +1948,7 @@ mod tests {
|
||||
user: &mut TestCfdpUser,
|
||||
file_size: u64,
|
||||
transmission_mode: TransmissionMode,
|
||||
) -> Result<TransactionId, DestError> {
|
||||
) -> Result<TransferInfo, DestError> {
|
||||
self.expected_file_size = file_size;
|
||||
self.pdu_conf.trans_mode = transmission_mode;
|
||||
assert_eq!(user.transaction_indication_call_count, 0);
|
||||
@@ -1966,7 +1980,10 @@ mod tests {
|
||||
assert_eq!(metadata_recvd.id, self.handler.transaction_id().unwrap());
|
||||
assert_eq!(metadata_recvd.file_size, file_size);
|
||||
assert!(metadata_recvd.msgs_to_user.is_empty());
|
||||
Ok(self.handler.transaction_id().unwrap())
|
||||
Ok(TransferInfo {
|
||||
id: self.handler.transaction_id().unwrap(),
|
||||
header: pdu_header,
|
||||
})
|
||||
}
|
||||
|
||||
fn generic_file_data_insert(
|
||||
@@ -2182,12 +2199,36 @@ mod tests {
|
||||
let fault_handler = TestFaultHandler::default();
|
||||
let mut tb = DestHandlerTestbench::new_with_fixed_paths(fault_handler, false);
|
||||
let mut test_user = tb.test_user_from_cached_paths(0);
|
||||
tb.generic_transfer_init(&mut test_user, 0, TransmissionMode::Acknowledged)
|
||||
let transfer_info = tb
|
||||
.generic_transfer_init(&mut test_user, 0, TransmissionMode::Acknowledged)
|
||||
.expect("transfer init failed");
|
||||
tb.state_check(State::Busy, TransactionStep::ReceivingFileDataPdus);
|
||||
tb.generic_eof_no_error(&mut test_user, Vec::new())
|
||||
.expect("EOF no error insertion failed");
|
||||
tb.check_completion_indication_success(&mut test_user);
|
||||
assert!(!tb.pdu_queue_empty());
|
||||
assert_eq!(tb.pdu_queue_len(), 2);
|
||||
let pdu = tb.get_next_pdu().unwrap();
|
||||
assert_eq!(pdu.pdu_type, PduType::FileDirective);
|
||||
assert_eq!(pdu.file_directive_type.unwrap(), FileDirectiveType::AckPdu);
|
||||
assert!(!tb.pdu_queue_empty());
|
||||
let pdu = tb.get_next_pdu().unwrap();
|
||||
assert_eq!(pdu.pdu_type, PduType::FileDirective);
|
||||
assert_eq!(
|
||||
pdu.file_directive_type.unwrap(),
|
||||
FileDirectiveType::FinishedPdu
|
||||
);
|
||||
let ack_pdu = AckPdu::new_for_finished_pdu(
|
||||
transfer_info.header,
|
||||
ConditionCode::NoError,
|
||||
TransactionStatus::Active,
|
||||
);
|
||||
tb.handler
|
||||
.state_machine(
|
||||
&mut test_user,
|
||||
Some(&create_packet_info(&ack_pdu, &mut tb.buf)),
|
||||
)
|
||||
.expect("handling ack PDU failed");
|
||||
assert!(test_user.indication_queues_empty());
|
||||
}
|
||||
|
||||
@@ -2250,7 +2291,7 @@ mod tests {
|
||||
|
||||
let mut tb = DestHandlerTestbench::new_with_fixed_paths(fault_handler, false);
|
||||
let mut test_user = tb.test_user_from_cached_paths(file_size);
|
||||
let transaction_id = tb
|
||||
let transfer_info = tb
|
||||
.generic_transfer_init(&mut test_user, file_size, TransmissionMode::Unacknowledged)
|
||||
.expect("transfer init failed");
|
||||
|
||||
@@ -2264,7 +2305,7 @@ mod tests {
|
||||
let mut fault_handler = tb.handler.local_cfg.fault_handler.user_hook.borrow_mut();
|
||||
assert_eq!(fault_handler.ignored_queue.len(), 1);
|
||||
let cancelled = fault_handler.ignored_queue.pop_front().unwrap();
|
||||
assert_eq!(cancelled.0, transaction_id);
|
||||
assert_eq!(cancelled.0, transfer_info.id);
|
||||
assert_eq!(cancelled.1, ConditionCode::FileChecksumFailure);
|
||||
assert_eq!(cancelled.2, segment_len as u64);
|
||||
|
||||
@@ -2311,7 +2352,7 @@ mod tests {
|
||||
let fault_handler = TestFaultHandler::default();
|
||||
let mut testbench = DestHandlerTestbench::new_with_fixed_paths(fault_handler, false);
|
||||
let mut test_user = testbench.test_user_from_cached_paths(file_size);
|
||||
let transaction_id = testbench
|
||||
let transfer_info = testbench
|
||||
.generic_transfer_init(&mut test_user, file_size, TransmissionMode::Unacknowledged)
|
||||
.expect("transfer init failed");
|
||||
|
||||
@@ -2322,7 +2363,7 @@ mod tests {
|
||||
testbench
|
||||
.generic_eof_no_error(&mut test_user, random_data.to_vec())
|
||||
.expect("EOF no error insertion failed");
|
||||
check_checksum_failure(&mut testbench, transaction_id);
|
||||
check_checksum_failure(&mut testbench, transfer_info.id);
|
||||
|
||||
testbench.state_check(
|
||||
State::Busy,
|
||||
@@ -2338,14 +2379,14 @@ mod tests {
|
||||
State::Busy,
|
||||
TransactionStep::ReceivingFileDataPdusWithCheckLimitHandling,
|
||||
);
|
||||
check_checksum_failure(&mut testbench, transaction_id);
|
||||
check_checksum_failure(&mut testbench, transfer_info.id);
|
||||
|
||||
testbench.set_check_timer_expired();
|
||||
testbench
|
||||
.handler
|
||||
.state_machine_no_packet(&mut test_user)
|
||||
.expect("fsm error");
|
||||
check_checksum_failure(&mut testbench, transaction_id);
|
||||
check_checksum_failure(&mut testbench, transfer_info.id);
|
||||
|
||||
testbench.state_check(State::Idle, TransactionStep::Idle);
|
||||
|
||||
@@ -2354,14 +2395,14 @@ mod tests {
|
||||
let cancelled_queue = &mut fault_hook.notice_of_cancellation_queue;
|
||||
assert_eq!(cancelled_queue.len(), 1);
|
||||
let cancelled = cancelled_queue.pop_front().unwrap();
|
||||
assert_eq!(cancelled.0, transaction_id);
|
||||
assert_eq!(cancelled.0, transfer_info.id);
|
||||
assert_eq!(cancelled.1, ConditionCode::CheckLimitReached);
|
||||
assert_eq!(cancelled.2, segment_len as u64);
|
||||
}
|
||||
|
||||
assert_eq!(test_user.finished_indic_queue.len(), 1);
|
||||
let finished_indication = test_user.finished_indic_queue.pop_front().unwrap();
|
||||
assert_eq!(finished_indication.id, transaction_id);
|
||||
assert_eq!(finished_indication.id, transfer_info.id);
|
||||
assert_eq!(
|
||||
finished_indication.condition_code,
|
||||
ConditionCode::CheckLimitReached
|
||||
@@ -2478,7 +2519,7 @@ mod tests {
|
||||
let fault_handler = TestFaultHandler::default();
|
||||
let mut tb = DestHandlerTestbench::new_with_fixed_paths(fault_handler, true);
|
||||
let mut user = tb.test_user_from_cached_paths(file_size);
|
||||
tb.generic_transfer_init(&mut user, 0, TransmissionMode::Unacknowledged)
|
||||
tb.generic_transfer_init(&mut user, file_size, TransmissionMode::Unacknowledged)
|
||||
.expect("transfer init failed");
|
||||
let faulty_file_data = b"Hemlo World!";
|
||||
assert_eq!(
|
||||
@@ -2606,7 +2647,7 @@ mod tests {
|
||||
let fault_handler = TestFaultHandler::default();
|
||||
let mut tb = DestHandlerTestbench::new_with_fixed_paths(fault_handler, false);
|
||||
let mut user = tb.test_user_from_cached_paths(0);
|
||||
let id = tb
|
||||
let transfer_info = tb
|
||||
.generic_transfer_init(&mut user, 0, TransmissionMode::Unacknowledged)
|
||||
.expect("transfer init failed");
|
||||
tb.state_check(State::Busy, TransactionStep::ReceivingFileDataPdus);
|
||||
@@ -2629,7 +2670,7 @@ mod tests {
|
||||
user.verify_finished_indication_retained(
|
||||
DeliveryCode::Complete,
|
||||
ConditionCode::CancelRequestReceived,
|
||||
id,
|
||||
transfer_info.id,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -2644,8 +2685,8 @@ mod tests {
|
||||
let fault_handler = TestFaultHandler::default();
|
||||
let mut tb = DestHandlerTestbench::new_with_fixed_paths(fault_handler, with_closure);
|
||||
let mut user = tb.test_user_from_cached_paths(file_size);
|
||||
let id = tb
|
||||
.generic_transfer_init(&mut user, 0, TransmissionMode::Unacknowledged)
|
||||
let transfer_info = tb
|
||||
.generic_transfer_init(&mut user, file_size, TransmissionMode::Unacknowledged)
|
||||
.expect("transfer init failed");
|
||||
tb.state_check(State::Busy, TransactionStep::ReceivingFileDataPdus);
|
||||
if insert_packet {
|
||||
@@ -2689,7 +2730,7 @@ mod tests {
|
||||
user.verify_finished_indication_retained(
|
||||
DeliveryCode::Complete,
|
||||
ConditionCode::CancelRequestReceived,
|
||||
id,
|
||||
transfer_info.id,
|
||||
);
|
||||
} else {
|
||||
// Checksum failure, so data is incomplete.
|
||||
@@ -2698,13 +2739,13 @@ mod tests {
|
||||
let mut fault_hook = tb.handler.local_cfg.user_fault_hook().borrow_mut();
|
||||
let ignored_queue = &mut fault_hook.ignored_queue;
|
||||
let ignored = ignored_queue.pop_front().unwrap();
|
||||
assert_eq!(ignored.0, id);
|
||||
assert_eq!(ignored.0, transfer_info.id);
|
||||
assert_eq!(ignored.1, ConditionCode::FileChecksumFailure);
|
||||
assert_eq!(ignored.2, 5);
|
||||
user.verify_finished_indication_retained(
|
||||
DeliveryCode::Incomplete,
|
||||
ConditionCode::CancelRequestReceived,
|
||||
id,
|
||||
transfer_info.id,
|
||||
);
|
||||
}
|
||||
assert_eq!(finished_pdu.file_status(), FileStatus::Retained);
|
||||
@@ -2718,7 +2759,7 @@ mod tests {
|
||||
user.verify_finished_indication_retained(
|
||||
DeliveryCode::Complete,
|
||||
ConditionCode::CancelRequestReceived,
|
||||
id,
|
||||
transfer_info.id,
|
||||
);
|
||||
assert_eq!(packets, 0);
|
||||
}
|
||||
@@ -2746,11 +2787,11 @@ mod tests {
|
||||
let fault_handler = TestFaultHandler::default();
|
||||
let mut tb = DestHandlerTestbench::new_with_fixed_paths(fault_handler, false);
|
||||
let mut user = tb.test_user_from_cached_paths(0);
|
||||
let id = tb
|
||||
let transfer_info = tb
|
||||
.generic_transfer_init(&mut user, 0, TransmissionMode::Unacknowledged)
|
||||
.expect("transfer init failed");
|
||||
tb.state_check(State::Busy, TransactionStep::ReceivingFileDataPdus);
|
||||
tb.handler.cancel_request(&id);
|
||||
tb.handler.cancel_request(&transfer_info.id);
|
||||
let packets = tb
|
||||
.handler
|
||||
.state_machine_no_packet(&mut user)
|
||||
@@ -2758,7 +2799,7 @@ mod tests {
|
||||
user.verify_finished_indication_retained(
|
||||
DeliveryCode::Complete,
|
||||
ConditionCode::CancelRequestReceived,
|
||||
id,
|
||||
transfer_info.id,
|
||||
);
|
||||
assert_eq!(packets, 0);
|
||||
}
|
||||
@@ -2768,11 +2809,11 @@ mod tests {
|
||||
let fault_handler = TestFaultHandler::default();
|
||||
let mut tb = DestHandlerTestbench::new_with_fixed_paths(fault_handler, true);
|
||||
let mut user = tb.test_user_from_cached_paths(0);
|
||||
let id = tb
|
||||
let transfer_info = tb
|
||||
.generic_transfer_init(&mut user, 0, TransmissionMode::Unacknowledged)
|
||||
.expect("transfer init failed");
|
||||
tb.state_check(State::Busy, TransactionStep::ReceivingFileDataPdus);
|
||||
tb.handler.cancel_request(&id);
|
||||
tb.handler.cancel_request(&transfer_info.id);
|
||||
let packets = tb
|
||||
.handler
|
||||
.state_machine_no_packet(&mut user)
|
||||
@@ -2800,7 +2841,7 @@ mod tests {
|
||||
user.verify_finished_indication_retained(
|
||||
DeliveryCode::Complete,
|
||||
ConditionCode::CancelRequestReceived,
|
||||
id,
|
||||
transfer_info.id,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -2813,14 +2854,14 @@ mod tests {
|
||||
let fault_handler = TestFaultHandler::default();
|
||||
let mut tb = DestHandlerTestbench::new_with_fixed_paths(fault_handler, true);
|
||||
let mut user = tb.test_user_from_cached_paths(file_size);
|
||||
let id = tb
|
||||
.generic_transfer_init(&mut user, 0, TransmissionMode::Unacknowledged)
|
||||
let transfer_info = tb
|
||||
.generic_transfer_init(&mut user, file_size, TransmissionMode::Unacknowledged)
|
||||
.expect("transfer init failed");
|
||||
tb.state_check(State::Busy, TransactionStep::ReceivingFileDataPdus);
|
||||
tb.generic_file_data_insert(&mut user, 0, &file_data[0..5])
|
||||
.expect("file data insertion failed");
|
||||
|
||||
tb.handler.cancel_request(&id);
|
||||
tb.handler.cancel_request(&transfer_info.id);
|
||||
let packets = tb
|
||||
.handler
|
||||
.state_machine_no_packet(&mut user)
|
||||
@@ -2849,7 +2890,7 @@ mod tests {
|
||||
user.verify_finished_indication_retained(
|
||||
DeliveryCode::Incomplete,
|
||||
ConditionCode::CancelRequestReceived,
|
||||
id,
|
||||
transfer_info.id,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -2865,12 +2906,12 @@ mod tests {
|
||||
.unwrap();
|
||||
remote_cfg_mut.disposition_on_cancellation = true;
|
||||
let mut user = tb.test_user_from_cached_paths(0);
|
||||
let id = tb
|
||||
let transfer_info = tb
|
||||
.generic_transfer_init(&mut user, 0, TransmissionMode::Unacknowledged)
|
||||
.expect("transfer init failed");
|
||||
tb.state_check(State::Busy, TransactionStep::ReceivingFileDataPdus);
|
||||
|
||||
tb.handler.cancel_request(&id);
|
||||
tb.handler.cancel_request(&transfer_info.id);
|
||||
let packets = tb
|
||||
.handler
|
||||
.state_machine_no_packet(&mut user)
|
||||
@@ -2879,7 +2920,7 @@ mod tests {
|
||||
user.verify_finished_indication_retained(
|
||||
DeliveryCode::Complete,
|
||||
ConditionCode::CancelRequestReceived,
|
||||
id,
|
||||
transfer_info.id,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -2899,14 +2940,14 @@ mod tests {
|
||||
.unwrap();
|
||||
remote_cfg_mut.disposition_on_cancellation = true;
|
||||
let mut user = tb.test_user_from_cached_paths(file_size);
|
||||
let transaction_id = tb
|
||||
.generic_transfer_init(&mut user, 0, TransmissionMode::Unacknowledged)
|
||||
let transfer_info = tb
|
||||
.generic_transfer_init(&mut user, file_size, TransmissionMode::Unacknowledged)
|
||||
.expect("transfer init failed");
|
||||
tb.state_check(State::Busy, TransactionStep::ReceivingFileDataPdus);
|
||||
tb.generic_file_data_insert(&mut user, 0, &file_data[0..5])
|
||||
.expect("file data insertion failed");
|
||||
|
||||
tb.handler.cancel_request(&transaction_id);
|
||||
tb.handler.cancel_request(&transfer_info.id);
|
||||
let packets = tb
|
||||
.handler
|
||||
.state_machine_no_packet(&mut user)
|
||||
@@ -2918,7 +2959,7 @@ mod tests {
|
||||
user.verify_finished_indication(
|
||||
DeliveryCode::Incomplete,
|
||||
ConditionCode::CancelRequestReceived,
|
||||
transaction_id,
|
||||
transfer_info.id,
|
||||
FileStatus::DiscardDeliberately,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1494,6 +1494,10 @@ pub(crate) mod tests {
|
||||
}
|
||||
|
||||
impl TestCfdpSender {
|
||||
pub fn queue_len(&self) -> usize {
|
||||
self.packet_queue.borrow_mut().len()
|
||||
}
|
||||
|
||||
pub fn retrieve_next_pdu(&self) -> Option<SentPdu> {
|
||||
self.packet_queue.borrow_mut().pop_front()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user