Skip to content

Commit 59a64f0

Browse files
authored
core: Use FlagResetRule to set/restore system properties in DnsNameResolverTest (#12604)
1 parent c5f5ee0 commit 59a64f0

2 files changed

Lines changed: 40 additions & 25 deletions

File tree

core/src/test/java/io/grpc/internal/DnsNameResolverTest.java

Lines changed: 10 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package io.grpc.internal;
1818

1919
import static com.google.common.truth.Truth.assertThat;
20+
import static io.grpc.internal.DnsNameResolver.NETWORKADDRESS_CACHE_TTL_PROPERTY;
2021
import static org.junit.Assert.assertEquals;
2122
import static org.junit.Assert.assertFalse;
2223
import static org.junit.Assert.assertNotNull;
@@ -78,8 +79,6 @@
7879
import java.util.logging.Level;
7980
import java.util.logging.Logger;
8081
import java.util.regex.Pattern;
81-
import javax.annotation.Nullable;
82-
import org.junit.After;
8382
import org.junit.Before;
8483
import org.junit.Rule;
8584
import org.junit.Test;
@@ -100,6 +99,7 @@ public class DnsNameResolverTest {
10099

101100
@Rule public final TestRule globalTimeout = new DisableOnDebug(Timeout.seconds(10));
102101
@Rule public final MockitoRule mocks = MockitoJUnit.rule();
102+
@Rule public final FlagResetRule flagResetRule = new FlagResetRule();
103103

104104
private final Map<String, ?> serviceConfig = new LinkedHashMap<>();
105105

@@ -152,8 +152,6 @@ public void close(Executor instance) {}
152152
private NameResolver.Listener2 mockListener;
153153
@Captor
154154
private ArgumentCaptor<ResolutionResult> resultCaptor;
155-
@Nullable
156-
private String networkaddressCacheTtlPropertyValue;
157155
@Mock
158156
private RecordFetcher recordFetcher;
159157
@Mock private ProxyDetector mockProxyDetector;
@@ -213,24 +211,11 @@ private RetryingNameResolver newResolver(
213211
@Before
214212
public void setUp() {
215213
DnsNameResolver.enableJndi = true;
216-
networkaddressCacheTtlPropertyValue =
217-
System.getProperty(DnsNameResolver.NETWORKADDRESS_CACHE_TTL_PROPERTY);
218214

219215
// By default the mock listener processes the result successfully.
220216
when(mockListener.onResult2(isA(ResolutionResult.class))).thenReturn(Status.OK);
221217
}
222218

223-
@After
224-
public void restoreSystemProperty() {
225-
if (networkaddressCacheTtlPropertyValue == null) {
226-
System.clearProperty(DnsNameResolver.NETWORKADDRESS_CACHE_TTL_PROPERTY);
227-
} else {
228-
System.setProperty(
229-
DnsNameResolver.NETWORKADDRESS_CACHE_TTL_PROPERTY,
230-
networkaddressCacheTtlPropertyValue);
231-
}
232-
}
233-
234219
@Test
235220
public void invalidDnsName() throws Exception {
236221
testInvalidUri(new URI("dns", null, "/[invalid]", null));
@@ -275,19 +260,19 @@ public void invalidDnsName_containsUnderscore() {
275260

276261
@Test
277262
public void resolve_androidIgnoresPropertyValue() throws Exception {
278-
System.setProperty(DnsNameResolver.NETWORKADDRESS_CACHE_TTL_PROPERTY, Long.toString(2));
263+
flagResetRule.setSystemPropertyForTest(NETWORKADDRESS_CACHE_TTL_PROPERTY, "2");
279264
resolveNeverCache(true);
280265
}
281266

282267
@Test
283268
public void resolve_androidIgnoresPropertyValueCacheForever() throws Exception {
284-
System.setProperty(DnsNameResolver.NETWORKADDRESS_CACHE_TTL_PROPERTY, Long.toString(-1));
269+
flagResetRule.setSystemPropertyForTest(NETWORKADDRESS_CACHE_TTL_PROPERTY, "-1");
285270
resolveNeverCache(true);
286271
}
287272

288273
@Test
289274
public void resolve_neverCache() throws Exception {
290-
System.setProperty(DnsNameResolver.NETWORKADDRESS_CACHE_TTL_PROPERTY, "0");
275+
flagResetRule.setSystemPropertyForTest(NETWORKADDRESS_CACHE_TTL_PROPERTY, "0");
291276
resolveNeverCache(false);
292277
}
293278

@@ -387,7 +372,7 @@ public void execute(Runnable command) {
387372

388373
@Test
389374
public void resolve_cacheForever() throws Exception {
390-
System.setProperty(DnsNameResolver.NETWORKADDRESS_CACHE_TTL_PROPERTY, "-1");
375+
flagResetRule.setSystemPropertyForTest(NETWORKADDRESS_CACHE_TTL_PROPERTY, "-1");
391376
final List<InetAddress> answer1 = createAddressList(2);
392377
String name = "foo.googleapis.com";
393378
FakeTicker fakeTicker = new FakeTicker();
@@ -421,7 +406,7 @@ public void resolve_cacheForever() throws Exception {
421406
@Test
422407
public void resolve_usingCache() throws Exception {
423408
long ttl = 60;
424-
System.setProperty(DnsNameResolver.NETWORKADDRESS_CACHE_TTL_PROPERTY, Long.toString(ttl));
409+
flagResetRule.setSystemPropertyForTest(NETWORKADDRESS_CACHE_TTL_PROPERTY, Long.toString(ttl));
425410
final List<InetAddress> answer = createAddressList(2);
426411
String name = "foo.googleapis.com";
427412
FakeTicker fakeTicker = new FakeTicker();
@@ -456,7 +441,7 @@ public void resolve_usingCache() throws Exception {
456441
@Test
457442
public void resolve_cacheExpired() throws Exception {
458443
long ttl = 60;
459-
System.setProperty(DnsNameResolver.NETWORKADDRESS_CACHE_TTL_PROPERTY, Long.toString(ttl));
444+
flagResetRule.setSystemPropertyForTest(NETWORKADDRESS_CACHE_TTL_PROPERTY, Long.toString(ttl));
460445
final List<InetAddress> answer1 = createAddressList(2);
461446
final List<InetAddress> answer2 = createAddressList(1);
462447
String name = "foo.googleapis.com";
@@ -491,13 +476,13 @@ public void resolve_cacheExpired() throws Exception {
491476

492477
@Test
493478
public void resolve_invalidTtlPropertyValue() throws Exception {
494-
System.setProperty(DnsNameResolver.NETWORKADDRESS_CACHE_TTL_PROPERTY, "not_a_number");
479+
flagResetRule.setSystemPropertyForTest(NETWORKADDRESS_CACHE_TTL_PROPERTY, "not_a_number");
495480
resolveDefaultValue();
496481
}
497482

498483
@Test
499484
public void resolve_noPropertyValue() throws Exception {
500-
System.clearProperty(DnsNameResolver.NETWORKADDRESS_CACHE_TTL_PROPERTY);
485+
flagResetRule.clearSystemPropertyForTest(NETWORKADDRESS_CACHE_TTL_PROPERTY);
501486
resolveDefaultValue();
502487
}
503488

core/src/testFixtures/java/io/grpc/internal/FlagResetRule.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
import java.util.ArrayDeque;
2020
import java.util.Deque;
21+
import javax.annotation.Nullable;
2122
import org.junit.rules.ExternalResource;
2223

2324
/**
@@ -45,6 +46,35 @@ public <T> void setFlagForTest(SetterMethod<T> setter, T value) {
4546
toRunAfter.push(() -> setter.set(oldValue));
4647
}
4748

49+
/**
50+
* Sets java system property 'key' to 'value' and arranges for its previous value to be
51+
* unconditionally restored when the test completes.
52+
*/
53+
public void setSystemPropertyForTest(String key, String value) {
54+
String oldValue = System.setProperty(key, value);
55+
restoreSystemPropertyAfterTest(key, oldValue);
56+
}
57+
58+
/**
59+
* Clears java system property 'key' and arranges for its previous value to be unconditionally
60+
* restored when the test completes.
61+
*/
62+
public void clearSystemPropertyForTest(String key) {
63+
String oldValue = System.clearProperty(key);
64+
restoreSystemPropertyAfterTest(key, oldValue);
65+
}
66+
67+
private void restoreSystemPropertyAfterTest(String key, @Nullable String oldValue) {
68+
toRunAfter.push(
69+
() -> {
70+
if (oldValue == null) {
71+
System.clearProperty(key);
72+
} else {
73+
System.setProperty(key, oldValue);
74+
}
75+
});
76+
}
77+
4878
@Override
4979
protected void after() {
5080
RuntimeException toThrow = null;

0 commit comments

Comments
 (0)