@@ -4025,3 +4025,68 @@ void test_prepareReplyDNSMessage_null_pointer( void )
40254025 uxIPHeaderSizePacket_IgnoreAndReturn ( ipSIZE_OF_IPv4_HEADER );
40264026 catch_assert ( prepareReplyDNSMessage ( & pxNetworkBuffer , lNetLength ) );
40274027}
4028+
4029+ void test_DNS_ParseDNSReply_mdns_request ( void )
4030+ {
4031+ uint32_t ret ;
4032+ uint8_t pucPacketBuffer [ 312 ];
4033+ size_t uxBufferLength = 250 ;
4034+ char dns [ 64 ];
4035+ struct freertos_addrinfo * pxAddressInfo ;
4036+ uint16_t usPort = ipMDNS_PORT ;
4037+ uint8_t * pucPayloadBuffer = pucPacketBuffer + sizeof ( UDPPacket_t ); /* Skip 42 bytes. */
4038+
4039+ memset ( dns , 'a' , 64 );
4040+ memset ( pucPacketBuffer , 0x00 , sizeof pucPacketBuffer );
4041+ dns [ 63 ] = 0 ;
4042+ BaseType_t xExpected = pdFALSE ;
4043+ size_t beg = sizeof ( DNSMessage_t ); /* 8 x 2 = 16 bytes */
4044+ NetworkEndPoint_t xEndPoint = { 0 };
4045+
4046+ DNSMessage_t * dns_header ;
4047+
4048+ NetworkBufferDescriptor_t xNetworkBuffer = { 0 };
4049+
4050+ xNetworkBuffer .pucEthernetBuffer = pucPacketBuffer ;
4051+ xNetworkBuffer .pxEndPoint = & xEndPoint ;
4052+ xEndPoint .ipv4_settings .ulIPAddress = 0xC0A8020B ;
4053+
4054+ dns_header = ( DNSMessage_t * ) pucPayloadBuffer ; /* pucPayloadBuffer without '&' */
4055+
4056+ dns_header -> usQuestions = FreeRTOS_htons ( 1 );
4057+ dns_header -> usAnswers = FreeRTOS_htons ( 2 );
4058+ dns_header -> usFlags = 0 ; /* dnsEXPECTED_RX_FLAGS; */
4059+
4060+ /* Question-1: */
4061+ pucPayloadBuffer [ beg ] = 38 ; /* Length of name. */
4062+ beg ++ ; /* Skip the length byte. */
4063+ strcpy ( pucPayloadBuffer + beg , "FreeRTOSbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb" );
4064+ beg += 38 + 1 + 4 ; /* Skip name, nul-byte, and Type/Class. */
4065+
4066+ /* xApplicationDNSQueryHook_Multi() must be called. */
4067+ hook_return = pdTRUE ;
4068+ /* it hasn't been called yet. */
4069+ hook_called = pdFALSE ;
4070+
4071+ usChar2u16_ExpectAnyArgsAndReturn ( 0x0001 ); /* usType */
4072+ usChar2u16_ExpectAnyArgsAndReturn ( 0x0001 ); /* usClass */
4073+ pxUDPPayloadBuffer_to_NetworkBuffer_ExpectAnyArgsAndReturn ( & xNetworkBuffer );
4074+ uxIPHeaderSizePacket_IgnoreAndReturn ( ipSIZE_OF_IPv4_HEADER );
4075+
4076+ pxDuplicateNetworkBufferWithDescriptor_ExpectAnyArgsAndReturn ( & xNetworkBuffer );
4077+
4078+ usGenerateChecksum_ExpectAnyArgsAndReturn ( 555 );
4079+ usGenerateProtocolChecksum_ExpectAnyArgsAndReturn ( 444 );
4080+
4081+ vReturnEthernetFrame_Expect ( & xNetworkBuffer , pdFALSE );
4082+ vReleaseNetworkBufferAndDescriptor_Expect ( & xNetworkBuffer );
4083+
4084+ ret = DNS_ParseDNSReply ( pucPayloadBuffer ,
4085+ beg , /* uxBufferLength, */
4086+ & pxAddressInfo ,
4087+ xExpected ,
4088+ usPort );
4089+
4090+ TEST_ASSERT_EQUAL ( pdFALSE , ret );
4091+ ASSERT_DNS_QUERY_HOOK_CALLED ();
4092+ }
0 commit comments