diff --git a/modules/cfe_testcase/CMakeLists.txt b/modules/cfe_testcase/CMakeLists.txt index 6dc8e4918..02c28a9bc 100644 --- a/modules/cfe_testcase/CMakeLists.txt +++ b/modules/cfe_testcase/CMakeLists.txt @@ -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 ) diff --git a/modules/cfe_testcase/src/cfe_test.c b/modules/cfe_testcase/src/cfe_test.c index c1faaaa4e..78a94ad38 100644 --- a/modules/cfe_testcase/src/cfe_test.c +++ b/modules/cfe_testcase/src/cfe_test.c @@ -81,6 +81,7 @@ void CFE_TestMain(void) TimeArithmeticTestSetup(); TimeConversionTestSetup(); TimeCurrentTestSetup(); + TimeExternalTestSetup(); TimeMiscTestSetup(); /* diff --git a/modules/cfe_testcase/src/cfe_test.h b/modules/cfe_testcase/src/cfe_test.h index 591193e17..af5db13dc 100644 --- a/modules/cfe_testcase/src/cfe_test.h +++ b/modules/cfe_testcase/src/cfe_test.h @@ -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 */ diff --git a/modules/cfe_testcase/src/time_external_test.c b/modules/cfe_testcase/src/time_external_test.c new file mode 100644 index 000000000..467cf9226 --- /dev/null +++ b/modules/cfe_testcase/src/time_external_test.c @@ -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"); +}