From 793c2f43d5966f78803fb238004fdbc01bf1c337 Mon Sep 17 00:00:00 2001 From: weijun Date: Wed, 12 Mar 2014 14:18:01 +0800 Subject: [PATCH] 8035963: The failed Kerberos tests due to timeouts Reviewed-by: alanb, xuelei --- test/ProblemList.txt | 9 ------- test/sun/security/krb5/auto/BadKdc.java | 29 ++++++++++++++++++--- test/sun/security/krb5/auto/BadKdc1.java | 11 ++++++-- test/sun/security/krb5/auto/BadKdc2.java | 7 ++++- test/sun/security/krb5/auto/MaxRetries.java | 8 +++--- test/sun/security/krb5/auto/TcpTimeout.java | 2 +- 6 files changed, 46 insertions(+), 20 deletions(-) diff --git a/test/ProblemList.txt b/test/ProblemList.txt index 1d9efbc98..af94e0769 100644 --- a/test/ProblemList.txt +++ b/test/ProblemList.txt @@ -229,15 +229,6 @@ sun/security/pkcs11/sslecc/ClientJSSEServerJSSE.java solaris-all java/security/KeyPairGenerator/SolarisShortDSA.java solaris-all sun/security/tools/keytool/standard.sh solaris-all -# 8000439: NPG: REGRESSION : sun/security/krb5/auto/MaxRetries.java fails with timeout -sun/security/krb5/auto/MaxRetries.java solaris-sparcv9 - -# 8006690: sun/security/krb5/auto/BadKdc1.java fails intermittently -sun/security/krb5/auto/BadKdc1.java solaris-sparcv9 -sun/security/krb5/auto/BadKdc2.java solaris-sparcv9 -sun/security/krb5/auto/BadKdc3.java solaris-sparcv9 -sun/security/krb5/auto/BadKdc4.java solaris-sparcv9 - ############################################################################ # jdk_sound diff --git a/test/sun/security/krb5/auto/BadKdc.java b/test/sun/security/krb5/auto/BadKdc.java index 1c10ccd69..d1ace1a41 100644 --- a/test/sun/security/krb5/auto/BadKdc.java +++ b/test/sun/security/krb5/auto/BadKdc.java @@ -39,7 +39,29 @@ public class BadKdc { // ^ kdc# ^ timeout static final Pattern re = Pattern.compile( ">>> KDCCommunication: kdc=kdc.rabbit.hole UDP:(\\d)...., " + - "timeout=(\\d)000,"); + "timeout=(\\d+),"); + + // Ratio for timeout values of all timeout tests. Not final so that + // each test can choose their own. + static float ratio = 2f; + + static void setRatio(float ratio) { + BadKdc.ratio = ratio; + } + + static float getRatio() { + return ratio; + } + + // Gets real timeout value. This method is called when writing krb5.conf + static int toReal(int from) { + return (int)(from * ratio + .5); + } + + // De-ratio a millisecond value to second + static int toSymbolicSec(int from) { + return (int)(from / ratio / 1000f + 0.5); + } /* * There are several cases this test fails: @@ -101,7 +123,7 @@ public class BadKdc { fw.write("[libdefaults]\n" + "default_realm = " + OneKDC.REALM + "\n" + - "kdc_timeout = 2000\n"); + "kdc_timeout = " + toReal(2000) + "\n"); fw.write("[realms]\n" + OneKDC.REALM + " = {\n" + "kdc = " + OneKDC.KDCHOST + ":" + p1 + "\n" + "kdc = " + OneKDC.KDCHOST + ":" + p2 + "\n" + @@ -184,7 +206,8 @@ public class BadKdc { Matcher m = re.matcher(line); if (m.find()) { System.out.println(line); - sb.append(m.group(1)).append(m.group(2)); + sb.append(m.group(1)) + .append(toSymbolicSec(Integer.parseInt(m.group(2)))); } } if (failed) sb.append('-'); diff --git a/test/sun/security/krb5/auto/BadKdc1.java b/test/sun/security/krb5/auto/BadKdc1.java index 7db7b8ad7..dd608939a 100644 --- a/test/sun/security/krb5/auto/BadKdc1.java +++ b/test/sun/security/krb5/auto/BadKdc1.java @@ -28,14 +28,21 @@ * @summary krb5 should not try to access unavailable kdc too often */ -import java.io.*; import java.security.Security; public class BadKdc1 { public static void main(String[] args) throws Exception { - Security.setProperty("krb5.kdc.bad.policy", "tryLess"); + + // 5 sec is default timeout for tryLess + if (BadKdc.getRatio() > 2.5) { + Security.setProperty("krb5.kdc.bad.policy", + "tryLess:1," + BadKdc.toReal(2000)); + } else { + Security.setProperty("krb5.kdc.bad.policy", "tryLess"); + } + BadKdc.go( "121212222222(32){1,2}1222(32){1,2}", // 1 2 // The above line means try kdc1 for 2 seconds then kdc1 diff --git a/test/sun/security/krb5/auto/BadKdc2.java b/test/sun/security/krb5/auto/BadKdc2.java index 756878452..4291d5c14 100644 --- a/test/sun/security/krb5/auto/BadKdc2.java +++ b/test/sun/security/krb5/auto/BadKdc2.java @@ -35,7 +35,12 @@ public class BadKdc2 { public static void main(String[] args) throws Exception { - Security.setProperty("krb5.kdc.bad.policy", "tryLess:2,1000"); + + // 1 sec is too short. + BadKdc.setRatio(3.0f); + + Security.setProperty( + "krb5.kdc.bad.policy", "tryLess:2," + BadKdc.toReal(1000)); BadKdc.go( "121212222222(32){1,2}11112121(32){1,2}", // 1 2 "11112121(32){1,2}11112121(32){1,2}", // 1 2 diff --git a/test/sun/security/krb5/auto/MaxRetries.java b/test/sun/security/krb5/auto/MaxRetries.java index 2e896bc5a..880c02333 100644 --- a/test/sun/security/krb5/auto/MaxRetries.java +++ b/test/sun/security/krb5/auto/MaxRetries.java @@ -60,7 +60,7 @@ public class MaxRetries { test1(5000, 2); // 2 2 // For tryLess - Security.setProperty("krb5.kdc.bad.policy", "tryless"); + Security.setProperty("krb5.kdc.bad.policy", "tryless:1," + BadKdc.toReal(5000)); rewriteMaxRetries(4); test1(4000, 7); // 1 1 1 1 2 1 2 test1(4000, 4); // 1 2 1 2 @@ -94,7 +94,7 @@ public class MaxRetries { * @param count the expected total try */ private static void test1(int timeout, int count) throws Exception { - String timeoutTag = "timeout=" + timeout; + String timeoutTag = "timeout=" + BadKdc.toReal(timeout); ByteArrayOutputStream bo = new ByteArrayOutputStream(); PrintStream oldout = System.out; System.setOut(new PrintStream(bo)); @@ -192,12 +192,12 @@ public class MaxRetries { if (s.startsWith("[realms]")) { // Reconfig global setting fw.write("max_retries = 2\n"); - fw.write("kdc_timeout = 5000\n"); + fw.write("kdc_timeout = " + BadKdc.toReal(5000) + "\n"); } else if (s.trim().startsWith("kdc = ")) { if (value != -1) { // Reconfig for realm fw.write(" max_retries = " + value + "\n"); - fw.write(" kdc_timeout = " + (value*1000) + "\n"); + fw.write(" kdc_timeout = " + BadKdc.toReal(value*1000) + "\n"); } // Add a bad KDC as the first candidate fw.write(" kdc = localhost:33333\n"); diff --git a/test/sun/security/krb5/auto/TcpTimeout.java b/test/sun/security/krb5/auto/TcpTimeout.java index 325d5bb35..45699fbe5 100644 --- a/test/sun/security/krb5/auto/TcpTimeout.java +++ b/test/sun/security/krb5/auto/TcpTimeout.java @@ -63,7 +63,7 @@ public class TcpTimeout { "udp_preference_limit = 1\n" + "max_retries = 2\n" + "default_realm = " + OneKDC.REALM + "\n" + - "kdc_timeout = 5000\n"); + "kdc_timeout = " + BadKdc.toReal(5000) + "\n"); fw.write("[realms]\n" + OneKDC.REALM + " = {\n" + "kdc = " + OneKDC.KDCHOST + ":" + p1 + "\n" + "kdc = " + OneKDC.KDCHOST + ":" + p2 + "\n" + -- GitLab