2727import static org .mockito .Mockito .mock ;
2828import static org .mockito .Mockito .times ;
2929import static org .mockito .Mockito .verify ;
30- import static org .mockito .Mockito .verifyNoMoreInteractions ;
3130import static org .mockito .Mockito .when ;
3231
33- import com .google .common .base .Stopwatch ;
3432import com .google .common .collect .Iterables ;
3533import com .google .common .net .InetAddresses ;
36- import com .google .common .testing .FakeTicker ;
3734import io .grpc .Attributes ;
3835import io .grpc .EquivalentAddressGroup ;
3936import io .grpc .NameResolver ;
5552import java .util .Map ;
5653import java .util .Random ;
5754import java .util .concurrent .ExecutorService ;
58- import java .util .concurrent .TimeUnit ;
59- import javax .annotation .Nullable ;
6055import org .junit .After ;
6156import org .junit .Before ;
6257import org .junit .Rule ;
@@ -108,45 +103,28 @@ public void close(ExecutorService instance) {
108103 private NameResolver .Listener mockListener ;
109104 @ Captor
110105 private ArgumentCaptor <List <EquivalentAddressGroup >> resultCaptor ;
111- @ Nullable
112- private String networkaddressCacheTtlPropertyValue ;
113106
114107 private DnsNameResolver newResolver (String name , int port ) {
115- return newResolver (name , port , GrpcUtil .NOOP_PROXY_DETECTOR , Stopwatch . createUnstarted () );
108+ return newResolver (name , port , GrpcUtil .NOOP_PROXY_DETECTOR );
116109 }
117110
118111 private DnsNameResolver newResolver (
119112 String name ,
120113 int port ,
121- ProxyDetector proxyDetector ,
122- Stopwatch stopwatch ) {
114+ ProxyDetector proxyDetector ) {
123115 DnsNameResolver dnsResolver = new DnsNameResolver (
124116 null ,
125117 name ,
126118 Attributes .newBuilder ().set (NameResolver .Factory .PARAMS_DEFAULT_PORT , port ).build (),
127119 fakeExecutorResource ,
128- proxyDetector ,
129- stopwatch );
120+ proxyDetector );
130121 return dnsResolver ;
131122 }
132123
133124 @ Before
134125 public void setUp () {
135126 MockitoAnnotations .initMocks (this );
136127 DnsNameResolver .enableJndi = true ;
137- networkaddressCacheTtlPropertyValue =
138- System .getProperty (DnsNameResolver .NETWORKADDRESS_CACHE_TTL_PROPERTY );
139- }
140-
141- @ After
142- public void restoreSystemProperty () {
143- if (networkaddressCacheTtlPropertyValue == null ) {
144- System .clearProperty (DnsNameResolver .NETWORKADDRESS_CACHE_TTL_PROPERTY );
145- } else {
146- System .setProperty (
147- DnsNameResolver .NETWORKADDRESS_CACHE_TTL_PROPERTY ,
148- networkaddressCacheTtlPropertyValue );
149- }
150128 }
151129
152130 @ After
@@ -198,8 +176,7 @@ public void invalidDnsName_containsUnderscore() {
198176 }
199177
200178 @ Test
201- public void resolve_neverCache () throws Exception {
202- System .setProperty (DnsNameResolver .NETWORKADDRESS_CACHE_TTL_PROPERTY , "0" );
179+ public void resolve () throws Exception {
203180 final List <InetAddress > answer1 = createAddressList (2 );
204181 final List <InetAddress > answer2 = createAddressList (1 );
205182 String name = "foo.googleapis.com" ;
@@ -226,156 +203,6 @@ public void resolve_neverCache() throws Exception {
226203 verify (mockResolver , times (2 )).resolveAddress (Matchers .anyString ());
227204 }
228205
229- @ Test
230- public void resolve_cacheForever () throws Exception {
231- System .setProperty (DnsNameResolver .NETWORKADDRESS_CACHE_TTL_PROPERTY , "-1" );
232- final List <InetAddress > answer1 = createAddressList (2 );
233- String name = "foo.googleapis.com" ;
234- FakeTicker fakeTicker = new FakeTicker ();
235-
236- DnsNameResolver resolver =
237- newResolver (name , 81 , GrpcUtil .NOOP_PROXY_DETECTOR , Stopwatch .createUnstarted (fakeTicker ));
238- AddressResolver mockResolver = mock (AddressResolver .class );
239- when (mockResolver .resolveAddress (Matchers .anyString ()))
240- .thenReturn (answer1 )
241- .thenThrow (new AssertionError ("should not called twice" ));
242- resolver .setAddressResolver (mockResolver );
243-
244- resolver .start (mockListener );
245- assertEquals (1 , fakeExecutor .runDueTasks ());
246- verify (mockListener ).onAddresses (resultCaptor .capture (), any (Attributes .class ));
247- assertAnswerMatches (answer1 , 81 , resultCaptor .getValue ());
248- assertEquals (0 , fakeClock .numPendingTasks ());
249-
250- fakeTicker .advance (1 , TimeUnit .DAYS );
251- resolver .refresh ();
252- assertEquals (1 , fakeExecutor .runDueTasks ());
253- verifyNoMoreInteractions (mockListener );
254- assertAnswerMatches (answer1 , 81 , resultCaptor .getValue ());
255- assertEquals (0 , fakeClock .numPendingTasks ());
256-
257- resolver .shutdown ();
258-
259- verify (mockResolver ).resolveAddress (Matchers .anyString ());
260- }
261-
262- @ Test
263- public void resolve_usingCache () throws Exception {
264- long ttl = 60 ;
265- System .setProperty (DnsNameResolver .NETWORKADDRESS_CACHE_TTL_PROPERTY , Long .toString (ttl ));
266- final List <InetAddress > answer = createAddressList (2 );
267- String name = "foo.googleapis.com" ;
268- FakeTicker fakeTicker = new FakeTicker ();
269-
270- DnsNameResolver resolver =
271- newResolver (name , 81 , GrpcUtil .NOOP_PROXY_DETECTOR , Stopwatch .createUnstarted (fakeTicker ));
272- AddressResolver mockResolver = mock (AddressResolver .class );
273- when (mockResolver .resolveAddress (Matchers .anyString ()))
274- .thenReturn (answer )
275- .thenThrow (new AssertionError ("should not reach here." ));
276- resolver .setAddressResolver (mockResolver );
277-
278- resolver .start (mockListener );
279- assertEquals (1 , fakeExecutor .runDueTasks ());
280- verify (mockListener ).onAddresses (resultCaptor .capture (), any (Attributes .class ));
281- assertAnswerMatches (answer , 81 , resultCaptor .getValue ());
282- assertEquals (0 , fakeClock .numPendingTasks ());
283-
284- // this refresh should return cached result
285- fakeTicker .advance (ttl - 1 , TimeUnit .SECONDS );
286- resolver .refresh ();
287- assertEquals (1 , fakeExecutor .runDueTasks ());
288- verifyNoMoreInteractions (mockListener );
289- assertAnswerMatches (answer , 81 , resultCaptor .getValue ());
290- assertEquals (0 , fakeClock .numPendingTasks ());
291-
292- resolver .shutdown ();
293-
294- verify (mockResolver ).resolveAddress (Matchers .anyString ());
295- }
296-
297- @ Test
298- public void resolve_cacheExpired () throws Exception {
299- long ttl = 60 ;
300- System .setProperty (DnsNameResolver .NETWORKADDRESS_CACHE_TTL_PROPERTY , Long .toString (ttl ));
301- final List <InetAddress > answer1 = createAddressList (2 );
302- final List <InetAddress > answer2 = createAddressList (1 );
303- String name = "foo.googleapis.com" ;
304- FakeTicker fakeTicker = new FakeTicker ();
305-
306- DnsNameResolver resolver =
307- newResolver (name , 81 , GrpcUtil .NOOP_PROXY_DETECTOR , Stopwatch .createUnstarted (fakeTicker ));
308- AddressResolver mockResolver = mock (AddressResolver .class );
309- when (mockResolver .resolveAddress (Matchers .anyString ())).thenReturn (answer1 ).thenReturn (answer2 );
310- resolver .setAddressResolver (mockResolver );
311-
312- resolver .start (mockListener );
313- assertEquals (1 , fakeExecutor .runDueTasks ());
314- verify (mockListener ).onAddresses (resultCaptor .capture (), any (Attributes .class ));
315- assertAnswerMatches (answer1 , 81 , resultCaptor .getValue ());
316- assertEquals (0 , fakeClock .numPendingTasks ());
317-
318- fakeTicker .advance (ttl + 1 , TimeUnit .SECONDS );
319- resolver .refresh ();
320- assertEquals (1 , fakeExecutor .runDueTasks ());
321- verify (mockListener , times (2 )).onAddresses (resultCaptor .capture (), any (Attributes .class ));
322- assertAnswerMatches (answer2 , 81 , resultCaptor .getValue ());
323- assertEquals (0 , fakeClock .numPendingTasks ());
324-
325- resolver .shutdown ();
326-
327- verify (mockResolver , times (2 )).resolveAddress (Matchers .anyString ());
328- }
329-
330- @ Test
331- public void resolve_invalidTtlPropertyValue () throws Exception {
332- System .setProperty (DnsNameResolver .NETWORKADDRESS_CACHE_TTL_PROPERTY , "not_a_number" );
333- resolveDefaultValue ();
334- }
335-
336- @ Test
337- public void resolve_noPropertyValue () throws Exception {
338- System .clearProperty (DnsNameResolver .NETWORKADDRESS_CACHE_TTL_PROPERTY );
339- resolveDefaultValue ();
340- }
341-
342- private void resolveDefaultValue () throws Exception {
343- final List <InetAddress > answer1 = createAddressList (2 );
344- final List <InetAddress > answer2 = createAddressList (1 );
345- String name = "foo.googleapis.com" ;
346- FakeTicker fakeTicker = new FakeTicker ();
347-
348- DnsNameResolver resolver =
349- newResolver (name , 81 , GrpcUtil .NOOP_PROXY_DETECTOR , Stopwatch .createUnstarted (fakeTicker ));
350- AddressResolver mockResolver = mock (AddressResolver .class );
351- when (mockResolver .resolveAddress (Matchers .anyString ())).thenReturn (answer1 ).thenReturn (answer2 );
352- resolver .setAddressResolver (mockResolver );
353-
354- resolver .start (mockListener );
355- assertEquals (1 , fakeExecutor .runDueTasks ());
356- verify (mockListener ).onAddresses (resultCaptor .capture (), any (Attributes .class ));
357- assertAnswerMatches (answer1 , 81 , resultCaptor .getValue ());
358- assertEquals (0 , fakeClock .numPendingTasks ());
359-
360- fakeTicker .advance (DnsNameResolver .DEFAULT_NETWORK_CACHE_TTL_SECONDS , TimeUnit .SECONDS );
361- resolver .refresh ();
362- assertEquals (1 , fakeExecutor .runDueTasks ());
363- verifyNoMoreInteractions (mockListener );
364- assertAnswerMatches (answer1 , 81 , resultCaptor .getValue ());
365- assertEquals (0 , fakeClock .numPendingTasks ());
366-
367- fakeTicker .advance (1 , TimeUnit .SECONDS );
368- resolver .refresh ();
369- assertEquals (1 , fakeExecutor .runDueTasks ());
370- verify (mockListener , times (2 )).onAddresses (resultCaptor .capture (), any (Attributes .class ));
371- assertAnswerMatches (answer2 , 81 , resultCaptor .getValue ());
372- assertEquals (0 , fakeClock .numPendingTasks ());
373-
374- resolver .shutdown ();
375-
376- verify (mockResolver , times (2 )).resolveAddress (Matchers .anyString ());
377- }
378-
379206 @ Test
380207 public void resolveAll_nullResourceResolver () throws Exception {
381208 final String hostname = "addr.fake" ;
@@ -502,8 +329,7 @@ public void doNotResolveWhenProxyDetected() throws Exception {
502329 "password" );
503330 when (alwaysDetectProxy .proxyFor (any (SocketAddress .class )))
504331 .thenReturn (proxyParameters );
505- DnsNameResolver resolver =
506- newResolver (name , port , alwaysDetectProxy , Stopwatch .createUnstarted ());
332+ DnsNameResolver resolver = newResolver (name , port , alwaysDetectProxy );
507333 AddressResolver mockAddressResolver = mock (AddressResolver .class );
508334 when (mockAddressResolver .resolveAddress (Matchers .anyString ())).thenThrow (new AssertionError ());
509335 resolver .setAddressResolver (mockAddressResolver );
0 commit comments