changeset 465:270a09e38dfb

try to close browser before kill it
author Jiri Vanek <jvanek@redhat.com>
date Wed, 11 Jul 2012 16:19:27 +0200
parents 13ca1c870b92
children c9d0e375f07c
files ChangeLog tests/reproducers/signed/AppletTestSigned/testcases/AppletTestSignedTests.java tests/reproducers/simple/AppletTest/testcases/AppletTestTests.java tests/reproducers/simple/CheckServices/srcs/CheckServices.java tests/reproducers/simple/CheckServices/testcases/CheckServicesTests.java tests/test-extensions/net/sourceforge/jnlp/ProcessAssasin.java tests/test-extensions/net/sourceforge/jnlp/ServerAccess.java tests/test-extensions/net/sourceforge/jnlp/ThreadedProcess.java
diffstat 8 files changed, 92 insertions(+), 48 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Mon Jul 09 15:45:42 2012 -0400
+++ b/ChangeLog	Wed Jul 11 16:19:27 2012 +0200
@@ -1,3 +1,18 @@
+2012-07-11  Jiri Vanek  <jvanek@redhat.com>
+
+	try to close browser before kill it
+	* tests/reproducers/signed/AppletTestSigned/testcases/AppletTestSignedTests.java:
+	* tests/reproducers/simple/AppletTest/testcases/AppletTestTests.java:
+	* tests/reproducers/simple/CheckServices/testcases/CheckServicesTests.java
+	(evaluateSignedApplet) addapted to properly closed browser
+	* tests/reproducers/simple/CheckServices/srcs/CheckServices.java:
+	removed fixme section as it shuld work now	
+	* tests/test-extensions/net/sourceforge/jnlp/ProcessAssasin.java
+	(destroyProcess) new method, launching kill with SIGTERM before clasical
+	process.destroy()
+	* tests/test-extensions/net/sourceforge/jnlp/ServerAccess.java:
+	removed Set<Thread> terminated, should be removed long ago
+
 2012-07-09  Saad Mohammad  <smohammad@redhat.com>
 
 	* netx/net/sourceforge/jnlp/runtime/JNLPClassLoader.java (initializeExtensions):
--- a/tests/reproducers/signed/AppletTestSigned/testcases/AppletTestSignedTests.java	Mon Jul 09 15:45:42 2012 -0400
+++ b/tests/reproducers/signed/AppletTestSigned/testcases/AppletTestSignedTests.java	Wed Jul 11 16:19:27 2012 +0200
@@ -38,8 +38,8 @@
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
+import net.sourceforge.jnlp.ProcessResult;
 import net.sourceforge.jnlp.ServerAccess;
-import net.sourceforge.jnlp.ServerAccess.ProcessResult;
 import net.sourceforge.jnlp.browsertesting.BrowserTest;
 import net.sourceforge.jnlp.browsertesting.Browsers;
 import net.sourceforge.jnlp.annotations.TestInBrowsers;
@@ -53,13 +53,13 @@
 
     @Test
     public void AppletTestSignedTest() throws Exception {
-        ServerAccess.ProcessResult pr = server.executeJavawsHeadless(l, "/AppletTestSigned.jnlp");
-        evaluateSignedApplet(pr);
+        ProcessResult pr = server.executeJavawsHeadless(l, "/AppletTestSigned.jnlp");
+        evaluateSignedApplet(pr, true);
         Assert.assertFalse(pr.wasTerminated);
         Assert.assertEquals((Integer) 0, pr.returnValue);
     }
 
