@@ -88,13 +88,55 @@ public void EmptyAddressRecords_UseResponseSourceAddress()
8888 string . Empty ,
8989 false ,
9090 Array . Empty < IPAddress > ( ) ) ;
91+ IPAddress responseSource = IPAddress . Parse ( "192.168.1.25" ) ;
9192
92- BasisLanAdvertisement advertisement = Extract ( profile ) ;
93+ BasisLanAdvertisement advertisement = Extract ( profile , responseSource , out IPAddress address ) ;
9394
9495 Assert . Equal ( id , advertisement . InstanceId ) ;
96+ Assert . Equal ( responseSource , address ) ;
9597 Assert . DoesNotContain ( profile . Resources , resource => resource is AddressRecord ) ;
9698 }
9799
100+ [ Fact ]
101+ public void AdvertisedIpv4_IsPreferredOverIpv6ResponseSource ( )
102+ {
103+ IPAddress advertisedIpv4 = IPAddress . Parse ( "192.168.1.25" ) ;
104+ IPAddress responseSource = new IPAddress (
105+ IPAddress . Parse ( "fe80::1234" ) . GetAddressBytes ( ) ,
106+ 7 ) ;
107+ ServiceProfile profile = BasisLanServerAnnouncer . CreateProfile (
108+ Guid . NewGuid ( ) ,
109+ 4296 ,
110+ BasisNetworkStackRegistry . LiteNetLibId ,
111+ "Android host" ,
112+ string . Empty ,
113+ false ,
114+ new [ ] { advertisedIpv4 } ) ;
115+
116+ Extract ( profile , responseSource , out IPAddress address ) ;
117+
118+ Assert . Equal ( advertisedIpv4 , address ) ;
119+ }
120+
121+ [ Fact ]
122+ public void Ipv4ResponseSource_IsPreferredOverOtherAdvertisedIpv4 ( )
123+ {
124+ IPAddress advertisedIpv4 = IPAddress . Parse ( "10.0.0.5" ) ;
125+ IPAddress responseSource = IPAddress . Parse ( "192.168.1.25" ) ;
126+ ServiceProfile profile = BasisLanServerAnnouncer . CreateProfile (
127+ Guid . NewGuid ( ) ,
128+ 4296 ,
129+ BasisNetworkStackRegistry . LiteNetLibId ,
130+ "Wi-Fi host" ,
131+ string . Empty ,
132+ false ,
133+ new [ ] { advertisedIpv4 } ) ;
134+
135+ Extract ( profile , responseSource , out IPAddress address ) ;
136+
137+ Assert . Equal ( responseSource , address ) ;
138+ }
139+
98140 [ Fact ]
99141 public void AddressPreference_PrioritizesRoutableAddressesOverLinkLocal ( )
100142 {
@@ -131,6 +173,17 @@ private static ServiceProfile CreateProfile(
131173 }
132174
133175 private static BasisLanAdvertisement Extract ( ServiceProfile profile )
176+ {
177+ IPAddress expectedAddress = IPAddress . Parse ( "192.168.1.25" ) ;
178+ BasisLanAdvertisement advertisement = Extract ( profile , expectedAddress , out IPAddress address ) ;
179+ Assert . Equal ( expectedAddress , address ) ;
180+ return advertisement ;
181+ }
182+
183+ private static BasisLanAdvertisement Extract (
184+ ServiceProfile profile ,
185+ IPAddress responseSource ,
186+ out IPAddress address )
134187 {
135188 Message message = new Message ( ) ;
136189 foreach ( ResourceRecord resource in profile . Resources )
@@ -148,10 +201,10 @@ private static BasisLanAdvertisement Extract(ServiceProfile profile)
148201 Assert . True ( BasisLanServerBrowser . TryExtractAdvertisement (
149202 message ,
150203 profile . FullyQualifiedName ,
151- IPAddress . Parse ( "192.168.1.25" ) ,
204+ responseSource ,
152205 out BasisLanAdvertisement advertisement ,
153- out IPAddress ? address ) ) ;
154- Assert . Equal ( IPAddress . Parse ( "192.168.1.25" ) , address ) ;
206+ out IPAddress ? selectedAddress ) ) ;
207+ address = Assert . IsType < IPAddress > ( selectedAddress ) ;
155208 return advertisement ;
156209 }
157210
0 commit comments