Skip to content

Commit

Permalink
Merge pull request nasa#1759 from nasa/integration-candidate
Browse files Browse the repository at this point in the history
cFE Integration candidate: 2021-08-03
  • Loading branch information
astrogeco authored Aug 6, 2021
2 parents c4ae5b2 + 36ae395 commit cfadad6
Show file tree
Hide file tree
Showing 15 changed files with 348 additions and 21 deletions.
12 changes: 12 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,18 @@ The detailed cFE user's guide can be viewed at <https://github.com/nasa/cFS/blob

## Version History

### Development Build: v6.8.0-rc1+dev810

- Add null pointer check to table GetAddresses and ReleaseAddresses
- Explain FS Header offset & add offset functional tests.
- Handle fail status in GetTypeFromMsgId
- Add Functional Test for EVS Send Event API
- Remove SB get last message sender info requirement
- Update UTs to use UtAssert_MIR
- Add Functional Tests cFE Message ID
- Add Time Conversion Functional Test
- See <https://github.com/nasa/cFE/pull/1759> and <https://github.com/nasa/cFS/pull/328>

### Development Build: v6.8.0-rc1+dev789

- Correct return code check
Expand Down
1 change: 0 additions & 1 deletion docs/cFE_FunctionalRequirements.csv
Original file line number Diff line number Diff line change
Expand Up @@ -350,7 +350,6 @@ SB: Receive Message No Timeout,cSB4306,"Upon receipt of a Request to receive a S
SB: Receive Message With Timeout,cSB4307,"Upon receipt of a Request to receive a SB Message from a Pipe with a pending timeout, the cFE shall suspend execution of the Application until a SB Message is present on the Pipe or the timeout has expired.","A receive Request with a suspension timeout provides a blocking method of retrieving SB messages. This is useful for data driven Applications and has been used on all heritage missions with a SB. The timeout is useful for fault recovery for Applications that always expect data to arrive or to allow periodic processing for Applications that are not purely data driven. If a SB Message is queued on the Pipe then the SB Message will be provided to the Application and the Application’s execution will not be suspended. Tasks that process telemetry packets often receive many types of packets from different sources. There should be a mechanism that allows a task to wait for many different types of messages simultaneously. Heritage implementations of SB do this by directing the messages into one queue (or several queues, to implement priority levels).
"
SB: Receive Message Infinite Timeout,cSB4308,"Upon receipt of a Request to receive a SB Message from a Pipe with an infinite timeout, the cFE shall suspend execution of the Application until a SB Message is present on the Pipe.",This mode of receiving has been the most commonly used mode on the heritage SB.
SB: Last Message Sender Info,cSB4309,"Upon receipt of a Request, the cFE shall provide sender information for the last message received on an Application's Pipe.","Heritage SB did a 'valid senders check' before delivering a packet to a pipe. Since the cFE supports a dynamic environment and the sender of a packet is somewhat unknown, the cFE must provide a means for the application to do the 'valid sender check'."
SB: Get Message ID,cSB4311,"Upon receipt of a Request, the cFE shall provide the message ID of the requested message.",Message management utility.
SB: Set Message ID,cSB4312,"Upon receipt of a Request, the cFE shall set the received message with the received message ID.",Message management utility.
SB: Get Message String,cSB4313,"Upon receipt of a Request, the cFE shall provide the requested string from the requested message.",Message management utility.
Expand Down
3 changes: 3 additions & 0 deletions modules/cfe_testcase/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,14 @@ add_cfe_app(cfe_testcase
src/es_cds_test.c
src/es_misc_test.c
src/es_mempool_test.c
src/evs_send_test.c
src/fs_header_test.c
src/fs_util_test.c
src/message_id_test.c
src/sb_pipe_mang_test.c
src/time_arithmetic_test.c
src/time_current_test.c
src/time_conversion_test.c
)