-    private void evaluateSignedApplet(ProcessResult pr) {
+    private void evaluateSignedApplet(ProcessResult pr, boolean javawsApplet) {
         String s3 = "AppletTestSigned was initialised";
         Assert.assertTrue("AppletTestSigned stdout should contain " + s3 + " but didn't", pr.stdout.contains(s3));
         String s0 = "AppletTestSigned was started";
@@ -68,14 +68,18 @@
         Assert.assertTrue("AppletTestSigned stdout should contain " + s1 + " but didn't", pr.stdout.contains(s1));
         String s2 = "value2";
         Assert.assertTrue("AppletTestSigned stdout should contain " + s2 + " but didn't", pr.stdout.contains(s2));
-        String s4 = "AppletTestSigned was stopped";
-        Assert.assertFalse("AppletTestSigned stdout shouldn't contain " + s4 + " but did", pr.stdout.contains(s4));
-        String s5 = "AppletTestSigned will be destroyed";
-        Assert.assertFalse("AppletTestSigned stdout shouldn't contain " + s5 + " but did", pr.stdout.contains(s5));
         String ss = "xception";
         Assert.assertFalse("AppletTestSigned stderr should not contain " + ss + " but did", pr.stderr.contains(ss));
         String s7 = "AppletTestSigned killing himself after 2000 ms of life";
         Assert.assertTrue("AppletTestSigned stdout should contain " + s7 + " but didn't", pr.stdout.contains(s7));
+        if (!javawsApplet) {
+            /*this is working correctly in most browser, but not in all. temporarily disabling
+            String s4 = "AppletTestSigned was stopped";
+            Assert.assertTrue("AppletTestSigned stdout shouldt contain " + s4 + " but did", pr.stdout.contains(s4));
+            String s5 = "AppletTestSigned will be destroyed";
+            Assert.assertTrue("AppletTestSigned stdout shouldt contain " + s5 + " but did", pr.stdout.contains(s5));
+             */
+        }
     }
 
     @Test
@@ -83,8 +87,8 @@
     public void AppletTestSignedFirefoxTest() throws Exception {
         ServerAccess.PROCESS_TIMEOUT = 30 * 1000;
         try {
-            ServerAccess.ProcessResult pr = server.executeBrowser("/AppletTestSigned.html");
-            evaluateSignedApplet(pr);
+            ProcessResult pr = server.executeBrowser("/AppletTestSigned.html");
+            evaluateSignedApplet(pr, false);
             Assert.assertTrue(pr.wasTerminated);
             //Assert.assertEquals((Integer) 0, pr.returnValue); due to destroy is null
         } finally {
--- a/tests/reproducers/simple/AppletTest/testcases/AppletTestTests.java	Mon Jul 09 15:45:42 2012 -0400
+++ b/tests/reproducers/simple/AppletTest/testcases/AppletTestTests.java	Wed Jul 11 16:19:27 2012 +0200
@@ -35,8 +35,8 @@
 exception statement from your version.
  */
 
+import net.sourceforge.jnlp.ProcessResult;
 import net.sourceforge.jnlp.ServerAccess;
-import net.sourceforge.jnlp.ServerAccess.ProcessResult;
 import net.sourceforge.jnlp.browsertesting.BrowserTest;
 import net.sourceforge.jnlp.browsertesting.Browsers;
 import net.sourceforge.jnlp.annotations.Bug;
@@ -52,11 +52,11 @@
     @TestInBrowsers(testIn = {Browsers.googleChrome})
     @NeedsDisplay
     public void doubleChrome() throws Exception {
-        server.PROCESS_TIMEOUT = 30 * 1000;
+        ServerAccess.PROCESS_TIMEOUT = 30 * 1000;
         try {
             //System.out.println("connecting AppletInFirefoxTest request in " + getBrowser().toString());
             //just verify loging is recording browser
-            ServerAccess.ProcessResult pr1 = server.executeBrowser("/appletAutoTests.html");
+            ProcessResult pr1 = server.executeBrowser("/appletAutoTests.html");
             if (pr1.process == null) {
                 Assert.assertTrue("If proces was null here, then google-chrome had to not exist, and so "
                         + ServerAccess.UNSET_BROWSER
@@ -65,28 +65,28 @@
                         pr1.deadlyException.getMessage().contains(ServerAccess.UNSET_BROWSER));
                 return;
             }
-            evaluateApplet(pr1);
+            evaluateApplet(pr1,false);
             Assert.assertTrue(pr1.wasTerminated);
             //System.out.println("connecting AppletInFirefoxTest request in " + getBrowser().toString());
             // just verify loging is recording browser
             ServerAccess.ProcessResult pr = server.executeBrowser("/appletAutoTests.html");
-            evaluateApplet(pr);
+            evaluateApplet(pr,false);
             Assert.assertTrue(pr.wasTerminated);
         } finally {
-            server.PROCESS_TIMEOUT = 20 * 1000; //back to normal
+            ServerAccess.PROCESS_TIMEOUT = 20 * 1000; //back to normal
         }
     }
 
     @Test
     @NeedsDisplay
     public void AppletTest() throws Exception {
-        ServerAccess.ProcessResult pr = server.executeJavawsHeadless(null, "/AppletTest.jnlp");
-        evaluateApplet(pr);
+        ProcessResult pr = server.executeJavawsHeadless(null, "/AppletTest.jnlp");
+        evaluateApplet(pr,true);
         Assert.assertFalse(pr.wasTerminated);
         Assert.assertEquals((Integer) 0, pr.returnValue);
     }
 
-    private void evaluateApplet(ProcessResult pr) {
+    private void evaluateApplet(ProcessResult pr, boolean javawsApplet) {
         String s3 = "applet was initialised";
         Assert.assertTrue("AppletTest stdout should contains " + s3 + " bud didn't", pr.stdout.contains(s3));
         String s0 = "applet was started";
@@ -95,14 +95,18 @@
         Assert.assertTrue("AppletTest stdout should contains " + s1 + " bud didn't", pr.stdout.contains(s1));
         String s2 = "value2";
         Assert.assertTrue("AppletTest stdout should contains " + s2 + " bud didn't", pr.stdout.contains(s2));
-        String s4 = "applet was stopped";
-        Assert.assertFalse("AppletTest stdout shouldn't contains " + s4 + " bud did", pr.stdout.contains(s4));
-        String s5 = "applet will be destroyed";
-        Assert.assertFalse("AppletTest stdout shouldn't contains " + s5 + " bud did", pr.stdout.contains(s5));
         String ss = "xception";
         Assert.assertFalse("AppletTest stderr should not contains " + ss + " but did", pr.stderr.contains(ss));
         String s7 = "Aplet killing himself after 2000 ms of life";
         Assert.assertTrue("AppletTest stdout should contains " + s7 + " bud didn't", pr.stdout.contains(s7));
+        if (!javawsApplet) {
+            /*this is working correctly in most browser, but not in all. temporarily disabling
+        String s4 = "applet was stopped";
+        Assert.assertTrue("AppletTest stdout should contains " + s4 + " bud did't", pr.stdout.contains(s4));
+        String s5 = "applet will be destroyed";
+        Assert.assertTrue("AppletTest stdout should contains " + s5 + " bud did't", pr.stdout.contains(s5));
+             */
+        }
     }
 
     @Test
@@ -113,8 +117,8 @@
         //just verify loging is recordingb rowser
         ServerAccess.PROCESS_TIMEOUT = 30 * 1000;
         try {
-            ServerAccess.ProcessResult pr = server.executeBrowser("/appletAutoTests2.html");
-            evaluateApplet(pr);
+            ProcessResult pr = server.executeBrowser("/appletAutoTests2.html");
+            evaluateApplet(pr,false);
             Assert.assertTrue(pr.wasTerminated);
             //Assert.assertEquals((Integer) 0, pr.returnValue); due to destroy is null
         } finally {
@@ -129,9 +133,9 @@
         //just verify loging is recording browser
         ServerAccess.PROCESS_TIMEOUT = 30 * 1000;
         try {
-            ServerAccess.ProcessResult pr = server.executeBrowser("/appletAutoTests.html");
+            ProcessResult pr = server.executeBrowser("/appletAutoTests.html");
             pr.process.destroy();
-            evaluateApplet(pr);
+            evaluateApplet(pr,false);
             Assert.assertTrue(pr.wasTerminated);
             //Assert.assertEquals((Integer) 0, pr.returnValue); due to destroy is null
         } finally {
--- a/tests/reproducers/simple/CheckServices/srcs/CheckServices.java	Mon Jul 09 15:45:42 2012 -0400
+++ b/tests/reproducers/simple/CheckServices/srcs/CheckServices.java	Wed Jul 11 16:19:27 2012 +0200
@@ -93,7 +93,7 @@
         killer.start(); 
     }
 
-    /* FIXME: Check ServiceManagaer is setup once stop/destroy can be called.
+   
     @Override
     public void stop() {
         System.out.println("Applet is stopping.");
@@ -105,5 +105,5 @@
         System.out.println("Applet is destorying itself.");
         checkSetup("destroy()"); 
     } 
-    */
+    
 }
--- a/tests/reproducers/simple/CheckServices/testcases/CheckServicesTests.java	Mon Jul 09 15:45:42 2012 -0400
+++ b/tests/reproducers/simple/CheckServices/testcases/CheckServicesTests.java	Wed Jul 11 16:19:27 2012 +0200
@@ -35,7 +35,7 @@
 exception statement from your version.
  */
 
-import net.sourceforge.jnlp.ServerAccess.ProcessResult;
+import net.sourceforge.jnlp.ProcessResult;
 import net.sourceforge.jnlp.annotations.Bug;
 import net.sourceforge.jnlp.annotations.NeedsDisplay;
 import net.sourceforge.jnlp.annotations.TestInBrowsers;
@@ -48,20 +48,21 @@
 @Bug(id="http://mail.openjdk.java.net/pipermail/distro-pkg-dev/2012-February/017153.html")
 public class CheckServicesTests extends BrowserTest{
 
-    public void evaluateApplet(ProcessResult pr) {
+    public void evaluateApplet(ProcessResult pr, boolean applet) {
         String s0 = "Codebase for applet was found in constructor";
         Assert.assertTrue("CheckServices stdout should contain `" + s0 + "' but didn't.", pr.stdout.contains(s0));
         String s1 = "Codebase for applet was found in init()";
         Assert.assertTrue("CheckServices stdout should contain `" + s1 + "' but didn't.", pr.stdout.contains(s1));
         String s2 = "Codebase for applet was found in start()";
         Assert.assertTrue("CheckServices stdout should contain `" + s2 + "' but didn't.", pr.stdout.contains(s2));
-        /* FIXME: Once the awt robot can close the applet window (i.e. send 
-         * a stop event), stdout should be checked for these asserts. 
+        if (applet){
+            /*this is working correctly in most browser, but not in all. temporarily disabling
         String s3 = "Codebase for applet was found in stop()";
         Assert.assertTrue("CheckServices stdout should contain `" + s3 + "' but didn't.", pr.stdout.contains(s3));
         String s4 = "Codebase for applet was found in destroy()";
         Assert.assertTrue("CheckServices stdout should contain `" + s4 + "' but didn't.", pr.stdout.contains(s4));
-        */
+             */
+        }
         String s5 = "Exception occurred with null codebase in";
         Assert.assertFalse("CheckServices stderr should not contain `" + s5 + "' but did.", pr.stdout.contains(s5));
         String s6 = "Applet killing itself after 2000 ms of life";
@@ -72,7 +73,7 @@
     @NeedsDisplay
     public void CheckWebstartServices() throws Exception {
         ProcessResult pr = server.executeJavaws(null, "/CheckServices.jnlp");
-        evaluateApplet(pr);
+        evaluateApplet(pr, false);
         Assert.assertFalse(pr.wasTerminated);
         Assert.assertEquals((Integer)0, pr.returnValue);
     }
@@ -82,7 +83,7 @@
     @TestInBrowsers(testIn={Browsers.one})
     public void CheckPluginJNLPHServices() throws Exception {
         ProcessResult pr = server.executeBrowser(null, "/CheckPluginServices.html");
-        evaluateApplet(pr);
+        evaluateApplet(pr,false);
         Assert.assertTrue(pr.wasTerminated);
     }
 }
--- a/tests/test-extensions/net/sourceforge/jnlp/ProcessAssasin.java	Mon Jul 09 15:45:42 2012 -0400
+++ b/tests/test-extensions/net/sourceforge/jnlp/ProcessAssasin.java	Wed Jul 11 16:19:27 2012 +0200
@@ -34,8 +34,11 @@
 obligated to do so.  If you do not wish to do so, delete this
 exception statement from your version.
  */
+package net.sourceforge.jnlp;
 
-package net.sourceforge.jnlp;
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * class which timeout any ThreadedProcess. This killing of 'thread with process' replaced not working process.destroy().
@@ -112,14 +115,10 @@
                                 ServerAccess.logErrorReprint("Timed out " + p.toString() + " " + "null  .. killing " + p.getCommandLine() + ": ");
                             }
                             wasTerminated = true;
-                            p.interrupt();
-                            while (!ServerAccess.terminated.contains(p)) {
-                                Thread.sleep(100);
-                            }
                             if (p.getP() != null) {
                                 try {
                                     if (!skipInstedOfDesroy) {
-                                        p.getP().destroy();
+                                        destroyProcess(p);
                                     }
                                 } catch (Throwable ex) {
                                     if (p.deadlyException == null) {
@@ -128,6 +127,10 @@
                                     ex.printStackTrace();
                                 }
                             }
+                            p.interrupt();
+//                            while (!ServerAccess.terminated.contains(p)) {
+//                                Thread.sleep(100);
+//                            }
                             if (p.getP() != null) {
                                 ServerAccess.logErrorReprint("Timed out " + p.toString() + " " + p.getP().toString() + " .. killed " + p.getCommandLine());
                             } else {
@@ -156,4 +159,25 @@
             ServerAccess.logNoReprint("assassin for non existing job  termination " + wasTerminated);
         }
     }
+
+    public static void destroyProcess(ThreadedProcess pp) {
+        Process p = pp.getP();
+        try {
+            Field f = p.getClass().getDeclaredField("pid");
+            f.setAccessible(true);
+            String pid = (f.get(p)).toString();
+            List<String> ll=new ArrayList<String>(4);
+            ll.add("kill");
+            ll.add("-s");
+            ll.add("SIGTERM");
+            ll.add(pid);
+            ServerAccess.executeProcess(ll);//sync, but  acctually release
+            //before affected application close
+            Thread.sleep(1000);
+        } catch (Exception ex) {
+            ServerAccess.logException(ex);
+        } finally {
+            p.destroy();
+        }
+    }
 }
--- a/tests/test-extensions/net/sourceforge/jnlp/ServerAccess.java	Mon Jul 09 15:45:42 2012 -0400
+++ b/tests/test-extensions/net/sourceforge/jnlp/ServerAccess.java	Wed Jul 11 16:19:27 2012 +0200
@@ -111,10 +111,6 @@
      */
     public static long PROCESS_TIMEOUT = 20 * 1000;//ms
     /**
-     * all terminated processes are stored here. As wee need to 'wait' to termination to be finished.
-     */
-    static Set<Thread> terminated = new HashSet<Thread>();
-    /**
      * this flag is indicating whether output of executeProcess should be logged. By default true.
      */
     public static boolean PROCESS_LOG = true;
--- a/tests/test-extensions/net/sourceforge/jnlp/ThreadedProcess.java	Mon Jul 09 15:45:42 2012 -0400
+++ b/tests/test-extensions/net/sourceforge/jnlp/ThreadedProcess.java	Wed Jul 11 16:19:27 2012 +0200
@@ -125,10 +125,10 @@
                 //add to the set of terminated threaded processes
                 deadlyException = ex;
                 ServerAccess.logException(deadlyException, false);
-                ServerAccess.terminated.add(this);
+                //ServerAccess.terminated.add(this);
             } else {
                 //happens when non-existing process is launched, is causing p null!
-                ServerAccess.terminated.add(this);
+                //ServerAccess.terminated.add(this);
                 deadlyException = ex;
                 ServerAccess.logException(deadlyException, false);
                 throw new RuntimeException(ex);