Skip to content

Commit ea38fd2

Browse files
authored
Merge pull request #1871 from jphickey/fix-1867-fs-testcases
Fix #1867, Add FS API test cases
2 parents c0e3e1c + 19e5f2f commit ea38fd2

File tree

2 files changed

+44
-8
lines changed

2 files changed

+44
-8
lines changed

modules/cfe_testcase/src/fs_util_test.c

+43-7
Original file line numberDiff line numberDiff line change
@@ -90,21 +90,35 @@ void TestInputFile(void)
9090
CFE_FS_INVALID_PATH);
9191
UtAssert_INT32_EQ(CFE_FS_ParseInputFileNameEx(OutNameBuf, InNameBuf, sizeof(OutNameBuf), 0, NULL, Path, Ext),
9292
CFE_FS_INVALID_PATH);
93+
94+
/* A short output buffer that is too small to fit the result */
95+
UtAssert_INT32_EQ(CFE_FS_ParseInputFileNameEx(OutNameBuf, InNameBuf, 8, sizeof(InNameBuf), Name, Path, Ext),
96+
CFE_FS_FNAME_TOO_LONG);
9397
}
9498

9599
void TestFileName(void)
96100
{
97-
const char Path[] = "/func/FileName.test";
101+
char Path[OS_MAX_PATH_LEN + 4];
98102
char Name[OS_MAX_FILE_NAME];
99103
const char ExpectedName[] = "FileName.test";
100104

101105
UtPrintf("Testing: CFE_FS_ExtractFilenameFromPath");
102106

107+
snprintf(Path, sizeof(Path), "/func/FileName.test");
103108
UtAssert_INT32_EQ(CFE_FS_ExtractFilenameFromPath(Path, Name), CFE_SUCCESS);
104109
UtAssert_StrCmp(Name, ExpectedName, "Extract Filename: %s", Name);
105110

106111
UtAssert_INT32_EQ(CFE_FS_ExtractFilenameFromPath(NULL, Name), CFE_FS_BAD_ARGUMENT);
107112
UtAssert_INT32_EQ(CFE_FS_ExtractFilenameFromPath(Path, NULL), CFE_FS_BAD_ARGUMENT);
113+
114+
memset(Path, 'x', sizeof(Path) - 1);
115+
Path[sizeof(Path) - 1] = 0;
116+
Path[0] = '/';
117+
UtAssert_INT32_EQ(CFE_FS_ExtractFilenameFromPath(Path, Name), CFE_FS_FNAME_TOO_LONG);
118+
119+
Path[0] = 'x';
120+
Path[OS_MAX_PATH_LEN - 1] = 0;
121+
UtAssert_INT32_EQ(CFE_FS_ExtractFilenameFromPath(Path, Name), CFE_FS_INVALID_PATH);
108122
}
109123

110124
/* FT helper stub compatible with background file write DataGetter */
@@ -119,32 +133,54 @@ bool FS_DataGetter(void *Meta, uint32 RecordNum, void **Buffer, size_t *BufSize)
119133
void FS_OnEvent(void *Meta, CFE_FS_FileWriteEvent_t Event, int32 Status, uint32 RecordNum, size_t BlockSize,
120134
size_t Position)
121135
{
136+
OS_TaskDelay(100);
122137
}
123138