# register the dependency on cfe_assert
Expand Down
3 changes: 3 additions & 0 deletions modules/cfe_testcase/src/cfe_test.c
Original file line number Diff line number Diff line change
Expand Up @@ -56,11 +56,14 @@ void CFE_TestMain(void)
ESMemPoolTestSetup();
ESMiscTestSetup();
ESTaskTestSetup();
EVSSendTestSetup();
FSHeaderTestSetup();
FSUtilTestSetup();
MessageIdTestSetup();
SBPipeMangSetup();
TimeArithmeticTestSetup();
TimeCurrentTestSetup();
TimeConversionTestSetup();

/*
* Execute the tests
Expand Down
5 changes: 5 additions & 0 deletions modules/cfe_testcase/src/cfe_test.h
Original file line number Diff line number Diff line change
Expand Up @@ -77,16 +77,21 @@ typedef struct
/* Log calls to void functions */
#define cFE_FTAssert_VOIDCALL(func) (func, UtAssert(true, #func, __FILE__, __LINE__))

bool TimeInRange(CFE_TIME_SysTime_t Time, CFE_TIME_SysTime_t Target, OS_time_t difference);

void CFE_TestMain(void);
void ESCDSTestSetup(void);
void ESInfoTestSetup(void);
void ESMemPoolTestSetup(void);
void ESMiscTestSetup(void);
void ESTaskTestSetup(void);
void EVSSendTestSetup(void);
void FSHeaderTestSetup(void);
void FSUtilTestSetup(void);
void MessageIdTestSetup(void);
void SBPipeMangSetup(void);
void TimeArithmeticTestSetup(void);
void TimeCurrentTestSetup(void);
void TimeConversionTestSetup(void);

#endif /* CFE_TEST_H */
3 changes: 1 addition & 2 deletions modules/cfe_testcase/src/es_misc_test.c
Original file line number Diff line number Diff line change
Expand Up @@ -64,8 +64,7 @@ void TestWriteToSysLog(void)
CFE_ES_WriteToSysLog(NULL);
CFE_ES_WriteToSysLog("%s", TestString);

UtAssertEx(false, UTASSERT_CASETYPE_MIR, __FILE__, __LINE__, "%s",
"MIR (Manual Inspection Required) for CFE_ES_WriteToSysLog");
UtAssert_MIR("MIR (Manual Inspection Required) for CFE_ES_WriteToSysLog");
}

void ESMiscTestSetup(void)
Expand Down
74 changes: 74 additions & 0 deletions modules/cfe_testcase/src/evs_send_test.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
/*************************************************************************
**
** GSC-18128-1, "Core Flight Executive Version 6.7"
**
** Copyright (c) 2006-2019 United States Government as represented by
** the Administrator of the National Aeronautics and Space Administration.
** All Rights Reserved.
**
** Licensed under the Apache License, Version 2.0 (the "License");
** you may not use this file except in compliance with the License.
** You may obtain a copy of the License at
**
** http://www.apache.org/licenses/LICENSE-2.0
**
** Unless required by applicable law or agreed to in writing, software
** distributed under the License is distributed on an "AS IS" BASIS,
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
** See the License for the specific language governing permissions and
** limitations under the License.
**
** File: evs_send_test.c
**
** Purpose:
** Functional test of basic EVS Send Event APIs
**
** Demonstration of how to register and use the UT assert functions.
**
*************************************************************************/

/*
* Includes
*/

#include "cfe_test.h"

void TestSendEvent(void)
{
UtPrintf("Testing: CFE_EVS_SendEvent");

UtAssert_INT32_EQ(CFE_EVS_SendEvent(0, CFE_EVS_EventType_INFORMATION, "OK Send"), CFE_SUCCESS);
UtAssert_INT32_EQ(CFE_EVS_SendEvent(0, CFE_EVS_EventType_INFORMATION, NULL), CFE_EVS_INVALID_PARAMETER);
}

