changeset 6959:9c978bb7718b

7176574: sun/security/krb5/auto/TcpTimeout.java failed with solaris-i586 Reviewed-by: xuelei
author weijun
date Wed, 05 Mar 2014 09:43:15 +0800
parents 4f22a749cb7e
children 85fabd06eb58
files test/sun/security/krb5/auto/TcpTimeout.java
diffstat 1 files changed, 55 insertions(+), 86 deletions(-) [+]
line wrap: on
line diff
--- a/test/sun/security/krb5/auto/TcpTimeout.java	Tue Mar 04 01:36:39 2014 +0000
+++ b/test/sun/security/krb5/auto/TcpTimeout.java	Wed Mar 05 09:43:15 2014 +0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 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
@@ -24,7 +24,8 @@
 /*
  * @test
  * @bug 6952519
- * @run main/timeout=40/othervm TcpTimeout
+ * @compile -XDignore.symbol.file TcpTimeout.java
+ * @run main/othervm TcpTimeout
  * @summary kdc_timeout is not being honoured when using TCP
  */
 
@@ -36,103 +37,71 @@
     public static void main(String[] args)
             throws Exception {
 
+        // Set debug to grab debug output like ">>> KDCCommunication"
         System.setProperty("sun.security.krb5.debug", "true");
-        final int p1 = 10000 + new java.util.Random().nextInt(10000);
-        final int p2 = 20000 + new java.util.Random().nextInt(10000);
-        final int p3 = 30000 + new java.util.Random().nextInt(10000);
 
-        KDC k = new KDC(OneKDC.REALM, OneKDC.KDCHOST, p3, true);
+        // Called before new ServerSocket on p1 and p2 to make sure
+        // customized nameservice is used
+        KDC k = new KDC(OneKDC.REALM, OneKDC.KDCHOST, 0, true);
+        int p3 = k.getPort();
         k.addPrincipal(OneKDC.USER, OneKDC.PASS);
         k.addPrincipalRandKey("krbtgt/" + OneKDC.REALM);
 
         // Start two listener that does not communicate, simulate timeout
-        new Thread() {
-            public void run() {
-                try {
-                    new ServerSocket(p1).accept();
-                } catch (Exception e) {
-                }}
-        }.start();
-        new Thread() {
-            public void run() {
-                try {
-                    new ServerSocket(p2).accept();
-                } catch (Exception e) {
-                }}
-        }.start();
+        ServerSocket ss1 = null;
+        ServerSocket ss2 = null;
 
-        FileWriter fw = new FileWriter("alternative-krb5.conf");
+        try {
+            ss1 = new ServerSocket(0);
+            ss2 = new ServerSocket(0);
+            int p1 = ss1.getLocalPort();
+            int p2 = ss2.getLocalPort();
 
-        fw.write("[libdefaults]\n" +
-                "udp_preference_limit = 1\n" +
-                "max_retries = 2\n" +
-                "default_realm = " + OneKDC.REALM + "\n" +
-                "kdc_timeout = 5000\n");
-        fw.write("[realms]\n" + OneKDC.REALM + " = {\n" +
-                "kdc = " + OneKDC.KDCHOST + ":" + p1 + "\n" +
-                "kdc = " + OneKDC.KDCHOST + ":" + p2 + "\n" +
-                "kdc = " + OneKDC.KDCHOST + ":" + p3 + "\n" +
-                "}\n");
+            FileWriter fw = new FileWriter("alternative-krb5.conf");
 
-        fw.close();
-        System.setProperty("java.security.krb5.conf", "alternative-krb5.conf");
-        Config.refresh();
+            fw.write("[libdefaults]\n" +
+                    "udp_preference_limit = 1\n" +
+                    "max_retries = 2\n" +
+                    "default_realm = " + OneKDC.REALM + "\n" +
+                    "kdc_timeout = 5000\n");
+            fw.write("[realms]\n" + OneKDC.REALM + " = {\n" +
+                    "kdc = " + OneKDC.KDCHOST + ":" + p1 + "\n" +
+                    "kdc = " + OneKDC.KDCHOST + ":" + p2 + "\n" +
+                    "kdc = " + OneKDC.KDCHOST + ":" + p3 + "\n" +
+                    "}\n");
 
-        // The correct behavior should be:
-        // 5 sec on p1, 5 sec on p1, fail
-        // 5 sec on p2, 5 sec on p2, fail
-        // p3 ok, p3 ok again for preauth.
-        // The total time should be 20sec + 2x. x is processing time for AS-REQ.
-        int count = 6;
-        long start = System.nanoTime();
+            fw.close();
+            System.setProperty("java.security.krb5.conf",
+                    "alternative-krb5.conf");
+            Config.refresh();
 
-        ByteArrayOutputStream bo = new ByteArrayOutputStream();
-        PrintStream oldout = System.out;
-        System.setOut(new PrintStream(bo));
-        Context c = Context.fromUserPass(OneKDC.USER, OneKDC.PASS, false);
-        System.setOut(oldout);
+            System.out.println("Ports opened on " + p1 + ", " + p2 + ", " + p3);
 
-        String[] lines = new String(bo.toByteArray()).split("\n");
-        for (String line: lines) {
-            if (line.startsWith(">>> KDCCommunication")) {
-                System.out.println(line);
-                count--;
+            // The correct behavior should be:
+            // 5 sec on p1, 5 sec on p1, fail
+            // 5 sec on p2, 5 sec on p2, fail
+            // p3 ok, p3 ok again for preauth.
+            int count = 6;
+
+            ByteArrayOutputStream bo = new ByteArrayOutputStream();
+            PrintStream oldout = System.out;
+            System.setOut(new PrintStream(bo));
+            Context c = Context.fromUserPass(OneKDC.USER, OneKDC.PASS, false);
+            System.setOut(oldout);
+
+            String[] lines = new String(bo.toByteArray()).split("\n");
+            for (String line: lines) {
+                if (line.startsWith(">>> KDCCommunication")) {
+                    System.out.println(line);
+                    count--;
+                }
             }
-        }
-        if (count != 0) {
-            throw new Exception("Retry count is " + count + " less");
-        }
-
-        long end = System.nanoTime();
-        if ((end - start)/1000000000L < 20) {
-            throw new Exception("Too fast? " + (end - start)/1000000000L);
+            if (count != 0) {
+                throw new Exception("Retry count is " + count + " less");
+            }
+        } finally {
+            if (ss1 != null) ss1.close();
+            if (ss2 != null) ss2.close();
         }
     }
-
-    private static KDC on(int p) throws Exception {
-        KDC k = new KDC(OneKDC.REALM, OneKDC.KDCHOST, p, true);
-        k.addPrincipal(OneKDC.USER, OneKDC.PASS);
-        k.addPrincipalRandKey("krbtgt/" + OneKDC.REALM);
-        return k;
-    }
-
-    private static void addFakeKDCs()
-            throws Exception {
-        BufferedReader fr = new BufferedReader(new FileReader(OneKDC.KRB5_CONF));
-        FileWriter fw = new FileWriter("alternative-krb5.conf");
-        while (true) {
-            String s = fr.readLine();
-            if (s == null) {
-                break;
-            }
-            if (s.trim().startsWith("kdc = ")) {
-                fw.write("    kdc = localhost:33333\n");
-                fw.write("    kdc = localhost:22222\n");
-            }
-            fw.write(s + "\n");
-        }
-        fr.close();
-        fw.close();
-        sun.security.krb5.Config.refresh();
-    }
 }