Skip to content

Commit

Permalink
Merge pull request #1783 from zanzaben/fix1691_Time_External_Func_Test
Browse files Browse the repository at this point in the history
 Fix #1691, Add External Time Source Functional Tests
  • Loading branch information
astrogeco committed Aug 16, 2021
2 parents 59aa9c9 + 2c07618 commit 2a4d938
Show file tree
Hide file tree
Showing 4 changed files with 107 additions and 0 deletions.
1 change: 1 addition & 0 deletions modules/cfe_testcase/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ add_cfe_app(cfe_testcase
src/time_arithmetic_test.c
src/time_current_test.c
src/time_conversion_test.c
src/time_external_test.c
src/time_misc_test.c
)

Expand Down
1 change: 1 addition & 0 deletions modules/cfe_testcase/src/cfe_test.c
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@ void CFE_TestMain(void)
TimeArithmeticTestSetup();
TimeConversionTestSetup();
TimeCurrentTestSetup();
TimeExternalTestSetup();
TimeMiscTestSetup();

/*
Expand Down
1 change: 1 addition & 0 deletions modules/cfe_testcase/src/cfe_test.h
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,7 @@ void TBLRegistrationTestSetup(void);
void TimeArithmeticTestSetup(void);
void TimeConversionTestSetup(void);
void TimeCurrentTestSetup(void);
void TimeExternalTestSetup(void);
void TimeMiscTestSetup(void);

#endif /* CFE_TEST_H */
104 changes: 104 additions & 0 deletions modules/cfe_testcase/src/time_external_test.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
/*************************************************************************
**
** 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: time_external_test.c
**
** Purpose:
** Functional test of basic External Time Source APIs
**
** Demonstration of how to register and use the UT assert functions.
**
*************************************************************************/

/*
* Includes
*/

#include "cfe_test.h"

int32 TestCallbackFunction(void)
{
CFE_FT_Global.Count += 1;
return CFE_SUCCESS;
}

int32 TestCallbackFunction2(void)
{
CFE_FT_Global.Count = 0;
return CFE_SUCCESS;
}

void TestCallback(void)
{
CFE_FT_Global.Count = 1;

UtPrintf("Testing: CFE_TIME_RegisterSynchCallback, CFE_TIME_UnregisterSynchCallback");

UtAssert_INT32_EQ(CFE_TIME_RegisterSynchCallback(&TestCallbackFunction), CFE_SUCCESS);
UtAssert_INT32_EQ(CFE_TIME_RegisterSynchCallback(&TestCallbackFunction2), CFE_TIME_TOO_MANY_SYNCH_CALLBACKS);

OS_TaskDelay(2500);
if (CFE_FT_Global.Count < 2)
{
UtAssert_MIR("CFE_TIME_RegisterSynchCallback requires manual inspection to determine if failure is with the "
"API or due to an insufficient timing performance of this machine");
}

CFE_FT_Global.Count = 1;
UtAssert_INT32_EQ(CFE_TIME_UnregisterSynchCallback(&TestCallbackFunction), CFE_SUCCESS);
UtAssert_INT32_EQ(CFE_TIME_UnregisterSynchCallback(&TestCallbackFunction), CFE_TIME_CALLBACK_NOT_REGISTERED);

OS_TaskDelay(2500);
UtAssert_INT32_LTEQ(CFE_FT_Global.Count, 2);

UtAssert_INT32_EQ(CFE_TIME_UnregisterSynchCallback(NULL), CFE_TIME_BAD_ARGUMENT);
UtAssert_INT32_EQ(CFE_TIME_RegisterSynchCallback(NULL), CFE_TIME_BAD_ARGUMENT);
}

void TestExternal(void)
{
#if ((CFE_PLATFORM_TIME_CFG_SRC_MET == true) || (CFE_PLATFORM_TIME_CFG_SRC_GPS == true) || \
(CFE_PLATFORM_TIME_CFG_SRC_TIME == true))
CFE_TIME_SysTime_t time = {1000, 0};
#endif

UtPrintf("Testing: CFE_TIME_ExternalTone, CFE_TIME_ExternalMET, CFE_TIME_ExternalGPS, CFE_TIME_ExternalTime");
/* These time calls could impact the system timekeeping. Likely impact is incorrect time for one update cycle, a
* rejected external time update, multiple tone's or external updates detected, or similar. */
UtAssert_VOIDCALL(CFE_TIME_ExternalTone());

#if (CFE_PLATFORM_TIME_CFG_SRC_MET == true)
UtAssert_VOIDCALL(CFE_TIME_ExternalMET(time));
#endif

#if (CFE_PLATFORM_TIME_CFG_SRC_GPS == true)
UtAssert_VOIDCALL(CFE_TIME_ExternalGPS(time, 5));
#endif

#if (CFE_PLATFORM_TIME_CFG_SRC_TIME == true)
UtAssert_VOIDCALL(CFE_TIME_ExternalTime(time));
#endif
}

void TimeExternalTestSetup(void)
{
UtTest_Add(TestCallback, NULL, NULL, "Test Time Synch Callbacks");
UtTest_Add(TestExternal, NULL, NULL, "Test External Sources");
}

0 comments on commit 2a4d938

Please sign in to comment.