void TestSendEventAppID(void)
{
CFE_ES_AppId_t AppId;

UtPrintf("Testing: CFE_EVS_SendEventWithAppID");

CFE_ES_GetAppID(&AppId);

UtAssert_INT32_EQ(CFE_EVS_SendEventWithAppID(0, CFE_EVS_EventType_INFORMATION, AppId, "OK App ID"), CFE_SUCCESS);

UtAssert_INT32_EQ(CFE_EVS_SendEventWithAppID(0, CFE_EVS_EventType_INFORMATION, AppId, NULL),
CFE_EVS_INVALID_PARAMETER);
UtAssert_INT32_EQ(CFE_EVS_SendEventWithAppID(0, CFE_EVS_EventType_INFORMATION, CFE_ES_APPID_UNDEFINED, "OK"),
CFE_EVS_APP_ILLEGAL_APP_ID);
}

void TestSendTimedEvent(void)
{
CFE_TIME_SysTime_t Time = {1000, 1000};
UtPrintf("Testing: CFE_EVS_SendTimedEvent");

UtAssert_INT32_EQ(CFE_EVS_SendTimedEvent(Time, 0, CFE_EVS_EventType_INFORMATION, "OK Time"), CFE_SUCCESS);
UtAssert_INT32_EQ(CFE_EVS_SendTimedEvent(Time, 0, CFE_EVS_EventType_INFORMATION, NULL), CFE_EVS_INVALID_PARAMETER);
}

void EVSSendTestSetup(void)
{
UtTest_Add(TestSendEvent, NULL, NULL, "Test Send Event");
UtTest_Add(TestSendEventAppID, NULL, NULL, "Test Send Event with App ID");
UtTest_Add(TestSendTimedEvent, NULL, NULL, "Test Send Timed Event");
}
4 changes: 4 additions & 0 deletions modules/cfe_testcase/src/fs_header_test.c
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ void TestCreateHeader(void)

cFE_FTAssert_VOIDCALL(CFE_FS_InitHeader(&Header, TestDescription, CFE_FS_SubType_ES_ERLOG));
UtAssert_INT32_EQ(CFE_FS_WriteHeader(fd, &Header), sizeof(CFE_FS_Header_t));
UtAssert_INT32_EQ(OS_lseek(fd, 0, OS_SEEK_CUR), sizeof(CFE_FS_Header_t));

UtAssert_INT32_EQ(CFE_FS_WriteHeader(fd, NULL), CFE_FS_BAD_ARGUMENT);
cFE_FTAssert_NOT_CFE_SUCCESS(CFE_FS_WriteHeader(OS_OBJECT_ID_UNDEFINED, &Header));
Expand All @@ -80,6 +81,7 @@ void TestReadHeader(void)
cFE_FTAssert_VOIDCALL(CFE_FS_InitHeader(&Header, TestDescription, CFE_FS_SubType_ES_ERLOG));
UtAssert_INT32_EQ(CFE_FS_WriteHeader(fd, &Header), sizeof(CFE_FS_Header_t));
UtAssert_INT32_EQ(CFE_FS_ReadHeader(&ReadHeader, fd), sizeof(CFE_FS_Header_t));
UtAssert_INT32_EQ(OS_lseek(fd, 0, OS_SEEK_CUR), sizeof(CFE_FS_Header_t));

UtAssert_INT32_EQ(Header.ContentType, ReadHeader.ContentType);
UtAssert_INT32_EQ(Header.SubType, ReadHeader.SubType);
Expand All @@ -105,6 +107,8 @@ void TestTimeStamp(void)
cFE_FTAssert_VOIDCALL(CFE_FS_InitHeader(&Header, TestDescription, CFE_FS_SubType_ES_ERLOG));
UtAssert_INT32_EQ(CFE_FS_WriteHeader(fd, &Header), sizeof(CFE_FS_Header_t));
UtAssert_INT32_EQ(CFE_FS_SetTimestamp(fd, NewTimestamp), CFE_SUCCESS);
UtAssert_INT32_EQ(OS_lseek(fd, 0, OS_SEEK_CUR), (offsetof(CFE_FS_Header_t, TimeSeconds) + sizeof(NewTimestamp)));

UtAssert_INT32_EQ(CFE_FS_ReadHeader(&ReadHeader, fd), sizeof(CFE_FS_Header_t));