124139
void TestFileDump(void)
125140
{
141+
int32 count;
142+
int32 MaxWait = 20;
143+
126144
memset(&CFE_FT_Global.FuncTestState, 0, sizeof(CFE_FT_Global.FuncTestState));
127145
CFE_FT_Global.FuncTestState.FileSubType = 2;
128-
CFE_FT_Global.FuncTestState.GetData = FS_DataGetter;
129-
CFE_FT_Global.FuncTestState.OnEvent = FS_OnEvent;
130-
strncpy(CFE_FT_Global.FuncTestState.FileName, "/ram/FT.bin", sizeof(CFE_FT_Global.FuncTestState.FileName));
131146
strncpy(CFE_FT_Global.FuncTestState.Description, "FT", sizeof(CFE_FT_Global.FuncTestState.Description));
132-
int count = 0;
133-
int MaxWait = 20;
134147

135148
UtPrintf("Testing: CFE_FS_BackgroundFileDumpRequest, CFE_FS_BackgroundFileDumpIsPending");
136149

137150
UtAssert_INT32_EQ(CFE_FS_BackgroundFileDumpIsPending(&CFE_FT_Global.FuncTestState), false);
151+
152+
/* With an empty "FileName" field, it should fail path validation */
153+
CFE_FT_Global.FuncTestState.GetData = FS_DataGetter;
154+
CFE_FT_Global.FuncTestState.OnEvent = FS_OnEvent;
155+
UtAssert_INT32_EQ(CFE_FS_BackgroundFileDumpRequest(&CFE_FT_Global.FuncTestState), CFE_FS_INVALID_PATH);
156+
strncpy(CFE_FT_Global.FuncTestState.FileName, "/ram/FT.bin", sizeof(CFE_FT_Global.FuncTestState.FileName));
157+
158+
/* With an empty "GetData" field, it should fail validation */
159+
CFE_FT_Global.FuncTestState.GetData = NULL;
160+
UtAssert_INT32_EQ(CFE_FS_BackgroundFileDumpRequest(&CFE_FT_Global.FuncTestState), CFE_FS_BAD_ARGUMENT);
161+
CFE_FT_Global.FuncTestState.GetData = FS_DataGetter;
162+
163+
/* With an empty "OnEvent" field, it should fail validation */
164+
CFE_FT_Global.FuncTestState.OnEvent = NULL;
165+
UtAssert_INT32_EQ(CFE_FS_BackgroundFileDumpRequest(&CFE_FT_Global.FuncTestState), CFE_FS_BAD_ARGUMENT);
166+
CFE_FT_Global.FuncTestState.OnEvent = FS_OnEvent;
167+
168+
/* This should work */
138169
UtAssert_INT32_EQ(CFE_FS_BackgroundFileDumpRequest(&CFE_FT_Global.FuncTestState), CFE_SUCCESS);
139170

171+
/* Duplicate request should get rejected */
172+
UtAssert_INT32_EQ(CFE_FS_BackgroundFileDumpRequest(&CFE_FT_Global.FuncTestState),
173+
CFE_STATUS_REQUEST_ALREADY_PENDING);
174+
140175
/* Wait for background task to complete */
176+
count = 0;
141177
while (CFE_FS_BackgroundFileDumpIsPending(&CFE_FT_Global.FuncTestState) && count < MaxWait)
142178
{
143179
OS_TaskDelay(100);
144180
count++;
145181
}
146182

147-
UtAssert_True(count < MaxWait, "count (%i) < MaxWait (%i)", count, MaxWait);
183+
UtAssert_INT32_LT(count, MaxWait);
148184

149185
UtAssert_INT32_EQ(CFE_FS_BackgroundFileDumpRequest(NULL), CFE_FS_BAD_ARGUMENT);
150186
UtAssert_INT32_EQ(CFE_FS_BackgroundFileDumpIsPending(NULL), false);

modules/core_api/fsw/inc/cfe_fs.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ CFE_Status_t CFE_FS_WriteHeader(osal_id_t FileDes, CFE_FS_Header_t *Hdr);
168168
** to be put into the file's Standard cFE File Header.
169169
**
170170
** \return Execution status, see \ref CFEReturnCodes, or OSAL status
171-
** \retval #CFE_STATUS_EXTERNAL_RESOURCE_FAIL \copybrief CFE_STATUS_EXTERNAL_RESOURCE_FAIL
171+
** \retval #CFE_STATUS_EXTERNAL_RESOURCE_FAIL \covtest \copybrief CFE_STATUS_EXTERNAL_RESOURCE_FAIL
172172
** \retval #CFE_SUCCESS \copybrief CFE_SUCCESS
173173
**
174174
** \note This function invokes OSAL API routines and the current implementation may return

0 commit comments

Comments
 (0)