From f9c00c636eb0fe742253001cd88138c1cb949f37 Mon Sep 17 00:00:00 2001 From: Joseph Hickey Date: Fri, 10 Dec 2021 10:14:01 -0500 Subject: [PATCH 1/2] Fix #113, replace acknack count union Using a union for the ack/nak counts is somewhat dangerous because undefined behavior will occur if accessed improperly. In this case there is no need to have separate representations of the counter, they are both limited to the "unit8" range, so use a uint8. --- fsw/src/cf_cfdp.h | 12 ++----- fsw/src/cf_cfdp_r.c | 14 ++++---- fsw/src/cf_cfdp_s.c | 2 +- unit-test/cf_cfdp_r_tests.c | 71 ++++++++++++++++++------------------- unit-test/cf_cfdp_s_tests.c | 14 ++++---- 5 files changed, 53 insertions(+), 60 deletions(-) diff --git a/fsw/src/cf_cfdp.h b/fsw/src/cf_cfdp.h index 5da94bcf2..4a724e528 100644 --- a/fsw/src/cf_cfdp.h +++ b/fsw/src/cf_cfdp.h @@ -134,16 +134,10 @@ typedef struct CF_Poll bool timer_set; } CF_Poll_t; -typedef union CF_RxTxCounters -{ - unsigned ack; - uint8 nak; -} CF_RxTxCounters_t; - typedef struct CF_TxS2_Data { - uint8 fin_cc; /* remember the cc in the received fin pdu to echo in eof-fin */ - CF_RxTxCounters_t counter; + uint8 fin_cc; /* remember the cc in the received fin pdu to echo in eof-fin */ + uint8 acknak_count; } CF_TxS2_Data_t; typedef struct CF_TxState_Data @@ -162,7 +156,7 @@ typedef struct CF_RxS2_Data CF_CFDP_FinDeliveryCode_t dc; CF_CFDP_FinFileStatus_t fs; uint8 eof_cc; /* remember the cc in the received eof pdu to echo in eof-ack */ - CF_RxTxCounters_t counter; + uint8 acknak_count; } CF_RxS2_Data_t; typedef struct CF_RxState_Data diff --git a/fsw/src/cf_cfdp_r.c b/fsw/src/cf_cfdp_r.c index 54bcf9b6e..73fcbf977 100644 --- a/fsw/src/cf_cfdp_r.c +++ b/fsw/src/cf_cfdp_r.c @@ -181,7 +181,7 @@ static void CF_CFDP_R2_Complete(CF_Transaction_t *t, int ok_to_send_nak) if (send_nak && ok_to_send_nak) { - if (++t->state_data.r.r2.counter.nak == CF_AppData.config_table->nak_limit) + if (++t->state_data.r.r2.acknak_count >= CF_AppData.config_table->nak_limit) { CFE_EVS_SendEvent(CF_EID_ERR_CFDP_R_NAK_LIMIT, CFE_EVS_EventType_ERROR, "CF R%d(%u:%u): nak limited reach", (t->state == CF_TxnState_R2), t->history->src_eid, t->history->seq_num); @@ -189,7 +189,7 @@ static void CF_CFDP_R2_Complete(CF_Transaction_t *t, int ok_to_send_nak) ++CF_AppData.hk.channel_hk[t->chan_num].counters.fault.nak_limit; t->history->cc = CF_CFDP_ConditionCode_NAK_LIMIT_REACHED; /* don't use CF_CFDP_R2_SetCc because many places in this function set send_fin */ - t->state_data.r.r2.counter.nak = 0; /* reset for fin/ack */ + t->state_data.r.r2.acknak_count = 0; /* reset for fin/ack */ } else { @@ -493,7 +493,7 @@ static void CF_CFDP_R2_SubstateRecvFileData(CF_Transaction_t *t, const CF_CFDP_P CF_CFDP_ArmAckTimer(t); /* re-arm ack timer, since we got data */ } - t->state_data.r.r2.counter.nak = 0; + t->state_data.r.r2.acknak_count = 0; return; @@ -916,9 +916,9 @@ static void CF_CFDP_R2_RecvMd(CF_Transaction_t *t, const CF_CFDP_PduHeader_t *ph } } - t->flags.rx.md_recv = 1; - t->state_data.r.r2.counter.nak = 0; /* in case part of nak */ - CF_CFDP_R2_Complete(t, 1); /* check for completion now that md is received */ + t->flags.rx.md_recv = 1; + t->state_data.r.r2.acknak_count = 0; /* in case part of nak */ + CF_CFDP_R2_Complete(t, 1); /* check for completion now that md is received */ } else { @@ -1147,7 +1147,7 @@ void CF_CFDP_R_Tick(CF_Transaction_t *t, int *cont /* unused */) } else if (t->state_data.r.sub_state == CF_RxSubState_WAIT_FOR_FIN_ACK) { - if (++t->state_data.r.r2.counter.ack == CF_AppData.config_table->ack_limit) + if (++t->state_data.r.r2.acknak_count >= CF_AppData.config_table->ack_limit) { CFE_EVS_SendEvent(CF_EID_ERR_CFDP_R_ACK_LIMIT, CFE_EVS_EventType_ERROR, "CF R2(%u:%u): ack limit reached, no fin-ack", t->history->src_eid, diff --git a/fsw/src/cf_cfdp_s.c b/fsw/src/cf_cfdp_s.c index 9ab7aadad..d615f8736 100644 --- a/fsw/src/cf_cfdp_s.c +++ b/fsw/src/cf_cfdp_s.c @@ -791,7 +791,7 @@ void CF_CFDP_S_Tick(CF_Transaction_t *t, int *cont /* unused */) { if (t->state_data.s.sub_state == CF_TxSubState_WAIT_FOR_EOF_ACK) { - if (++t->state_data.s.s2.counter.ack == CF_AppData.config_table->ack_limit) + if (++t->state_data.s.s2.acknak_count >= CF_AppData.config_table->ack_limit) { CFE_EVS_SendEvent(CF_EID_ERR_CFDP_S_ACK_LIMIT, CFE_EVS_EventType_ERROR, "CF S2(%u:%u), ack limit reached, no eof-ack", t->history->src_eid, diff --git a/unit-test/cf_cfdp_r_tests.c b/unit-test/cf_cfdp_r_tests.c index 437328a53..861bb2fea 100644 --- a/unit-test/cf_cfdp_r_tests.c +++ b/unit-test/cf_cfdp_r_tests.c @@ -433,9 +433,9 @@ void Test_CF_CFDP_R2_Complete_Given_t_Sets_send_nak_To_1_Given_ok_to_send_nak_Is arg_t->state_data.r.sub_state = initial_sub_state; arg_t->flags.rx.md_recv = 0; - CF_AppData.config_table = &dummy_config_table; - CF_AppData.config_table->nak_limit = Any_uint8_Except(0); - arg_t->state_data.r.r2.counter.nak = CF_AppData.config_table->nak_limit - 1; + CF_AppData.config_table = &dummy_config_table; + CF_AppData.config_table->nak_limit = Any_uint8_Except(0); + arg_t->state_data.r.r2.acknak_count = CF_AppData.config_table->nak_limit - 1; /* Act */ CF_CFDP_R2_Complete(arg_t, arg_ok_to_send_nak); @@ -470,9 +470,9 @@ void Test_CF_CFDP_R2_Complete_Given_t_Sets_send_nak_To_1_Given_ok_to_send_nak_Is arg_t->flags.rx.md_recv = 0; arg_t->flags.rx.send_nak = 0; - CF_AppData.config_table = &dummy_config_table; - CF_AppData.config_table->nak_limit = Any_uint8_GreaterThan(1); - arg_t->state_data.r.r2.counter.nak = CF_AppData.config_table->nak_limit - 2; + CF_AppData.config_table = &dummy_config_table; + CF_AppData.config_table->nak_limit = Any_uint8_GreaterThan(1); + arg_t->state_data.r.r2.acknak_count = CF_AppData.config_table->nak_limit - 2; /* Act */ CF_CFDP_R2_Complete(arg_t, arg_ok_to_send_nak); @@ -511,9 +511,9 @@ void Test_CF_CFDP_R2_Complete_Calls_CF_Chunks_ComputeGaps_Returns_non0_Set_send_ UT_SetDefaultReturnValue(UT_KEY(CF_ChunkList_ComputeGaps), Any_int_Except(0)); - CF_AppData.config_table = &dummy_config_table; - CF_AppData.config_table->nak_limit = Any_uint8_GreaterThan(1); - arg_t->state_data.r.r2.counter.nak = CF_AppData.config_table->nak_limit - 2; + CF_AppData.config_table = &dummy_config_table; + CF_AppData.config_table->nak_limit = Any_uint8_GreaterThan(1); + arg_t->state_data.r.r2.acknak_count = CF_AppData.config_table->nak_limit - 2; /* Act */ CF_CFDP_R2_Complete(arg_t, arg_ok_to_send_nak); @@ -553,9 +553,9 @@ void Test_CF_CFDP_R2_Complete_Calls_CF_Chunks_ComputeGaps_Returns_non0_Set_send_ UT_SetDefaultReturnValue(UT_KEY(CF_ChunkList_ComputeGaps), 0); arg_t->flags.rx.eof_recv = 0; - CF_AppData.config_table = &dummy_config_table; - CF_AppData.config_table->nak_limit = Any_uint8_GreaterThan(1); - arg_t->state_data.r.r2.counter.nak = CF_AppData.config_table->nak_limit - 2; + CF_AppData.config_table = &dummy_config_table; + CF_AppData.config_table->nak_limit = Any_uint8_GreaterThan(1); + arg_t->state_data.r.r2.acknak_count = CF_AppData.config_table->nak_limit - 2; /* Act */ CF_CFDP_R2_Complete(arg_t, arg_ok_to_send_nak); @@ -596,9 +596,9 @@ void Test_CF_CFDP_R2_Complete_Calls_CF_Chunks_ComputeGaps_Returns_non0_Set_send_ UT_SetDefaultReturnValue(UT_KEY(CF_ChunkList_ComputeGaps), 0); arg_t->flags.rx.eof_recv = 1; - CF_AppData.config_table = &dummy_config_table; - CF_AppData.config_table->nak_limit = Any_uint8_GreaterThan(1); - arg_t->state_data.r.r2.counter.nak = CF_AppData.config_table->nak_limit - 2; + CF_AppData.config_table = &dummy_config_table; + CF_AppData.config_table->nak_limit = Any_uint8_GreaterThan(1); + arg_t->state_data.r.r2.acknak_count = CF_AppData.config_table->nak_limit - 2; /* Act */ CF_CFDP_R2_Complete(arg_t, arg_ok_to_send_nak); @@ -1302,13 +1302,13 @@ void Test_CF_CFDP_R2_SubstateRecvEof_CallTo_CF_CFDP_R_SubstateRecvEof_Returns_R_ CF_History_t dummy_history; CF_ConfigTable_t dummy_config_table; - arg_t->history = &dummy_history; - arg_t->history->cc = CF_CFDP_ConditionCode_NO_ERROR; - arg_t->flags.rx.md_recv = 0; - arg_t->state_data.r.r2.counter.nak = 0; - CF_AppData.config_table = &dummy_config_table; - CF_AppData.config_table->nak_limit = UINT8_MAX; - arg_t->state_data.r.sub_state = Any_uint8_Except(CF_RxSubState_FILEDATA); + arg_t->history = &dummy_history; + arg_t->history->cc = CF_CFDP_ConditionCode_NO_ERROR; + arg_t->flags.rx.md_recv = 0; + arg_t->state_data.r.r2.acknak_count = 0; + CF_AppData.config_table = &dummy_config_table; + CF_AppData.config_table->nak_limit = UINT8_MAX; + arg_t->state_data.r.sub_state = Any_uint8_Except(CF_RxSubState_FILEDATA); /* Act */ CF_CFDP_R2_SubstateRecvEof(arg_t, arg_ph); @@ -1555,7 +1555,7 @@ void Test_CF_CFDP_R2_SubstateRecvFileData_t_flags_rx_fd_nak_sent_Is_0_And_t_flag UT_SetHandlerFunction(UT_KEY(CF_CFDP_RecvFd), Handler_int_ForcedReturnOnly, &forced_return_CF_CFDP_RecvFd); - arg_t->state_data.r.r2.counter.nak = Any_uint8_Except(0); + arg_t->state_data.r.r2.acknak_count = Any_uint8_Except(0); arg_t->flags.rx.fd_nak_sent = 0; @@ -1598,8 +1598,7 @@ void Test_CF_CFDP_R2_SubstateRecvFileData_t_flags_rx_fd_nak_sent_Is_0_And_t_flag /* Assert */ UtAssert_STUB_COUNT(CF_CFDP_RecvFd, 1); UtAssert_STUB_COUNT(CF_ChunkListAdd, 1); - UtAssert_True(arg_t->state_data.r.r2.counter.nak == 0, "t->state_data.r.r2.counter.nak is %u and should be 0", - arg_t->state_data.r.r2.counter.nak); + UtAssert_ZERO(arg_t->state_data.r.r2.acknak_count); /* Assert for CF_CFDP_R_ProcessFd - 3 calls, one in function two in STATIC_CAST */ UtAssert_STUB_COUNT(CF_HeaderSize, 3); /* Assert for CF_CFDP_R2_Reset via CF_CFDP_R1_Reset */ @@ -1620,7 +1619,7 @@ void Test_CF_CFDP_R2_SubstateRecvFileData_t_flags_rx_fd_nak_sent_Is_1_Call_CF_CF UT_SetHandlerFunction(UT_KEY(CF_CFDP_RecvFd), Handler_int_ForcedReturnOnly, &forced_return_CF_CFDP_RecvFd); - arg_t->state_data.r.r2.counter.nak = Any_uint8_Except(0); + arg_t->state_data.r.r2.acknak_count = Any_uint8_Except(0); arg_t->flags.rx.fd_nak_sent = 1; @@ -1666,8 +1665,7 @@ void Test_CF_CFDP_R2_SubstateRecvFileData_t_flags_rx_fd_nak_sent_Is_1_Call_CF_CF /* Assert */ UtAssert_STUB_COUNT(CF_CFDP_RecvFd, 1); UtAssert_STUB_COUNT(CF_ChunkListAdd, 1); - UtAssert_True(arg_t->state_data.r.r2.counter.nak == 0, "t->state_data.r.r2.counter.nak is %u and should be 0", - arg_t->state_data.r.r2.counter.nak); + UtAssert_ZERO(arg_t->state_data.r.r2.acknak_count); /* Assert for CF_CFDP_R_ProcessFd - 3 calls, one in function two in STATIC_CAST */ UtAssert_STUB_COUNT(CF_HeaderSize, 3); /* Assert for CF_CFDP_R2_Reset via CF_CFDP_R1_Reset */ @@ -1688,7 +1686,7 @@ void Test_CF_CFDP_R2_SubstateRecvFileData_t_flags_rx_fd_nak_sent_Is_0_And_t_flag UT_SetHandlerFunction(UT_KEY(CF_CFDP_RecvFd), Handler_int_ForcedReturnOnly, &forced_return_CF_CFDP_RecvFd); - arg_t->state_data.r.r2.counter.nak = Any_uint8_Except(0); + arg_t->state_data.r.r2.acknak_count = Any_uint8_Except(0); arg_t->flags.rx.fd_nak_sent = 0; @@ -1732,8 +1730,7 @@ void Test_CF_CFDP_R2_SubstateRecvFileData_t_flags_rx_fd_nak_sent_Is_0_And_t_flag UtAssert_STUB_COUNT(CF_CFDP_RecvFd, 1); UtAssert_STUB_COUNT(CF_ChunkListAdd, 1); UtAssert_STUB_COUNT(CF_CFDP_ArmAckTimer, 1); - UtAssert_True(arg_t->state_data.r.r2.counter.nak == 0, "t->state_data.r.r2.counter.nak is %u and should be 0", - arg_t->state_data.r.r2.counter.nak); + UtAssert_ZERO(arg_t->state_data.r.r2.acknak_count); /* Assert for CF_CFDP_R_ProcessFd - 3 calls, one in function two in STATIC_CAST */ UtAssert_STUB_COUNT(CF_HeaderSize, 3); /* Assert for CF_CFDP_R2_Reset via CF_CFDP_R1_Reset */ @@ -3206,8 +3203,8 @@ void Test_CF_CFDP_R2_RecvMd_Given_t_flags_rx_md_recv_Is_0_CallTo_CF_CFDP_RecvMd_ UT_SetDataBuffer(UT_KEY(CF_WrappedOpenCreate), &context_CF_WrappedOpenCreate, sizeof(context_CF_WrappedOpenCreate), false); - arg_t->flags.rx.md_recv = 0; - arg_t->state_data.r.r2.counter.nak = Any_uint8_Except(0); + arg_t->flags.rx.md_recv = 0; + arg_t->state_data.r.r2.acknak_count = Any_uint8_Except(0); /* Arrange for CF_CFDP_R2_Complete */ arg_t->history->cc = CF_CFDP_ConditionCode_NO_ERROR; @@ -3224,8 +3221,7 @@ void Test_CF_CFDP_R2_RecvMd_Given_t_flags_rx_md_recv_Is_0_CallTo_CF_CFDP_RecvMd_ UtAssert_STUB_COUNT(CF_WrappedOpenCreate, 1); UtAssert_STUB_COUNT(CFE_EVS_SendEvent, 0); UtAssert_True(arg_t->flags.rx.md_recv == 1, "t->flags.rx.md_recv is %u and should be 1", arg_t->flags.rx.md_recv); - UtAssert_True(arg_t->state_data.r.r2.counter.nak == 0, "t->state_data.r.r2.counter.nak is %u and should be 0", - arg_t->state_data.r.r2.counter.nak); + UtAssert_ZERO(arg_t->state_data.r.r2.acknak_count); /* Assert for CF_CFDP_R2_Complete */ UtAssert_True(arg_t->state_data.r.sub_state == CF_RxSubState_FILEDATA, "t->state_data.r.sub_state is %u and should be %u (CF_RxSubState_FILEDATA)", @@ -4499,7 +4495,8 @@ void Test_CF_CFDP_R_Tick_NothingElseSet_ack_timer_armed_Is_1_CAllTo_CF_Timer_Exp arg_t->flags.rx.complete = 1; - arg_t->state_data.r.sub_state = CF_RxSubState_WAIT_FOR_FIN_ACK; + arg_t->state_data.r.sub_state = CF_RxSubState_WAIT_FOR_FIN_ACK; + arg_t->state_data.r.r2.acknak_count = 0; /* Arrange for CF_CFDP_R2_Complete */ CF_History_t dummy_history; @@ -4560,7 +4557,7 @@ void Test_CF_CFDP_R_Tick_NothingElseSet_ack_timer_armed_Is_1_CAllTo_CF_Timer_Exp CF_AppData.config_table->ack_limit = Any_uint8_Except(0); /* Any_uint8 used for small value in test */ - arg_t->state_data.r.r2.counter.ack = CF_AppData.config_table->ack_limit - 1; /* - 1 code increases value */ + arg_t->state_data.r.r2.acknak_count = CF_AppData.config_table->ack_limit - 1; /* - 1 code increases value */ UT_SetDataBuffer(UT_KEY(CFE_EVS_SendEvent), &EventID, sizeof(EventID), false); arg_t->history = &dummy_history; diff --git a/unit-test/cf_cfdp_s_tests.c b/unit-test/cf_cfdp_s_tests.c index 82606e1af..0303863d7 100644 --- a/unit-test/cf_cfdp_s_tests.c +++ b/unit-test/cf_cfdp_s_tests.c @@ -1303,8 +1303,10 @@ void Test_CF_CFDP_S_CheckAndRespondNak_CallTo_CF_Chunks_GetFirstChunkReturned_no CF_CFDP_SendFd_context_t context_CF_CFDP_SendFd; dummy_c->offset = 0; /* dummy_c->offset = 0 used so that (foffs+bytes_to_read)<=t->fsize is never false */ + arg_t->fsize = 512; + arg_t->foffs = 0; - dummy_config_table.outgoing_file_chunk_size = arg_t->foffs; + dummy_config_table.outgoing_file_chunk_size = dummy_c->size; CF_AppData.config_table = &dummy_config_table; arg_t->history = &dummy_history; @@ -3470,7 +3472,7 @@ void Test_CF_CFDP_S_Tick_ArmedTimerExpiredAnd_sub_state_EqTo_SEND_WAIT_FOR_EOF_A arg_t->flags.com.ack_timer_armed = 1; arg_t->state_data.s.sub_state = CF_TxSubState_WAIT_FOR_EOF_ACK; - arg_t->state_data.s.s2.counter.ack = dummy_ack_limit - 1; + arg_t->state_data.s.s2.acknak_count = dummy_ack_limit - 1; CF_AppData.config_table = &dummy_config_table; CF_AppData.hk.channel_hk[arg_t->chan_num].counters.fault.inactivity_timer = initial_inactivity_timer; @@ -3540,7 +3542,7 @@ void Test_CF_CFDP_S_Tick_ArmedTimerExpiredAnd_sub_state_EqTo_SEND_WAIT_FOR_EOF_A int *arg_cont = NULL; uint16 initial_inactivity_timer = Any_uint16(); uint16 initial_fault_ack_limit = Any_uint16(); - uint8 dummy_ack_limit = Any_uint8(); + uint8 dummy_ack_limit = 5; CF_Timer_t *context_CF_Timer_Expired[2]; CF_Timer_t *context_CF_Timer_Tick; @@ -3550,7 +3552,7 @@ void Test_CF_CFDP_S_Tick_ArmedTimerExpiredAnd_sub_state_EqTo_SEND_WAIT_FOR_EOF_A arg_t->flags.com.ack_timer_armed = 1; arg_t->state_data.s.sub_state = CF_TxSubState_WAIT_FOR_EOF_ACK; - arg_t->state_data.s.s2.counter.ack = Any_uint8_Except(dummy_ack_limit - 1); + arg_t->state_data.s.s2.acknak_count = 0; CF_AppData.config_table = &dummy_config_table; CF_AppData.hk.channel_hk[arg_t->chan_num].counters.fault.inactivity_timer = initial_inactivity_timer; @@ -3620,7 +3622,7 @@ void Test_CF_CFDP_S_Tick_ArmedTimerExpiredAnd_sub_state_EqTo_SEND_WAIT_FOR_EOF_A arg_t->flags.com.ack_timer_armed = 1; arg_t->state_data.s.sub_state = CF_TxSubState_WAIT_FOR_EOF_ACK; - arg_t->state_data.s.s2.counter.ack = Any_uint8_Except(dummy_ack_limit - 1); + arg_t->state_data.s.s2.acknak_count = Any_uint8_Except(dummy_ack_limit - 1); CF_AppData.config_table = &dummy_config_table; CF_AppData.hk.channel_hk[arg_t->chan_num].counters.fault.inactivity_timer = initial_inactivity_timer; @@ -3701,7 +3703,7 @@ void Test_CF_CFDP_S_Tick_ArmedTimerExpiredAnd_sub_state_EqTo_SEND_WAIT_FOR_EOF_A arg_t->flags.com.ack_timer_armed = 1; arg_t->state_data.s.sub_state = CF_TxSubState_WAIT_FOR_EOF_ACK; - arg_t->state_data.s.s2.counter.ack = Any_uint8_Except(dummy_ack_limit - 1); + arg_t->state_data.s.s2.acknak_count = Any_uint8_Except(dummy_ack_limit - 1); CF_AppData.config_table = &dummy_config_table; CF_AppData.hk.channel_hk[arg_t->chan_num].counters.fault.inactivity_timer = initial_inactivity_timer; From d800b4b2bbcfdb756633964c013383d55eaa5def Mon Sep 17 00:00:00 2001 From: Joseph Hickey Date: Thu, 16 Dec 2021 09:53:40 -0500 Subject: [PATCH 2/2] Update #113, replace some UT random values with fixed values The use of random numbers in a couple test cases was causing an unpredictable flow through the code. This replaces with fixed values so get consistent flows. Specifically, the "acknak_count" should always be less than the "ack_limit". The UT use of random numbers allowed it to be greater. However, if it is greater than the limit, it should still follow the limit/error path, not the successful path. --- unit-test/cf_cfdp_s_tests.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/unit-test/cf_cfdp_s_tests.c b/unit-test/cf_cfdp_s_tests.c index 0303863d7..e3601c567 100644 --- a/unit-test/cf_cfdp_s_tests.c +++ b/unit-test/cf_cfdp_s_tests.c @@ -3612,7 +3612,7 @@ void Test_CF_CFDP_S_Tick_ArmedTimerExpiredAnd_sub_state_EqTo_SEND_WAIT_FOR_EOF_A int *arg_cont = NULL; uint16 initial_inactivity_timer = Any_uint16(); uint16 initial_fault_ack_limit = Any_uint16(); - uint8 dummy_ack_limit = Any_uint8(); + uint8 dummy_ack_limit = 10; CF_Timer_t *context_CF_Timer_Expired[2]; CF_Timer_t *context_CF_Timer_Tick; @@ -3622,7 +3622,7 @@ void Test_CF_CFDP_S_Tick_ArmedTimerExpiredAnd_sub_state_EqTo_SEND_WAIT_FOR_EOF_A arg_t->flags.com.ack_timer_armed = 1; arg_t->state_data.s.sub_state = CF_TxSubState_WAIT_FOR_EOF_ACK; - arg_t->state_data.s.s2.acknak_count = Any_uint8_Except(dummy_ack_limit - 1); + arg_t->state_data.s.s2.acknak_count = 5; /* must remain less than ack_limit after increment */ CF_AppData.config_table = &dummy_config_table; CF_AppData.hk.channel_hk[arg_t->chan_num].counters.fault.inactivity_timer = initial_inactivity_timer; @@ -3692,7 +3692,7 @@ void Test_CF_CFDP_S_Tick_ArmedTimerExpiredAnd_sub_state_EqTo_SEND_WAIT_FOR_EOF_A int *arg_cont = NULL; uint16 initial_inactivity_timer = Any_uint16(); uint16 initial_fault_ack_limit = Any_uint16(); - uint8 dummy_ack_limit = Any_uint8(); + uint8 dummy_ack_limit = 10; CF_Timer_t *context_CF_Timer_Expired[2]; CF_Timer_t *context_CF_Timer_Tick; CF_Transaction_t *context_CF_CFDP_ArmAckTimer; @@ -3703,7 +3703,7 @@ void Test_CF_CFDP_S_Tick_ArmedTimerExpiredAnd_sub_state_EqTo_SEND_WAIT_FOR_EOF_A arg_t->flags.com.ack_timer_armed = 1; arg_t->state_data.s.sub_state = CF_TxSubState_WAIT_FOR_EOF_ACK; - arg_t->state_data.s.s2.acknak_count = Any_uint8_Except(dummy_ack_limit - 1); + arg_t->state_data.s.s2.acknak_count = 5; /* must remain less than ack_limit after increment */ CF_AppData.config_table = &dummy_config_table; CF_AppData.hk.channel_hk[arg_t->chan_num].counters.fault.inactivity_timer = initial_inactivity_timer;