UtAssert_UINT32_EQ(0xFFFFFFFF, ReadHeader.TimeSeconds);
Expand Down
83 changes: 83 additions & 0 deletions modules/cfe_testcase/src/message_id_test.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
/*************************************************************************
**
** GSC-18128-1, "Core Flight Executive Version 6.7"
**
** Copyright (c) 2006-2019 United States Government as represented by
** the Administrator of the National Aeronautics and Space Administration.
** All Rights Reserved.
**
** Licensed under the Apache License, Version 2.0 (the "License");
** you may not use this file except in compliance with the License.
** You may obtain a copy of the License at
**
** http://www.apache.org/licenses/LICENSE-2.0
**
** Unless required by applicable law or agreed to in writing, software
** distributed under the License is distributed on an "AS IS" BASIS,
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
** See the License for the specific language governing permissions and
** limitations under the License.
**
** File: message_id_test.c
**
** Purpose:
** Functional test of Message ID APIs
**
** Demonstration....
**
*************************************************************************/

/*
* Includes
*/

#include "cfe_test.h"

void TestMsgId(void)
{
UtPrintf("Testing: CFE_MSG_SetMsgId, CFE_MSG_GetMsgId");
CFE_MSG_Message_t msg;
CFE_SB_MsgId_t msgid;
CFE_SB_MsgId_t expectedmsgid = CFE_SB_ValueToMsgId(1);

UtAssert_INT32_EQ(CFE_MSG_SetMsgId(&msg, expectedmsgid), CFE_SUCCESS);
UtAssert_INT32_EQ(CFE_MSG_GetMsgId(&msg, &msgid), CFE_SUCCESS);
UtAssert_UINT32_EQ(msgid, expectedmsgid);

UtAssert_INT32_EQ(CFE_MSG_SetMsgId(NULL, msgid), CFE_MSG_BAD_ARGUMENT);
UtAssert_INT32_EQ(CFE_MSG_SetMsgId(&msg, CFE_SB_INVALID_MSG_ID), CFE_MSG_BAD_ARGUMENT);

UtAssert_INT32_EQ(CFE_MSG_GetMsgId(NULL, &msgid), CFE_MSG_BAD_ARGUMENT);
UtAssert_INT32_EQ(CFE_MSG_GetMsgId(&msg, NULL), CFE_MSG_BAD_ARGUMENT);
}

void TestGetTypeFromMsgId(void)
{
UtPrintf("Testing: CFE_MSG_GetTypeFromMsgId");
CFE_SB_MsgId_t msgid = CFE_SB_ValueToMsgId(0);
CFE_MSG_Type_t msgtype;
int32 status;

/*
* Response not verified because msgid 0 could be out of range based on implementation and
* the msg to type relationship is also implementation defined, black box test just calls the routine
* to confirm things don't "break" with full range values and the implementation exists.
*/

status = CFE_MSG_GetTypeFromMsgId(msgid, &msgtype);
UtAssert_True(status == CFE_SUCCESS || status == CFE_MSG_BAD_ARGUMENT, "CFE_MSG_GetTypeFromMsgId() == (%ld)",
(long)status);

memset(&msgid, 0xFF, sizeof(msgid));
status = CFE_MSG_GetTypeFromMsgId(msgid, &msgtype);
UtAssert_True(status == CFE_SUCCESS || status == CFE_MSG_BAD_ARGUMENT, "CFE_MSG_GetTypeFromMsgId() == (%ld)",
(long)status);

UtAssert_INT32_EQ(CFE_MSG_GetTypeFromMsgId(msgid, NULL), CFE_MSG_BAD_ARGUMENT);
}

void MessageIdTestSetup(void)
{
UtTest_Add(TestMsgId, NULL, NULL, "Test Set/Get Message ID");
UtTest_Add(TestGetTypeFromMsgId, NULL, NULL, "Test Get Type From Message ID");
}
Loading

0 comments on commit cfadad6

Please sign in to comment.