Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/openjdk-multiarch-jdk8u
Path: blob/aarch64-shenandoah-jdk8u272-b10/jdk/test/com/sun/jndi/dns/IPv6NameserverPlatformParsingTest.java
38855 views
1
/*
2
* Copyright (c) 2015, Red Hat, Inc.
3
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4
*
5
* This code is free software; you can redistribute it and/or modify it
6
* under the terms of the GNU General Public License version 2 only, as
7
* published by the Free Software Foundation.
8
*
9
* This code is distributed in the hope that it will be useful, but WITHOUT
10
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12
* version 2 for more details (a copy is included in the LICENSE file that
13
* accompanied this code).
14
*
15
* You should have received a copy of the GNU General Public License version
16
* 2 along with this work; if not, write to the Free Software Foundation,
17
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18
*
19
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20
* or visit www.oracle.com if you need additional information or have any
21
* questions.
22
*/
23
24
import java.lang.reflect.Field;
25
import java.util.Hashtable;
26
27
import javax.naming.Context;
28
import javax.naming.NamingException;
29
import javax.naming.spi.NamingManager;
30
31
import com.sun.jndi.dns.DnsContext;
32
33
/**
34
* @test
35
* @bug 6991580
36
* @summary IPv6 Nameservers in resolv.conf throws NumberFormatException
37
* @run main/manual IPv6NameserverPlatformParsingTest
38
*
39
* In order to run this test be sure to place, for example, the following
40
* snippet into your platform's {@code /etc/resolv.conf}:
41
* <pre>
42
* nameserver 127.0.0.1
43
* nameserver 2001:4860:4860::8888
44
* nameserver [::1]:5353
45
* nameserver 127.0.0.1:5353
46
* </pre>
47
*
48
* Then, run this test as manual jtreg test.
49
*
50
* @author Severin Gehwolf
51
*
52
*/
53
public class IPv6NameserverPlatformParsingTest {
54
55
private static boolean foundIPv6 = false;
56
57
public static void main(String[] args) {
58
Hashtable<String, String> env = new Hashtable<>();
59
env.put(Context.INITIAL_CONTEXT_FACTORY, com.sun.jndi.dns.DnsContextFactory.class.getName());
60
61
String[] servers;
62
try {
63
Context ctx = NamingManager.getInitialContext(env);
64
if (!com.sun.jndi.dns.DnsContextFactory.platformServersAvailable()) {
65
throw new RuntimeException("FAIL: no platform servers available, test does not make sense");
66
}
67
DnsContext context = (DnsContext)ctx;
68
servers = getServersFromContext(context);
69
} catch (NamingException e) {
70
throw new RuntimeException(e);
71
}
72
for (String server: servers) {
73
System.out.println("DEBUG: 'nameserver = " + server + "'");
74
if (server.indexOf(':') >= 0 && server.indexOf('.') < 0) {
75
System.out.println("DEBUG: ==> Found IPv6 address in servers list: " + server);
76
foundIPv6 = true;
77
}
78
}
79
try {
80
new com.sun.jndi.dns.DnsClient(servers, 100, 1);
81
} catch (NumberFormatException e) {
82
throw new RuntimeException("FAIL: Tried to parse non-[]-encapsulated IPv6 address.", e);
83
} catch (Exception e) {
84
throw new RuntimeException("ERROR: Something unexpected happened.");
85
}
86
if (!foundIPv6) {
87
// This is a manual test, since it requires changing /etc/resolv.conf on Linux/Unix
88
// platforms. See comment as to how to run this test.
89
throw new RuntimeException("ERROR: No IPv6 address returned from platform.");
90
}
91
System.out.println("PASS: Found IPv6 address and DnsClient parsed it correctly.");
92
}
93
94
private static String[] getServersFromContext(DnsContext context) {
95
try {
96
Field serversField = DnsContext.class.getDeclaredField("servers");
97
serversField.setAccessible(true);
98
return (String[])serversField.get(context);
99
} catch (Exception e) {
100
throw new RuntimeException(e);
101
}
102
}
103
104
}
105
106