From fd398422177a3128345863a2e2163d4c89f846a6 Mon Sep 17 00:00:00 2001 From: jdfiguer Date: Thu, 29 Feb 2024 13:33:03 -0500 Subject: [PATCH] Post CCB review changes, Add new title for MOVEFILES variable --- docs/dox_src/cfs_ds.dox | 8 ++--- fsw/inc/ds_platform_cfg.h | 32 ++++++++----------- fsw/src/ds_app.c | 1 + fsw/src/ds_app.h | 8 +++++ fsw/src/ds_file.c | 2 +- fsw/src/ds_verify.h | 8 ++--- unit-test/ds_cmds_tests.c | 4 +-- unit-test/ds_file_tests.c | 67 +++++++++++++++++++++++++-------------- 8 files changed, 76 insertions(+), 54 deletions(-) diff --git a/docs/dox_src/cfs_ds.dox b/docs/dox_src/cfs_ds.dox index 84de6cf..cd327fa 100644 --- a/docs/dox_src/cfs_ds.dox +++ b/docs/dox_src/cfs_ds.dox @@ -147,12 +147,10 @@ the platform.

Move File Capability

- If the DS_MOVE_FILES configuration parameter is set to a non-empty string, the telemetry + If the MoveFilesDestDir global variable is set to a non-empty string at app initialization, the telemetry database, Destination File table load images and the File Table display page - require changes. The Destination File Table rdl file uses the DS_MOVE_FILES - definition in the ds_platform_cfg.h file. However, in order to get the - required parameter included in telemetry, this configuration parameter must be - set to 1 rather than TRUE. The table images must include this parameter in + require changes. The Destination File Table rdl file uses the DS_MOVEFILES_DESTDIR + definition in the ds_platform_cfg.h file. The table images must include this parameter in order to load successfully and the display page must be modified to display this parameter. **/ diff --git a/fsw/inc/ds_platform_cfg.h b/fsw/inc/ds_platform_cfg.h index f5c1a3b..f16db75 100644 --- a/fsw/inc/ds_platform_cfg.h +++ b/fsw/inc/ds_platform_cfg.h @@ -427,25 +427,6 @@ */ #define DS_FILE_HEADER_TYPE 1 -/** - * \brief Move Files to Downlink Directory After Close Selection - * - * \par Description: - * Set this parameter to enable the code and structures to - * automatically move DS files to another directory after - * closing the files. The intended use for this setting is - * to move files from a working directory into a directory - * from which the files can be downlinked. Note that even - * after enabling this feature, files will not be moved if - * the move pathname in the Destination File Table is null. - * - * \par Limits - * This parameter must be set to one of the following: - * non-empty string = add move pathname field to Destination File Table - * empty string = do not add move pathname to Destination File Table - */ -#define DS_MOVE_FILES "Move to downlink directory" - /** * \brief Application Per Packet Pipe Limit * @@ -462,6 +443,19 @@ */ #define DS_PER_PACKET_PIPE_LIMIT 45 +/** + * \brief Destination File Table -- default table movename + * + * \par Description: + * This parameter defines the default movename for the + * Destination File Table. + * + * \par Limits: + * The string length (including string terminator) cannot exceed + * #OS_MAX_PATH_LEN. (limit is not verified) + */ +#define DS_MOVEFILES_DESTDIR "Move to downlink directory" + /**\}*/ #endif diff --git a/fsw/src/ds_app.c b/fsw/src/ds_app.c index 9f7b74b..5624bd5 100644 --- a/fsw/src/ds_app.c +++ b/fsw/src/ds_app.c @@ -184,6 +184,7 @@ CFE_Status_t DS_AppInitialize(void) memset(&DS_AppData, 0, sizeof(DS_AppData)); DS_AppData.AppEnableState = DS_DEF_ENABLE_STATE; + strncpy(DS_AppData.MoveFilesDestDir, DS_MOVEFILES_DESTDIR, sizeof(DS_AppData.MoveFilesDestDir)); /* ** Mark files as closed diff --git a/fsw/src/ds_app.h b/fsw/src/ds_app.h index 94c731a..9736b99 100644 --- a/fsw/src/ds_app.h +++ b/fsw/src/ds_app.h @@ -50,6 +50,11 @@ #define DS_SB_TIMEOUT 1000 #define DS_SECS_PER_TIMEOUT (DS_SB_TIMEOUT / 1000) +/** + * \brief Array size for DS file move trigger + */ +#define MOVE_FILES_TRIGGER_SIZE 64 + /** * \brief Current state of destination files */ @@ -104,6 +109,9 @@ typedef struct DS_HashLink_t HashLinks[DS_PACKETS_IN_FILTER_TABLE]; /**< \brief Hash table linked list elements */ DS_HashLink_t *HashTable[DS_HASH_TABLE_ENTRIES]; /**< \brief Each hash table entry is a linked list */ + + char MoveFilesDestDir[MOVE_FILES_TRIGGER_SIZE]; /**< \brief Triggers file move to downlink directory if non-empty, + disables otherwise */ } DS_AppData_t; /** \brief DS global data structure reference */ diff --git a/fsw/src/ds_file.c b/fsw/src/ds_file.c index 2aea73c..5812122 100644 --- a/fsw/src/ds_file.c +++ b/fsw/src/ds_file.c @@ -811,7 +811,7 @@ void DS_FileCloseDest(int32 FileIndex) */ OS_close(FileStatus->FileHandle); - if (strlen(DS_MOVE_FILES) > 0) + if (DS_AppData.MoveFilesDestDir[0] != '\0') { /* ** Move file only if table has a downlink directory name... diff --git a/fsw/src/ds_verify.h b/fsw/src/ds_verify.h index f0fed9c..2dd7d41 100644 --- a/fsw/src/ds_verify.h +++ b/fsw/src/ds_verify.h @@ -190,10 +190,6 @@ #error DS_FILE_HEADER_TYPE must be 0 or 1! #endif -#ifndef DS_MOVE_FILES -#error "DS_MOVE_FILES must be defined!" -#endif - #ifndef DS_PER_PACKET_PIPE_LIMIT #error DS_PER_PACKET_PIPE_LIMIT must be defined! #elif (DS_PER_PACKET_PIPE_LIMIT < 1) @@ -202,4 +198,8 @@ #error DS_PER_PACKET_PIPE_LIMIT cannot be greater than DS_APP_PIPE_DEPTH! #endif +#ifndef DS_MOVEFILES_DESTDIR +#error "DS_MOVEFILES_DESTDIR must be defined!" +#endif + #endif diff --git a/unit-test/ds_cmds_tests.c b/unit-test/ds_cmds_tests.c index 7b7e893..c751624 100644 --- a/unit-test/ds_cmds_tests.c +++ b/unit-test/ds_cmds_tests.c @@ -991,7 +991,7 @@ void DS_SetDestSizeCmd_Test_FileTableNotLoaded(void) UT_SetDefaultReturnValue(UT_KEY(DS_TableVerifySize), true); /* Execute the function being tested */ - UtAssert_VOIDCALL(DS_SetDestSizeCmd(&UT_CmdBuf.Buf)); + UtAssert_VOIDCALL(DS_SetDestSizeCmd(&UT_CmdBuf.Buf)); /* Verify results */ UtAssert_UINT32_EQ(DS_AppData.CmdRejectedCounter, 1); @@ -1276,7 +1276,7 @@ void DS_CloseAllCmd_Test_Nominal(void) DS_AppData.FileStatus[i].FileHandle = OS_OBJECT_ID_UNDEFINED; } - if (strlen(DS_MOVE_FILES) > 0) + if (DS_AppData.MoveFilesDestDir[0] != '\0') { strncpy(DS_AppData.DestFileTblPtr->File[0].Movename, "", DS_PATHNAME_BUFSIZE); } diff --git a/unit-test/ds_file_tests.c b/unit-test/ds_file_tests.c index 93240cd..58f6fd9 100644 --- a/unit-test/ds_file_tests.c +++ b/unit-test/ds_file_tests.c @@ -297,7 +297,7 @@ void DS_FileSetupWrite_Test_MaxFileSizeExceeded(void) strncpy(DS_AppData.FileStatus[FileIndex].FileName, "directory1/", sizeof(DS_AppData.FileStatus[FileIndex].FileName)); - if (strlen(DS_MOVE_FILES) > 0) + if (DS_AppData.MoveFilesDestDir[0] != '\0') { strncpy(DS_AppData.DestFileTblPtr->File[FileIndex].Movename, "directory2/movename/", sizeof(DS_AppData.DestFileTblPtr->File[FileIndex].Movename)); @@ -572,10 +572,7 @@ void DS_FileCreateDest_Test_ClosedFileHandle(void) DS_AppData.DestFileTblPtr->File[FileIndex].FileNameType = DS_BY_COUNT; DS_AppData.FileStatus[FileIndex].FileCount = 1; - if (strlen(DS_MOVE_FILES) > 0) - { - DS_AppData.DestFileTblPtr->File[FileIndex].Movename[0] = '\0'; - } + DS_AppData.DestFileTblPtr->File[FileIndex].Movename[0] = '\0'; /* Set to fail header write, which will call OS_close and clear the handle */ if (DS_FILE_HEADER_TYPE == DS_FILE_HEADER_CFE) @@ -897,7 +894,8 @@ void DS_FileUpdateHeader_Test_PlatformConfigCFE_SeekError(void) void DS_FileCloseDest_Test_PlatformConfigMoveFiles_Nominal(void) { - int32 FileIndex = 0; + int32 FileIndex = 0; + const char MoveFilesTrigger[] = "Move to downlink directory"; /* Set up the handle */ OS_OpenCreate(&DS_AppData.FileStatus[FileIndex].FileHandle, NULL, 0, 0); @@ -906,6 +904,7 @@ void DS_FileCloseDest_Test_PlatformConfigMoveFiles_Nominal(void) sizeof(DS_AppData.FileStatus[FileIndex].FileName)); strncpy(DS_AppData.DestFileTblPtr->File[FileIndex].Movename, "directory2/movename/", sizeof(DS_AppData.DestFileTblPtr->File[FileIndex].Movename)); + strncpy(DS_AppData.MoveFilesDestDir, MoveFilesTrigger, sizeof(DS_AppData.MoveFilesDestDir)); /* Execute the function being tested */ UtAssert_VOIDCALL(DS_FileCloseDest(FileIndex)); @@ -920,7 +919,9 @@ void DS_FileCloseDest_Test_PlatformConfigMoveFiles_Nominal(void) void DS_FileCloseDest_Test_PlatformConfigMoveFiles_MoveError(void) { - int32 FileIndex = 0; + int32 FileIndex = 0; + const char MoveFilesTrigger[] = "Move to downlink directory"; + strncpy(DS_AppData.MoveFilesDestDir, MoveFilesTrigger, sizeof(DS_AppData.MoveFilesDestDir)); /* Set up the handle */ OS_OpenCreate(&DS_AppData.FileStatus[FileIndex].FileHandle, NULL, 0, 0); @@ -946,8 +947,9 @@ void DS_FileCloseDest_Test_PlatformConfigMoveFiles_MoveError(void) void DS_FileCloseDest_Test_PlatformConfigMoveFiles_FilenameTooLarge(void) { - int32 FileIndex = 0; - const char DirName[] = "directory1/"; + int32 FileIndex = 0; + const char DirName[] = "directory1/"; + const char MoveFilesTrigger[] = "Move to downlink directory"; /* Set up the handle */ OS_OpenCreate(&DS_AppData.FileStatus[FileIndex].FileHandle, NULL, 0, 0); @@ -958,6 +960,7 @@ void DS_FileCloseDest_Test_PlatformConfigMoveFiles_FilenameTooLarge(void) DS_AppData.FileStatus[FileIndex].FileName[DS_TOTAL_FNAME_BUFSIZE - 1] = '\0'; strncpy(DS_AppData.DestFileTblPtr->File[FileIndex].Movename, "directory2/movename/", sizeof(DS_AppData.DestFileTblPtr->File[FileIndex].Movename)); + strncpy(DS_AppData.MoveFilesDestDir, MoveFilesTrigger, sizeof(DS_AppData.MoveFilesDestDir)); /* Execute the function being tested */ UtAssert_VOIDCALL(DS_FileCloseDest(FileIndex)); @@ -972,13 +975,15 @@ void DS_FileCloseDest_Test_PlatformConfigMoveFiles_FilenameTooLarge(void) void DS_FileCloseDest_Test_PlatformConfigMoveFiles_FilenameNull(void) { - int32 FileIndex = 0; + int32 FileIndex = 0; + const char MoveFilesTrigger[] = "Move to downlink directory"; /* Set up the handle */ OS_OpenCreate(&DS_AppData.FileStatus[FileIndex].FileHandle, NULL, 0, 0); strncpy(DS_AppData.DestFileTblPtr->File[FileIndex].Movename, "directory2/movename", sizeof(DS_AppData.DestFileTblPtr->File[FileIndex].Movename)); + strncpy(DS_AppData.MoveFilesDestDir, MoveFilesTrigger, sizeof(DS_AppData.MoveFilesDestDir)); /* Execute the function being tested */ UtAssert_VOIDCALL(DS_FileCloseDest(FileIndex)); @@ -993,13 +998,34 @@ void DS_FileCloseDest_Test_PlatformConfigMoveFiles_FilenameNull(void) UtAssert_STUB_COUNT(CFE_EVS_SendEvent, 1); } -void DS_FileCloseDest_Test_MoveFilesFalse(void) +void DS_FileCloseDest_Test_PlatformConfigMoveFiles_MovenameNull(void) { - int32 FileIndex = 0; + int32 FileIndex = 0; + const char MoveFilesTrigger[] = "Move to downlink directory"; /* Set up the handle */ OS_OpenCreate(&DS_AppData.FileStatus[FileIndex].FileHandle, NULL, 0, 0); + strncpy(DS_AppData.DestFileTblPtr->File[FileIndex].Movename, "", + sizeof(DS_AppData.DestFileTblPtr->File[FileIndex].Movename)); + strncpy(DS_AppData.MoveFilesDestDir, MoveFilesTrigger, sizeof(DS_AppData.MoveFilesDestDir)); + + /* Execute the function being tested */ + UtAssert_VOIDCALL(DS_FileCloseDest(FileIndex)); + + /* Verify results */ + UtAssert_STUB_COUNT(CFE_SB_MessageStringGet, 0); +} + +void DS_FileCloseDest_Test_PlatformConfigMoveFiles_EmptyMoveFilesTrigger(void) +{ + int32 FileIndex = 0; + const char MoveFilesTrigger[] = ""; + + /* Set up the handle */ + OS_OpenCreate(&DS_AppData.FileStatus[FileIndex].FileHandle, NULL, 0, 0); + strncpy(DS_AppData.MoveFilesDestDir, MoveFilesTrigger, sizeof(DS_AppData.MoveFilesDestDir)); + /* Execute the function being tested */ UtAssert_VOIDCALL(DS_FileCloseDest(FileIndex)); @@ -1304,17 +1330,12 @@ void UtTest_Setup(void) UT_DS_TEST_ADD(DS_FileUpdateHeader_Test_PlatformConfigCFE_SeekError); } - if (strlen(DS_MOVE_FILES) > 0) - { - UT_DS_TEST_ADD(DS_FileCloseDest_Test_PlatformConfigMoveFiles_Nominal); - UT_DS_TEST_ADD(DS_FileCloseDest_Test_PlatformConfigMoveFiles_MoveError); - UT_DS_TEST_ADD(DS_FileCloseDest_Test_PlatformConfigMoveFiles_FilenameTooLarge); - UT_DS_TEST_ADD(DS_FileCloseDest_Test_PlatformConfigMoveFiles_FilenameNull); - } - else - { - UT_DS_TEST_ADD(DS_FileCloseDest_Test_MoveFilesFalse); - } + UT_DS_TEST_ADD(DS_FileCloseDest_Test_PlatformConfigMoveFiles_Nominal); + UT_DS_TEST_ADD(DS_FileCloseDest_Test_PlatformConfigMoveFiles_MoveError); + UT_DS_TEST_ADD(DS_FileCloseDest_Test_PlatformConfigMoveFiles_FilenameTooLarge); + UT_DS_TEST_ADD(DS_FileCloseDest_Test_PlatformConfigMoveFiles_FilenameNull); + UT_DS_TEST_ADD(DS_FileCloseDest_Test_PlatformConfigMoveFiles_MovenameNull); + UT_DS_TEST_ADD(DS_FileCloseDest_Test_PlatformConfigMoveFiles_EmptyMoveFilesTrigger); UT_DS_TEST_ADD(DS_FileTestAge_Test_Nominal); UT_DS_TEST_ADD(DS_FileTestAge_Test_ExceedMaxAge);