1616#include "mock_NetworkBufferManagement.h"
1717#include "mock_FreeRTOS_DHCP_mock.h"
1818#include "mock_FreeRTOS_IP_Common.h"
19+ #include "mock_FreeRTOS_IP_Utils.h"
1920
2021#include "FreeRTOS_DHCP.h"
2122
@@ -343,6 +344,7 @@ void test_vDHCPProcess_ResetAndIncorrectStateWithSocketAlreadyCreated( void )
343344 FreeRTOS_recvfrom_ExpectAndReturn ( xDHCPv4Socket , NULL , 0UL , FREERTOS_ZERO_COPY + FREERTOS_MSG_PEEK , NULL , NULL , 0 );
344345 /* Ignore the buffer argument though. */
345346 FreeRTOS_recvfrom_IgnoreArg_pvBuffer ();
347+ vReleaseSinglePacketFromUDPSocket_Expect ( xDHCPv4Socket );
346348 /* Make random number generation pass. */
347349 xApplicationGetRandomNumber_ExpectAndReturn ( & ( pxEndPoint -> xDHCPData .ulTransactionId ), pdTRUE );
348350 /* See if the timer is reloaded. */
@@ -365,6 +367,76 @@ void test_vDHCPProcess_ResetAndIncorrectStateWithSocketAlreadyCreated( void )
365367 }
366368}
367369
370+ /* Verify the control flow when FreeRTOS_recvfrom with DHCP socket returns timeout. */
371+ void test_vDHCPProcess_RecvFromReturnsTimeout ( void )
372+ {
373+ struct xSOCKET xTestSocket ;
374+ NetworkEndPoint_t xEndPoint = { 0 }, * pxEndPoint = & xEndPoint ;
375+
376+ /* This should remain unchanged. */
377+ xDHCPv4Socket = & xTestSocket ;
378+ xDHCPSocketUserCount = 1 ;
379+ pxEndPoint -> xDHCPData .xDHCPSocket = & xTestSocket ;
380+ /* Put any state. */
381+ pxEndPoint -> xDHCPData .eDHCPState = eSendDHCPRequest ;
382+ pxEndPoint -> xDHCPData .eExpectedState = eSendDHCPRequest ;
383+ /* This should be reset to 0. */
384+ pxEndPoint -> xDHCPData .xUseBroadcast = 1 ;
385+ /* This should be reset as well */
386+ pxEndPoint -> xDHCPData .ulOfferedIPAddress = 0xAAAAAAAA ;
387+ /* And this too. */
388+ pxEndPoint -> xDHCPData .ulDHCPServerAddress = 0xABABABAB ;
389+ /* And this should be updated. */
390+ pxEndPoint -> xDHCPData .xDHCPTxPeriod = 0 ;
391+
392+ /* Expect these arguments. */
393+ FreeRTOS_recvfrom_ExpectAndReturn ( xDHCPv4Socket , NULL , 0UL , FREERTOS_ZERO_COPY + FREERTOS_MSG_PEEK , NULL , NULL , - pdFREERTOS_ERRNO_EAGAIN );
394+ /* Ignore the buffer argument though. */
395+ FreeRTOS_recvfrom_IgnoreArg_pvBuffer ();
396+
397+ /* Make random number generation pass. */
398+ xApplicationGetRandomNumber_ExpectAndReturn ( & ( pxEndPoint -> xDHCPData .ulTransactionId ), pdTRUE );
399+ /* See if the timer is reloaded. */
400+ vDHCP_RATimerReload_Expect ( & xEndPoint , dhcpINITIAL_TIMER_PERIOD );
401+
402+ vDHCPProcess ( pdTRUE , pxEndPoint );
403+ }
404+
405+ /* Verify the control flow when FreeRTOS_recvfrom with DHCP socket returns IO error/any other error. */
406+ void test_vDHCPProcess_RecvFromReturnsIOError ( void )
407+ {
408+ struct xSOCKET xTestSocket ;
409+ NetworkEndPoint_t xEndPoint = { 0 }, * pxEndPoint = & xEndPoint ;
410+
411+ /* This should remain unchanged. */
412+ xDHCPv4Socket = & xTestSocket ;
413+ xDHCPSocketUserCount = 1 ;
414+ pxEndPoint -> xDHCPData .xDHCPSocket = & xTestSocket ;
415+ /* Put any state. */
416+ pxEndPoint -> xDHCPData .eDHCPState = eSendDHCPRequest ;
417+ pxEndPoint -> xDHCPData .eExpectedState = eSendDHCPRequest ;
418+ /* This should be reset to 0. */
419+ pxEndPoint -> xDHCPData .xUseBroadcast = 1 ;
420+ /* This should be reset as well */
421+ pxEndPoint -> xDHCPData .ulOfferedIPAddress = 0xAAAAAAAA ;
422+ /* And this too. */
423+ pxEndPoint -> xDHCPData .ulDHCPServerAddress = 0xABABABAB ;
424+ /* And this should be updated. */
425+ pxEndPoint -> xDHCPData .xDHCPTxPeriod = 0 ;
426+
427+ /* Expect these arguments. */
428+ FreeRTOS_recvfrom_ExpectAndReturn ( xDHCPv4Socket , NULL , 0UL , FREERTOS_ZERO_COPY + FREERTOS_MSG_PEEK , NULL , NULL , - pdFREERTOS_ERRNO_EIO );
429+ /* Ignore the buffer argument though. */
430+ FreeRTOS_recvfrom_IgnoreArg_pvBuffer ();
431+
432+ /* Make random number generation pass. */
433+ xApplicationGetRandomNumber_ExpectAndReturn ( & ( pxEndPoint -> xDHCPData .ulTransactionId ), pdTRUE );
434+ /* See if the timer is reloaded. */
435+ vDHCP_RATimerReload_Expect ( & xEndPoint , dhcpINITIAL_TIMER_PERIOD );
436+
437+ vDHCPProcess ( pdTRUE , pxEndPoint );
438+ }
439+
368440void test_vDHCPProcess_CorrectStateDHCPHookFailsDHCPSocketNULL ( void )
369441{
370442 NetworkEndPoint_t xEndPoint = { 0 }, * pxEndPoint = & xEndPoint ;
@@ -422,6 +494,7 @@ void test_vDHCPProcess_CorrectStateDHCPHookFailsDHCPSocketNonNULL( void )
422494 FreeRTOS_recvfrom_ExpectAndReturn ( xDHCPv4Socket , NULL , 0UL , FREERTOS_ZERO_COPY + FREERTOS_MSG_PEEK , NULL , NULL , 0 );
423495 /* Ignore the buffer argument though. */
424496 FreeRTOS_recvfrom_IgnoreArg_pvBuffer ();
497+ vReleaseSinglePacketFromUDPSocket_Expect ( xDHCPv4Socket );
425498 /* Make sure that the user indicates anything else than the desired options. */
426499 eStubExpectedDHCPPhase = eDHCPPhasePreDiscover ;
427500 pxStubExpectedEndPoint = pxEndPoint ;
@@ -469,6 +542,7 @@ void test_vDHCPProcess_CorrectStateDHCPHookDefaultReturn( void )
469542 FreeRTOS_recvfrom_ExpectAndReturn ( xDHCPv4Socket , NULL , 0UL , FREERTOS_ZERO_COPY + FREERTOS_MSG_PEEK , NULL , NULL , 0 );
470543 /* Ignore the buffer argument though. */
471544 FreeRTOS_recvfrom_IgnoreArg_pvBuffer ();
545+ vReleaseSinglePacketFromUDPSocket_Expect ( xDHCPv4Socket );
472546 /* Make sure that the user indicates anything else than the desired options. */
473547 eStubExpectedDHCPPhase = eDHCPPhasePreDiscover ;
474548 pxStubExpectedEndPoint = pxEndPoint ;
@@ -513,6 +587,7 @@ void test_vDHCPProcess_CorrectStateDHCPHookContinueReturnDHCPSocketNotNULLButGNW
513587 FreeRTOS_recvfrom_ExpectAndReturn ( xDHCPv4Socket , NULL , 0UL , FREERTOS_ZERO_COPY + FREERTOS_MSG_PEEK , NULL , NULL , 0 );
514588 /* Ignore the buffer argument though. */
515589 FreeRTOS_recvfrom_IgnoreArg_pvBuffer ();
590+ vReleaseSinglePacketFromUDPSocket_Expect ( xDHCPv4Socket );
516591 /* Make sure that the user indicates anything else than the desired options. */
517592 eStubExpectedDHCPPhase = eDHCPPhasePreDiscover ;
518593 pxStubExpectedEndPoint = pxEndPoint ;
@@ -551,6 +626,7 @@ void test_vDHCPProcess_CorrectStateDHCPHookContinueReturnDHCPSocketNotNULLButHos
551626 FreeRTOS_recvfrom_ExpectAndReturn ( xDHCPv4Socket , NULL , 0UL , FREERTOS_ZERO_COPY + FREERTOS_MSG_PEEK , NULL , NULL , 0 );
552627 /* Ignore the buffer argument though. */
553628 FreeRTOS_recvfrom_IgnoreArg_pvBuffer ();
629+ vReleaseSinglePacketFromUDPSocket_Expect ( xDHCPv4Socket );
554630 /* Make sure that the user indicates anything else than the desired options. */
555631 eStubExpectedDHCPPhase = eDHCPPhasePreDiscover ;
556632 pxStubExpectedEndPoint = pxEndPoint ;
@@ -623,6 +699,7 @@ void test_vDHCPProcess_CorrectStateDHCPHookContinueReturnSendFailsNoBroadcast( v
623699 FreeRTOS_recvfrom_ExpectAndReturn ( xDHCPv4Socket , NULL , 0UL , FREERTOS_ZERO_COPY + FREERTOS_MSG_PEEK , NULL , NULL , 0 );
624700 /* Ignore the buffer argument though. */
625701 FreeRTOS_recvfrom_IgnoreArg_pvBuffer ();
702+ vReleaseSinglePacketFromUDPSocket_Expect ( xDHCPv4Socket );
626703 /* Make sure that the user indicates anything else than the desired options. */
627704 eStubExpectedDHCPPhase = eDHCPPhasePreDiscover ;
628705 pxStubExpectedEndPoint = pxEndPoint ;
@@ -671,6 +748,7 @@ void test_vDHCPProcess_CorrectStateDHCPHookContinueReturnSendFailsNoBroadcast_NU
671748 FreeRTOS_recvfrom_ExpectAndReturn ( xDHCPv4Socket , NULL , 0UL , FREERTOS_ZERO_COPY + FREERTOS_MSG_PEEK , NULL , NULL , 0 );
672749 /* Ignore the buffer argument though. */
673750 FreeRTOS_recvfrom_IgnoreArg_pvBuffer ();
751+ vReleaseSinglePacketFromUDPSocket_Expect ( xDHCPv4Socket );
674752 /* Make sure that the user indicates anything else than the desired options. */
675753 eStubExpectedDHCPPhase = eDHCPPhasePreDiscover ;
676754 pxStubExpectedEndPoint = pxEndPoint ;
@@ -720,6 +798,7 @@ void test_vDHCPProcess_CorrectStateDHCPHookContinueReturnSendFailsUseBroadCast(
720798 FreeRTOS_recvfrom_ExpectAndReturn ( xDHCPv4Socket , NULL , 0UL , FREERTOS_ZERO_COPY + FREERTOS_MSG_PEEK , NULL , NULL , 0 );
721799 /* Ignore the buffer argument though. */
722800 FreeRTOS_recvfrom_IgnoreArg_pvBuffer ();
801+ vReleaseSinglePacketFromUDPSocket_Expect ( xDHCPv4Socket );
723802 /* Make sure that the user indicates anything else than the desired options. */
724803 eStubExpectedDHCPPhase = eDHCPPhasePreDiscover ;
725804 pxStubExpectedEndPoint = pxEndPoint ;
@@ -770,6 +849,7 @@ void test_vDHCPProcess_CorrectStateDHCPHookContinueReturnSendSucceedsUseBroadCas
770849 FreeRTOS_recvfrom_ExpectAndReturn ( xDHCPv4Socket , NULL , 0UL , FREERTOS_ZERO_COPY + FREERTOS_MSG_PEEK , NULL , NULL , 0 );
771850 /* Ignore the buffer argument though. */
772851 FreeRTOS_recvfrom_IgnoreArg_pvBuffer ();
852+ vReleaseSinglePacketFromUDPSocket_Expect ( xDHCPv4Socket );
773853 /* Make sure that the user indicates anything else than the desired options. */
774854 eStubExpectedDHCPPhase = eDHCPPhasePreDiscover ;
775855 pxStubExpectedEndPoint = pxEndPoint ;
@@ -821,6 +901,7 @@ void test_vDHCPProcess_CorrectStateDHCPHookContinueReturnSendSucceedsUseBroadCas
821901 FreeRTOS_recvfrom_ExpectAndReturn ( xDHCPv4Socket , NULL , 0UL , FREERTOS_ZERO_COPY + FREERTOS_MSG_PEEK , NULL , NULL , 0 );
822902 /* Ignore the buffer argument though. */
823903 FreeRTOS_recvfrom_IgnoreArg_pvBuffer ();
904+ vReleaseSinglePacketFromUDPSocket_Expect ( xDHCPv4Socket );
824905 /* Make sure that the user indicates anything else than the desired options. */
825906 eStubExpectedDHCPPhase = eDHCPPhasePreDiscover ;
826907 pxStubExpectedEndPoint = pxEndPoint ;
@@ -868,6 +949,7 @@ void test_vDHCPProcess_eSendDHCPRequestCorrectStateGNWFails( void )
868949 FreeRTOS_recvfrom_ExpectAndReturn ( xDHCPv4Socket , NULL , 0UL , FREERTOS_ZERO_COPY + FREERTOS_MSG_PEEK , NULL , NULL , 0 );
869950 /* Ignore the buffer argument though. */
870951 FreeRTOS_recvfrom_IgnoreArg_pvBuffer ();
952+ vReleaseSinglePacketFromUDPSocket_Expect ( xDHCPv4Socket );
871953 /* Get the hostname. */
872954 pcApplicationHostnameHook_ExpectAndReturn ( pcHostName );
873955 /* Return NULL network buffer. */
@@ -900,6 +982,7 @@ void test_vDHCPProcess_eSendDHCPRequestCorrectStateGNWSucceedsSendFails( void )
900982 FreeRTOS_recvfrom_ExpectAndReturn ( xDHCPv4Socket , NULL , 0UL , FREERTOS_ZERO_COPY + FREERTOS_MSG_PEEK , NULL , NULL , 0 );
901983 /* Ignore the buffer argument though. */
902984 FreeRTOS_recvfrom_IgnoreArg_pvBuffer ();
985+ vReleaseSinglePacketFromUDPSocket_Expect ( xDHCPv4Socket );
903986 /* Get the hostname. */
904987 pcApplicationHostnameHook_ExpectAndReturn ( pcHostName );
905988 /* Returning a proper network buffer. */
@@ -938,6 +1021,7 @@ void test_vDHCPProcess_eSendDHCPRequestCorrectStateGNWSucceedsSendSucceeds( void
9381021 FreeRTOS_recvfrom_ExpectAndReturn ( xDHCPv4Socket , NULL , 0UL , FREERTOS_ZERO_COPY + FREERTOS_MSG_PEEK , NULL , NULL , 0 );
9391022 /* Ignore the buffer argument though. */
9401023 FreeRTOS_recvfrom_IgnoreArg_pvBuffer ();
1024+ vReleaseSinglePacketFromUDPSocket_Expect ( xDHCPv4Socket );
9411025 /* Get the hostname. */
9421026 pcApplicationHostnameHook_ExpectAndReturn ( pcHostName );
9431027 /* Returning a proper network buffer. */
@@ -980,6 +1064,7 @@ void test_vDHCPProcess_eWaitingOfferRecvfromFailsNoTimeout( void )
9801064 FreeRTOS_recvfrom_ExpectAndReturn ( xDHCPv4Socket , NULL , 0UL , FREERTOS_ZERO_COPY + FREERTOS_MSG_PEEK , NULL , NULL , 0 );
9811065 /* Ignore the buffer argument though. */
9821066 FreeRTOS_recvfrom_IgnoreArg_pvBuffer ();
1067+ vReleaseSinglePacketFromUDPSocket_Expect ( xDHCPv4Socket );
9831068
9841069 /* Make sure that there is no timeout. The expression is: xTaskGetTickCount() - pxEndPoint->xDHCPData.xDHCPTxTime ) > pxEndPoint->xDHCPData.xDHCPTxPeriod */
9851070 /* Return a value which makes the difference just equal to the period. */
@@ -1016,6 +1101,7 @@ void test_vDHCPProcess_eWaitingOfferRecvfromFailsTimeoutGiveUp( void ) /* prvClo
10161101 FreeRTOS_recvfrom_ExpectAndReturn ( xDHCPv4Socket , NULL , 0UL , FREERTOS_ZERO_COPY + FREERTOS_MSG_PEEK , NULL , NULL , 0 );
10171102 /* Ignore the buffer argument though. */
10181103 FreeRTOS_recvfrom_IgnoreArg_pvBuffer ();
1104+ vReleaseSinglePacketFromUDPSocket_Expect ( xDHCPv4Socket );
10191105
10201106 /* Make sure that there is timeout. The expression is: xTaskGetTickCount() - pxEndPoint->xDHCPData.xDHCPTxTime ) > pxEndPoint->xDHCPData.xDHCPTxPeriod */
10211107 /* Return a value which makes the difference greater than the period. */
@@ -1068,6 +1154,7 @@ void test_vDHCPProcess_eWaitingOfferRecvfromFailsTimeoutDontGiveUpRNGFail( void
10681154 FreeRTOS_recvfrom_ExpectAndReturn ( xDHCPv4Socket , NULL , 0UL , FREERTOS_ZERO_COPY + FREERTOS_MSG_PEEK , NULL , NULL , 0 );
10691155 /* Ignore the buffer argument though. */
10701156 FreeRTOS_recvfrom_IgnoreArg_pvBuffer ();
1157+ vReleaseSinglePacketFromUDPSocket_Expect ( xDHCPv4Socket );
10711158
10721159 /* Make sure that there is timeout. The expression is: xTaskGetTickCount() - pxEndPoint->xDHCPData.xDHCPTxTime ) > pxEndPoint->xDHCPData.xDHCPTxPeriod */
10731160 /* Return a value which makes the difference greater than the period. */
@@ -1111,6 +1198,7 @@ void test_vDHCPProcess_eWaitingOfferRecvfromFailsTimeoutDontGiveUpRNGPassUseBroa
11111198 FreeRTOS_recvfrom_ExpectAndReturn ( xDHCPv4Socket , NULL , 0UL , FREERTOS_ZERO_COPY + FREERTOS_MSG_PEEK , NULL , NULL , 0 );
11121199 /* Ignore the buffer argument though. */
11131200 FreeRTOS_recvfrom_IgnoreArg_pvBuffer ();
1201+ vReleaseSinglePacketFromUDPSocket_Expect ( xDHCPv4Socket );
11141202
11151203 /* Make sure that there is timeout. The expression is: xTaskGetTickCount() - pxEndPoint->xDHCPData.xDHCPTxTime ) > pxEndPoint->xDHCPData.xDHCPTxPeriod */
11161204 /* Return a value which makes the difference greater than the period. */
@@ -1164,6 +1252,7 @@ void test_vDHCPProcess_eWaitingOfferRecvfromFailsTimeoutDontGiveUpRNGPassNoBroad
11641252 FreeRTOS_recvfrom_ExpectAndReturn ( xDHCPv4Socket , NULL , 0UL , FREERTOS_ZERO_COPY + FREERTOS_MSG_PEEK , NULL , NULL , 0 );
11651253 /* Ignore the buffer argument though. */
11661254 FreeRTOS_recvfrom_IgnoreArg_pvBuffer ();
1255+ vReleaseSinglePacketFromUDPSocket_Expect ( xDHCPv4Socket );
11671256
11681257 /* Make sure that there is timeout. The expression is: xTaskGetTickCount() - pxEndPoint->xDHCPData.xDHCPTxTime ) > pxEndPoint->xDHCPData.xDHCPTxPeriod */
11691258 /* Return a value which makes the difference greater than the period. */
@@ -1238,7 +1327,7 @@ void test_vDHCPProcess_eLeasedAddress_CorrectState_ValidBytesInMessage( void )
12381327/**
12391328 *@brief This test function ensures that when the DHCP states are mismatching after
12401329 * initial parsing of response from DHCP server, if a new response from a different DHCP
1241- * server will cause a infinite loop inside the vDHCPProcess.
1330+ * server will not cause a infinite loop inside the vDHCPProcess.
12421331 */
12431332void test_vDHCPProcess_eLeasedAddress_InCorrectState_Loop ( void )
12441333{
@@ -1272,6 +1361,7 @@ void test_vDHCPProcess_eLeasedAddress_InCorrectState_Loop( void )
12721361 FreeRTOS_IsEndPointUp_IgnoreAndReturn ( pdFALSE );
12731362
12741363 FreeRTOS_ReleaseUDPPayloadBuffer_Ignore ();
1364+ vReleaseSinglePacketFromUDPSocket_Ignore ();
12751365
12761366 vDHCPProcess ( pdFALSE , pxEndPoint );
12771367
0 commit comments