@@ -1083,6 +1083,88 @@ public async Task DnsResponseParseException_ShouldTryNextServer_ThenThrow_Async(
10831083 Assert . Equal ( 3 , calledIps . Count ) ;
10841084 }
10851085
1086+ [ Theory ]
1087+ [ InlineData ( 1 , 1 ) ]
1088+ [ InlineData ( 1 , 3 ) ]
1089+ [ InlineData ( 2 , 1 ) ]
1090+ [ InlineData ( 3 , 1 ) ]
1091+ [ InlineData ( 4 , 4 ) ]
1092+ public void DnsDnsXidMismatchException_ShouldRetry_ThenThrow ( int serversCount , int retriesCount )
1093+ {
1094+ var nameServers = Enumerable . Range ( 1 , serversCount )
1095+ . Select ( i => new NameServer ( IPAddress . Parse ( $ "127.0.10.{ i } ") ) )
1096+ . ToArray ( ) ;
1097+
1098+ var options = new LookupClientOptions ( nameServers )
1099+ {
1100+ EnableAuditTrail = true ,
1101+ ContinueOnDnsError = false ,
1102+ ThrowDnsErrors = false ,
1103+ UseCache = true ,
1104+ Retries = retriesCount ,
1105+ UseRandomNameServer = false ,
1106+ UseTcpFallback = false
1107+ } ;
1108+
1109+ var calledIps = new List < IPAddress > ( ) ;
1110+ var udpMessageHandler = new TestMessageHandler ( DnsMessageHandleType . UDP , ( ip , req ) =>
1111+ {
1112+ calledIps . Add ( ip . Address ) ;
1113+
1114+ throw new DnsXidMismatchException ( req . Header . Id , req . Header . Id + 1 ) ;
1115+ } ) ;
1116+
1117+ var lookup = new LookupClient ( options , udpHandler : udpMessageHandler ) ;
1118+ var result = Assert . ThrowsAny < DnsXidMismatchException > ( ( ) => lookup . Query ( new DnsQuestion ( "test.com" , QueryType . SRV , QueryClass . IN ) ) ) ;
1119+
1120+ var expectedIps = nameServers
1121+ . SelectMany ( ns => Enumerable . Repeat ( ns . IPEndPoint . Address , retriesCount + 1 ) )
1122+ . ToArray ( ) ;
1123+
1124+ Assert . Equal ( expectedIps , calledIps ) ;
1125+ }
1126+
1127+ [ Theory ]
1128+ [ InlineData ( 1 , 1 ) ]
1129+ [ InlineData ( 1 , 3 ) ]
1130+ [ InlineData ( 2 , 1 ) ]
1131+ [ InlineData ( 3 , 1 ) ]
1132+ [ InlineData ( 4 , 4 ) ]
1133+ public async Task DnsDnsXidMismatchException_ShouldRetry_ThenThrow_Async ( int serversCount , int retriesCount )
1134+ {
1135+ var nameServers = Enumerable . Range ( 1 , serversCount )
1136+ . Select ( i => new NameServer ( IPAddress . Parse ( $ "127.0.10.{ i } ") ) )
1137+ . ToArray ( ) ;
1138+
1139+ var options = new LookupClientOptions ( nameServers )
1140+ {
1141+ EnableAuditTrail = true ,
1142+ ContinueOnDnsError = false ,
1143+ ThrowDnsErrors = false ,
1144+ UseCache = true ,
1145+ Retries = retriesCount ,
1146+ UseRandomNameServer = false ,
1147+ UseTcpFallback = false
1148+ } ;
1149+
1150+ var calledIps = new List < IPAddress > ( ) ;
1151+ var udpMessageHandler = new TestMessageHandler ( DnsMessageHandleType . UDP , ( ip , req ) =>
1152+ {
1153+ calledIps . Add ( ip . Address ) ;
1154+
1155+ throw new DnsXidMismatchException ( req . Header . Id , req . Header . Id + 1 ) ;
1156+ } ) ;
1157+
1158+ var lookup = new LookupClient ( options , udpHandler : udpMessageHandler ) ;
1159+ var result = await Assert . ThrowsAnyAsync < DnsXidMismatchException > ( ( ) => lookup . QueryAsync ( new DnsQuestion ( "test.com" , QueryType . SRV , QueryClass . IN ) ) ) ;
1160+
1161+ var expectedIps = nameServers
1162+ . SelectMany ( ns => Enumerable . Repeat ( ns . IPEndPoint . Address , retriesCount + 1 ) )
1163+ . ToArray ( ) ;
1164+
1165+ Assert . Equal ( expectedIps , calledIps ) ;
1166+ }
1167+
10861168 /* Normal truncated response (TC flag) */
10871169
10881170 [ Fact ]
0 commit comments