# HG changeset patch # User weijun # Date 1392204043 -28800 # Node ID 273ddc5c37f3134a0429a28024aa9feb4413a619 # Parent 99352a8b305268b4e7a16e8b30e065c66883bb4a 8034762: Move krb5.conf related tests into a single place Reviewed-by: xuelei diff -r 99352a8b3052 -r 273ddc5c37f3 jdk/test/sun/security/krb5/ConfPlusProp.java --- a/jdk/test/sun/security/krb5/ConfPlusProp.java Wed Feb 12 11:02:47 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,151 +0,0 @@ -/* - * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -/* - * @test - * @bug 6857795 - * @bug 6858589 - * @bug 6972005 - * @compile -XDignore.symbol.file ConfPlusProp.java - * @run main/othervm ConfPlusProp - * @summary krb5.conf ignored if system properties on realm and kdc are provided - */ - -import sun.security.krb5.Config; - -public class ConfPlusProp { - Config config; - public static void main(String[] args) throws Exception { - new ConfPlusProp().run(); - } - - void refresh() throws Exception { - Config.refresh(); - config = Config.getInstance(); - } - - void checkDefaultRealm(String r) throws Exception { - try { - if (!config.getDefaultRealm().equals(r)) { - throw new AssertionError("Default realm error"); - } - } catch (Exception e) { - if (r != null) throw e; - } - } - - void check(String r, String k) throws Exception { - try { - if (!config.getKDCList(r).equals(k)) { - throw new AssertionError(r + " kdc not " + k); - } - } catch (Exception e) { - if (k != null) throw e; - } - } - - void run() throws Exception { - - // No prop, only conf - - // Point to a file with existing default_realm - System.setProperty("java.security.krb5.conf", - System.getProperty("test.src", ".") +"/confplusprop.conf"); - refresh(); - - checkDefaultRealm("R1"); - check("R1", "k1"); - check("R2", "old"); - check("R3", null); - if (!config.get("libdefaults", "forwardable").equals("well")) { - throw new Exception("Extra config error"); - } - - // Point to a file with no libdefaults - System.setProperty("java.security.krb5.conf", - System.getProperty("test.src", ".") +"/confplusprop2.conf"); - refresh(); - - checkDefaultRealm(null); - check("R1", "k12"); - check("R2", "old"); - check("R3", null); - - int version = System.getProperty("java.version").charAt(2) - '0'; - System.out.println("JDK version is " + version); - - // Zero-config is supported since 1.7 - if (version >= 7) { - // Point to a non-existing file - System.setProperty("java.security.krb5.conf", "i-am-not-a file"); - refresh(); - - // Default realm might come from DNS - //checkDefaultRealm(null); - check("R1", null); - check("R2", null); - check("R3", null); - if (config.get("libdefaults", "forwardable") != null) { - throw new Exception("Extra config error"); - } - } - - // Add prop - System.setProperty("java.security.krb5.realm", "R2"); - System.setProperty("java.security.krb5.kdc", "k2"); - - // Point to a file with existing default_realm - System.setProperty("java.security.krb5.conf", - System.getProperty("test.src", ".") +"/confplusprop.conf"); - refresh(); - - checkDefaultRealm("R2"); - check("R1", "k1"); - check("R2", "k2"); - check("R3", "k2"); - if (!config.get("libdefaults", "forwardable").equals("well")) { - throw new Exception("Extra config error"); - } - - // Point to a file with no libdefaults - System.setProperty("java.security.krb5.conf", - System.getProperty("test.src", ".") +"/confplusprop2.conf"); - refresh(); - - checkDefaultRealm("R2"); - check("R1", "k12"); - check("R2", "k2"); - check("R3", "k2"); - - // Point to a non-existing file - System.setProperty("java.security.krb5.conf", "i-am-not-a file"); - refresh(); - - checkDefaultRealm("R2"); - check("R1", "k2"); - check("R2", "k2"); - check("R3", "k2"); - if (config.get("libdefaults", "forwardable") != null) { - throw new Exception("Extra config error"); - } - } -} diff -r 99352a8b3052 -r 273ddc5c37f3 jdk/test/sun/security/krb5/ConfigWithQuotations.java --- a/jdk/test/sun/security/krb5/ConfigWithQuotations.java Wed Feb 12 11:02:47 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,48 +0,0 @@ -/* - * Copyright (c) 2009, 2011, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -/* - * @test - * @bug 6714845 - * @run main/othervm ConfigWithQuotations - * @summary Quotes in Kerberos configuration file are included in the values - */ - -import sun.security.krb5.Config; - -public class ConfigWithQuotations { - public static void main(String[] args) throws Exception { - // This config file is generated using Kerberos.app on a Mac - System.setProperty("java.security.krb5.conf", - System.getProperty("test.src", ".") +"/edu.mit.Kerberos"); - Config config = Config.getInstance(); - - System.out.println(config); - - if (!config.getDefaultRealm().equals("MAC.LOCAL")) { - throw new Exception("Realm error"); - } - if (!config.getKDCList("MAC.LOCAL").equals("kdc.mac.local:88")) { - throw new Exception("KDC error"); - } - } -} diff -r 99352a8b3052 -r 273ddc5c37f3 jdk/test/sun/security/krb5/DnsFallback.java --- a/jdk/test/sun/security/krb5/DnsFallback.java Wed Feb 12 11:02:47 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,82 +0,0 @@ -/* - * Copyright (c) 2008, 2012, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -/* - * @test - * @bug 6673164 - * @bug 6552334 - * @run main/othervm DnsFallback - * @summary fix dns_fallback parse error, and use dns by default - */ - -import java.io.*; -import java.lang.reflect.Method; -import sun.security.krb5.Config; - -public class DnsFallback { - - static Method useDNS_Realm; - - public static void main(String[] args) throws Exception { - - useDNS_Realm = Config.class.getDeclaredMethod("useDNS_Realm"); - useDNS_Realm.setAccessible(true); - - - // for 6673164 - check("true", "true", true); - check("false", "true", false); - check("true", "false", true); - check("false", "false", false); - check("true", null, true); - check("false", null, false); - check(null, "true", true); - check(null, "false", false); - - // for 6552334 - check(null, null, true); - } - - static void check(String realm, String fallback, boolean output) - throws Exception { - - try (PrintStream ps = - new PrintStream(new FileOutputStream("dnsfallback.conf"))) { - ps.println("[libdefaults]\n"); - if (realm != null) { - ps.println("dns_lookup_realm=" + realm); - } - if (fallback != null) { - ps.println("dns_fallback=" + fallback); - } - } - - System.setProperty("java.security.krb5.conf", "dnsfallback.conf"); - Config.refresh(); - System.out.println("Testing " + realm + ", " + fallback + ", " + output); - - if (!useDNS_Realm.invoke(Config.getInstance()).equals(output)) { - throw new Exception("Fail"); - } - } -} - diff -r 99352a8b3052 -r 273ddc5c37f3 jdk/test/sun/security/krb5/ParseCAPaths.java --- a/jdk/test/sun/security/krb5/ParseCAPaths.java Wed Feb 12 11:02:47 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,139 +0,0 @@ -/* - * Copyright (c) 2009, 2011, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -/* - * @test - * @bug 6789935 8012615 - * @run main/othervm ParseCAPaths - * @summary cross-realm capath search error - */ - -import java.util.Arrays; -import sun.security.krb5.Realm; - -public class ParseCAPaths { - static Exception failed = null; - public static void main(String[] args) throws Exception { - System.setProperty("java.security.krb5.conf", - System.getProperty("test.src", ".") +"/krb5-capaths.conf"); - - // MIT - check("ANL.GOV", "TEST.ANL.GOV", "ANL.GOV"); - check("ANL.GOV", "ES.NET", "ANL.GOV"); - check("ANL.GOV", "PNL.GOV", "ANL.GOV", "ES.NET"); - check("ANL.GOV", "NERSC.GOV", "ANL.GOV", "ES.NET"); - check("NERSC.GOV", "TEST.ANL.GOV", "NERSC.GOV", "ES.NET", "ANL.GOV"); - - // RedHat - // 3.6.2.1. Configuring a Shared Hierarchy of Names - check("AA.EXAMPLE.COM", "BB.EXAMPLE.COM", - "AA.EXAMPLE.COM", "EXAMPLE.COM"); - check("SITE1.SALES.EXAMPLE.COM", "EVERYWHERE.EXAMPLE.COM", - "SITE1.SALES.EXAMPLE.COM", "SALES.EXAMPLE.COM", - "EXAMPLE.COM"); - check("DEVEL.EXAMPLE.COM", "PROD.EXAMPLE.ORG", - "DEVEL.EXAMPLE.COM", "EXAMPLE.COM", "COM", - "ORG", "EXAMPLE.ORG"); - // 3.6.2.2. Configuring Paths in krb5.conf - check("A.EXAMPLE.COM", "B.EXAMPLE.COM", "A.EXAMPLE.COM"); - check("A.EXAMPLE.COM", "C.EXAMPLE.COM", - "A.EXAMPLE.COM", "B.EXAMPLE.COM"); - check("A.EXAMPLE.COM", "D.EXAMPLE.COM", - "A.EXAMPLE.COM", "B.EXAMPLE.COM", "C.EXAMPLE.COM"); - - // The original JDK example - check("TIVOLI.COM", "IBM.COM", "TIVOLI.COM", "LDAPCENTRAL.NET", - "IBM_LDAPCENTRAL.COM", "MOONLITE.ORG"); - - // Hierachical - check("N1.N.COM", "N2.N.COM", "N1.N.COM", "N.COM"); - check("N1.N.COM", "N2.N3.COM", "N1.N.COM", "N.COM", - "COM", "N3.COM"); - check("N1.COM", "N2.COM", "N1.COM", "COM"); - check("N1", "N2", "N1"); - check("N1.COM", "N2.ORG", "N1.COM", "COM", "ORG"); - check("N1.N.COM", "N.COM", "N1.N.COM"); - check("X.N1.N.COM", "N.COM", "X.N1.N.COM", "N1.N.COM"); - check("N.COM", "N1.N.COM", "N.COM"); - check("N.COM", "X.N1.N.COM", "N.COM", "N1.N.COM"); - check("A.B.C", "D.E.F", "A.B.C", "B.C", "C", "F", "E.F"); - - // Full path - check("A1.COM", "A2.COM", "A1.COM"); - check("A1.COM", "A3.COM", "A1.COM", "A2.COM"); - check("A1.COM", "A4.COM", "A1.COM", "A2.COM", "A3.COM"); - - // Shortest path - check("B1.COM", "B2.COM", "B1.COM"); - check("B1.COM", "B3.COM", "B1.COM", "B2.COM"); - check("B1.COM", "B4.COM", "B1.COM", "B2.COM", "B3.COM"); - - // Missing is "." - check("C1.COM", "C2.COM", "C1.COM", "COM"); - check("C1.COM", "C3.COM", "C1.COM", "C2.COM"); - - // cRealm = . - check("D1.COM", "D2.COM", "D1.COM"); - - // Bad cases - check("E1.COM", "E2.COM", "E1.COM"); - check("E1.COM", "E3.COM", "E1.COM", "E4.COM"); - check("G1.COM", "G3.COM", "G1.COM", "G2.COM"); - check("I1.COM", "I4.COM", "I1.COM", "I5.COM"); - - // 7019384 - check("A9.PRAGUE.XXX.CZ", "SERVIS.XXX.CZ", - "A9.PRAGUE.XXX.CZ", "PRAGUE.XXX.CZ", "ROOT.XXX.CZ"); - - if (failed != null) { - throw failed; - } - } - - static void check(String from, String to, String... paths) { - try { - check2(from, to, paths); - } catch (Exception e) { - System.out.println(" " + e.getMessage()); - failed = e; - } - } - - static void check2(String from, String to, String... paths) - throws Exception { - System.out.println(from + " -> " + to); - System.out.println(" expected: " + Arrays.toString(paths)); - String[] result = Realm.getRealmsList(from, to); - if (result == null || result.length == 0) { - throw new Exception("There is always a valid path."); - } else if(result.length != paths.length) { - throw new Exception("Length of path not correct"); - } else { - for (int i=0; i= 7) { + // Point to a non-existing file + System.setProperty("java.security.krb5.conf", "i-am-not-a file"); + refresh(); + + // Default realm might come from DNS + //checkDefaultRealm(null); + check("R1", null); + check("R2", null); + check("R3", null); + if (config.get("libdefaults", "forwardable") != null) { + throw new Exception("Extra config error"); + } + } + + // Add prop + System.setProperty("java.security.krb5.realm", "R2"); + System.setProperty("java.security.krb5.kdc", "k2"); + + // Point to a file with existing default_realm + System.setProperty("java.security.krb5.conf", + System.getProperty("test.src", ".") +"/confplusprop.conf"); + refresh(); + + checkDefaultRealm("R2"); + check("R1", "k1"); + check("R2", "k2"); + check("R3", "k2"); + if (!config.get("libdefaults", "forwardable").equals("well")) { + throw new Exception("Extra config error"); + } + + // Point to a file with no libdefaults + System.setProperty("java.security.krb5.conf", + System.getProperty("test.src", ".") +"/confplusprop2.conf"); + refresh(); + + checkDefaultRealm("R2"); + check("R1", "k12"); + check("R2", "k2"); + check("R3", "k2"); + + // Point to a non-existing file + System.setProperty("java.security.krb5.conf", "i-am-not-a file"); + refresh(); + + checkDefaultRealm("R2"); + check("R1", "k2"); + check("R2", "k2"); + check("R3", "k2"); + if (config.get("libdefaults", "forwardable") != null) { + throw new Exception("Extra config error"); + } + } +} diff -r 99352a8b3052 -r 273ddc5c37f3 jdk/test/sun/security/krb5/config/ConfigWithQuotations.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/sun/security/krb5/config/ConfigWithQuotations.java Wed Feb 12 19:20:43 2014 +0800 @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2009, 2011, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +/* + * @test + * @bug 6714845 + * @run main/othervm ConfigWithQuotations + * @summary Quotes in Kerberos configuration file are included in the values + */ + +import sun.security.krb5.Config; + +public class ConfigWithQuotations { + public static void main(String[] args) throws Exception { + // This config file is generated using Kerberos.app on a Mac + System.setProperty("java.security.krb5.conf", + System.getProperty("test.src", ".") +"/edu.mit.Kerberos"); + Config config = Config.getInstance(); + + System.out.println(config); + + if (!config.getDefaultRealm().equals("MAC.LOCAL")) { + throw new Exception("Realm error"); + } + if (!config.getKDCList("MAC.LOCAL").equals("kdc.mac.local:88")) { + throw new Exception("KDC error"); + } + } +} diff -r 99352a8b3052 -r 273ddc5c37f3 jdk/test/sun/security/krb5/config/DnsFallback.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/sun/security/krb5/config/DnsFallback.java Wed Feb 12 19:20:43 2014 +0800 @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2008, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +/* + * @test + * @bug 6673164 + * @bug 6552334 + * @run main/othervm DnsFallback + * @summary fix dns_fallback parse error, and use dns by default + */ + +import java.io.*; +import java.lang.reflect.Method; +import sun.security.krb5.Config; + +public class DnsFallback { + + static Method useDNS_Realm; + + public static void main(String[] args) throws Exception { + + useDNS_Realm = Config.class.getDeclaredMethod("useDNS_Realm"); + useDNS_Realm.setAccessible(true); + + + // for 6673164 + check("true", "true", true); + check("false", "true", false); + check("true", "false", true); + check("false", "false", false); + check("true", null, true); + check("false", null, false); + check(null, "true", true); + check(null, "false", false); + + // for 6552334 + check(null, null, true); + } + + static void check(String realm, String fallback, boolean output) + throws Exception { + + try (PrintStream ps = + new PrintStream(new FileOutputStream("dnsfallback.conf"))) { + ps.println("[libdefaults]\n"); + if (realm != null) { + ps.println("dns_lookup_realm=" + realm); + } + if (fallback != null) { + ps.println("dns_fallback=" + fallback); + } + } + + System.setProperty("java.security.krb5.conf", "dnsfallback.conf"); + Config.refresh(); + System.out.println("Testing " + realm + ", " + fallback + ", " + output); + + if (!useDNS_Realm.invoke(Config.getInstance()).equals(output)) { + throw new Exception("Fail"); + } + } +} + diff -r 99352a8b3052 -r 273ddc5c37f3 jdk/test/sun/security/krb5/config/ParseCAPaths.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/sun/security/krb5/config/ParseCAPaths.java Wed Feb 12 19:20:43 2014 +0800 @@ -0,0 +1,139 @@ +/* + * Copyright (c) 2009, 2011, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +/* + * @test + * @bug 6789935 8012615 + * @run main/othervm ParseCAPaths + * @summary cross-realm capath search error + */ + +import java.util.Arrays; +import sun.security.krb5.Realm; + +public class ParseCAPaths { + static Exception failed = null; + public static void main(String[] args) throws Exception { + System.setProperty("java.security.krb5.conf", + System.getProperty("test.src", ".") +"/krb5-capaths.conf"); + + // MIT + check("ANL.GOV", "TEST.ANL.GOV", "ANL.GOV"); + check("ANL.GOV", "ES.NET", "ANL.GOV"); + check("ANL.GOV", "PNL.GOV", "ANL.GOV", "ES.NET"); + check("ANL.GOV", "NERSC.GOV", "ANL.GOV", "ES.NET"); + check("NERSC.GOV", "TEST.ANL.GOV", "NERSC.GOV", "ES.NET", "ANL.GOV"); + + // RedHat + // 3.6.2.1. Configuring a Shared Hierarchy of Names + check("AA.EXAMPLE.COM", "BB.EXAMPLE.COM", + "AA.EXAMPLE.COM", "EXAMPLE.COM"); + check("SITE1.SALES.EXAMPLE.COM", "EVERYWHERE.EXAMPLE.COM", + "SITE1.SALES.EXAMPLE.COM", "SALES.EXAMPLE.COM", + "EXAMPLE.COM"); + check("DEVEL.EXAMPLE.COM", "PROD.EXAMPLE.ORG", + "DEVEL.EXAMPLE.COM", "EXAMPLE.COM", "COM", + "ORG", "EXAMPLE.ORG"); + // 3.6.2.2. Configuring Paths in krb5.conf + check("A.EXAMPLE.COM", "B.EXAMPLE.COM", "A.EXAMPLE.COM"); + check("A.EXAMPLE.COM", "C.EXAMPLE.COM", + "A.EXAMPLE.COM", "B.EXAMPLE.COM"); + check("A.EXAMPLE.COM", "D.EXAMPLE.COM", + "A.EXAMPLE.COM", "B.EXAMPLE.COM", "C.EXAMPLE.COM"); + + // The original JDK example + check("TIVOLI.COM", "IBM.COM", "TIVOLI.COM", "LDAPCENTRAL.NET", + "IBM_LDAPCENTRAL.COM", "MOONLITE.ORG"); + + // Hierachical + check("N1.N.COM", "N2.N.COM", "N1.N.COM", "N.COM"); + check("N1.N.COM", "N2.N3.COM", "N1.N.COM", "N.COM", + "COM", "N3.COM"); + check("N1.COM", "N2.COM", "N1.COM", "COM"); + check("N1", "N2", "N1"); + check("N1.COM", "N2.ORG", "N1.COM", "COM", "ORG"); + check("N1.N.COM", "N.COM", "N1.N.COM"); + check("X.N1.N.COM", "N.COM", "X.N1.N.COM", "N1.N.COM"); + check("N.COM", "N1.N.COM", "N.COM"); + check("N.COM", "X.N1.N.COM", "N.COM", "N1.N.COM"); + check("A.B.C", "D.E.F", "A.B.C", "B.C", "C", "F", "E.F"); + + // Full path + check("A1.COM", "A2.COM", "A1.COM"); + check("A1.COM", "A3.COM", "A1.COM", "A2.COM"); + check("A1.COM", "A4.COM", "A1.COM", "A2.COM", "A3.COM"); + + // Shortest path + check("B1.COM", "B2.COM", "B1.COM"); + check("B1.COM", "B3.COM", "B1.COM", "B2.COM"); + check("B1.COM", "B4.COM", "B1.COM", "B2.COM", "B3.COM"); + + // Missing is "." + check("C1.COM", "C2.COM", "C1.COM", "COM"); + check("C1.COM", "C3.COM", "C1.COM", "C2.COM"); + + // cRealm = . + check("D1.COM", "D2.COM", "D1.COM"); + + // Bad cases + check("E1.COM", "E2.COM", "E1.COM"); + check("E1.COM", "E3.COM", "E1.COM", "E4.COM"); + check("G1.COM", "G3.COM", "G1.COM", "G2.COM"); + check("I1.COM", "I4.COM", "I1.COM", "I5.COM"); + + // 7019384 + check("A9.PRAGUE.XXX.CZ", "SERVIS.XXX.CZ", + "A9.PRAGUE.XXX.CZ", "PRAGUE.XXX.CZ", "ROOT.XXX.CZ"); + + if (failed != null) { + throw failed; + } + } + + static void check(String from, String to, String... paths) { + try { + check2(from, to, paths); + } catch (Exception e) { + System.out.println(" " + e.getMessage()); + failed = e; + } + } + + static void check2(String from, String to, String... paths) + throws Exception { + System.out.println(from + " -> " + to); + System.out.println(" expected: " + Arrays.toString(paths)); + String[] result = Realm.getRealmsList(from, to); + if (result == null || result.length == 0) { + throw new Exception("There is always a valid path."); + } else if(result.length != paths.length) { + throw new Exception("Length of path not correct"); + } else { + for (int i=0; i