Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 39 additions & 7 deletions fsw/src/ds_table.c
Original file line number Diff line number Diff line change
Expand Up @@ -553,6 +553,8 @@ CFE_Status_t DS_TableVerifyFilter(const void *TableData)
DS_FilterTable_t *FilterTable = (DS_FilterTable_t *)TableData;
CFE_Status_t Result = CFE_SUCCESS;
int32 i = 0;
int32 j = 0;
int32 DuplicateIndex;

int32 CountGood = 0;
int32 CountBad = 0;
Expand All @@ -561,7 +563,7 @@ CFE_Status_t DS_TableVerifyFilter(const void *TableData)
/*
** Perform the following validation:
**
** MessageID = unlimited, zero means unused
** MessageID = active message IDs must be unique, zero means unused
*/

/*
Expand All @@ -573,14 +575,44 @@ CFE_Status_t DS_TableVerifyFilter(const void *TableData)
{
CountUnused++;
}
else if (DS_TableVerifyFilterEntry(&FilterTable->Packet[i], (uint8)i, CountBad) == true)
{
CountGood++;
}
else
{
CountBad++;
Result = DS_TABLE_VERIFY_ERR;
DuplicateIndex = DS_INDEX_NONE;

for (j = 0; j < i; j++)
{
if (CFE_SB_IsValidMsgId(FilterTable->Packet[j].MessageID) &&
CFE_SB_MsgId_Equal(FilterTable->Packet[i].MessageID, FilterTable->Packet[j].MessageID))
{
DuplicateIndex = j;
break;
}
}

if (DuplicateIndex != DS_INDEX_NONE)
{
if (CountBad == 0)
{
CFE_EVS_SendEvent(DS_FLT_TBL_ERR_EID,
CFE_EVS_EventType_ERROR,
"Filter table verify err: MID = 0x%08lX at index = %d duplicates index = %d",
(unsigned long)CFE_SB_MsgIdToValue(FilterTable->Packet[i].MessageID),
(int)i,
(int)DuplicateIndex);
}

CountBad++;
Result = DS_TABLE_VERIFY_ERR;
}
else if (DS_TableVerifyFilterEntry(&FilterTable->Packet[i], (uint8)i, CountBad) == true)
{
CountGood++;
}
else
{
CountBad++;
Result = DS_TABLE_VERIFY_ERR;
}
}
}

Expand Down
31 changes: 30 additions & 1 deletion unit-test/ds_table_tests.c
Original file line number Diff line number Diff line change
Expand Up @@ -781,9 +781,11 @@ void DS_TableVerifyFilter_Test_Nominal(void)
FilterTable.Packet[0].Filter[0].FilterType = 1;
DS_AppData.FileStatus[0].FileState = DS_ENABLED;

FilterTable.Packet[1].MessageID = DS_UT_MID_2;

strncpy(FilterTable.Descriptor, "descriptor", DS_DESCRIPTOR_BUFSIZE);

for (i = 1; i < 256; i++)
for (i = 2; i < DS_PACKETS_IN_FILTER_TABLE; i++)
{
FilterTable.Packet[i].MessageID = CFE_SB_INVALID_MSG_ID;
}
Expand Down Expand Up @@ -834,6 +836,32 @@ void DS_TableVerifyFilter_Test_FilterTableVerificationError(void)
UtAssert_INT32_EQ(context_CFE_EVS_SendEvent[1].EventType, CFE_EVS_EventType_INFORMATION);
}

void DS_TableVerifyFilter_Test_DuplicateMessageID(void)
{
DS_FilterTable_t FilterTable;
uint32 i;

memset(&FilterTable, 0, sizeof(FilterTable));

for (i = 0; i < DS_PACKETS_IN_FILTER_TABLE; i++)
{
FilterTable.Packet[i].MessageID = CFE_SB_INVALID_MSG_ID;
}

FilterTable.Packet[0].MessageID = DS_UT_MID_1;
FilterTable.Packet[2].MessageID = DS_UT_MID_1;

/* Execute the function being tested */
UtAssert_INT32_EQ(DS_TableVerifyFilter(&FilterTable), DS_TABLE_VERIFY_ERR);

/* Verify results */
UtAssert_STUB_COUNT(CFE_EVS_SendEvent, 2);
UtAssert_INT32_EQ(context_CFE_EVS_SendEvent[0].EventID, DS_FLT_TBL_ERR_EID);
UtAssert_INT32_EQ(context_CFE_EVS_SendEvent[0].EventType, CFE_EVS_EventType_ERROR);
UtAssert_INT32_EQ(context_CFE_EVS_SendEvent[1].EventID, DS_FLT_TBL_EID);
UtAssert_INT32_EQ(context_CFE_EVS_SendEvent[1].EventType, CFE_EVS_EventType_INFORMATION);
}

void DS_TableVerifyFilter_Test_CountBad(void)
{
DS_FilterTable_t FilterTable;
Expand Down Expand Up @@ -1587,6 +1615,7 @@ void UtTest_Setup(void)

UT_DS_TEST_ADD(DS_TableVerifyFilter_Test_Nominal);
UT_DS_TEST_ADD(DS_TableVerifyFilter_Test_FilterTableVerificationError);
UT_DS_TEST_ADD(DS_TableVerifyFilter_Test_DuplicateMessageID);
UT_DS_TEST_ADD(DS_TableVerifyFilter_Test_CountBad);

UT_DS_TEST_ADD(DS_TableVerifyFilterEntry_Test_Nominal);
Expand Down
Loading