/hg/icedtea-web: try to close browser before kill it
jvanek at icedtea.classpath.org
jvanek at icedtea.classpath.org
Wed Jul 11 07:18:30 PDT 2012
changeset 01544fb82384 in /hg/icedtea-web
details: http://icedtea.classpath.org/hg/icedtea-web?cmd=changeset;node=01544fb82384
author: Jiri Vanek <jvanek at redhat.com>
date: Wed Jul 11 16:18:58 2012 +0200
try to close browser before kill it
diffstat:
ChangeLog | 15 +++
tests/reproducers/signed/AppletTestSigned/testcases/AppletTestSignedTests.java | 24 +++--
tests/reproducers/simple/AppletTest/testcases/AppletTestTests.java | 38 +++++----
tests/reproducers/simple/CheckServices/srcs/CheckServices.java | 4 +-
tests/reproducers/simple/CheckServices/testcases/CheckServicesTests.java | 15 ++-
tests/test-extensions/net/sourceforge/jnlp/ProcessAssasin.java | 36 +++++++-
tests/test-extensions/net/sourceforge/jnlp/ServerAccess.java | 4 -
tests/test-extensions/net/sourceforge/jnlp/ThreadedProcess.java | 4 +-
8 files changed, 92 insertions(+), 48 deletions(-)
diffs (368 lines):
diff -r 1ced587420b8 -r 01544fb82384 ChangeLog
--- a/ChangeLog Tue Jul 10 10:41:17 2012 -0400
+++ b/ChangeLog Wed Jul 11 16:18:58 2012 +0200
@@ -1,3 +1,18 @@
+2012-07-11 Jiri Vanek <jvanek at 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-10 Adam Domurad <adomurad at redhat.com>
Refactor JNLPFile#launchType into its own interface type (as opposed to
diff -r 1ced587420b8 -r 01544fb82384 tests/reproducers/signed/AppletTestSigned/testcases/AppletTestSignedTests.java
--- a/tests/reproducers/signed/AppletTestSigned/testcases/AppletTestSignedTests.java Tue Jul 10 10:41:17 2012 -0400
+++ b/tests/reproducers/signed/AppletTestSigned/testcases/AppletTestSignedTests.java Wed Jul 11 16:18:58 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 {
diff -r 1ced587420b8 -r 01544fb82384 tests/reproducers/simple/AppletTest/testcases/AppletTestTests.java
--- a/tests/reproducers/simple/AppletTest/testcases/AppletTestTests.java Tue Jul 10 10:41:17 2012 -0400
+++ b/tests/reproducers/simple/AppletTest/testcases/AppletTestTests.java Wed Jul 11 16:18:58 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 {
diff -r 1ced587420b8 -r 01544fb82384 tests/reproducers/simple/CheckServices/srcs/CheckServices.java
--- a/tests/reproducers/simple/CheckServices/srcs/CheckServices.java Tue Jul 10 10:41:17 2012 -0400
+++ b/tests/reproducers/simple/CheckServices/srcs/CheckServices.java Wed Jul 11 16:18:58 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()");
}
- */
+
}
diff -r 1ced587420b8 -r 01544fb82384 tests/reproducers/simple/CheckServices/testcases/CheckServicesTests.java
--- a/tests/reproducers/simple/CheckServices/testcases/CheckServicesTests.java Tue Jul 10 10:41:17 2012 -0400
+++ b/tests/reproducers/simple/CheckServices/testcases/CheckServicesTests.java Wed Jul 11 16:18:58 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);
}
}
diff -r 1ced587420b8 -r 01544fb82384 tests/test-extensions/net/sourceforge/jnlp/ProcessAssasin.java
--- a/tests/test-extensions/net/sourceforge/jnlp/ProcessAssasin.java Tue Jul 10 10:41:17 2012 -0400
+++ b/tests/test-extensions/net/sourceforge/jnlp/ProcessAssasin.java Wed Jul 11 16:18:58 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();
+ }
+ }
}
diff -r 1ced587420b8 -r 01544fb82384 tests/test-extensions/net/sourceforge/jnlp/ServerAccess.java
--- a/tests/test-extensions/net/sourceforge/jnlp/ServerAccess.java Tue Jul 10 10:41:17 2012 -0400
+++ b/tests/test-extensions/net/sourceforge/jnlp/ServerAccess.java Wed Jul 11 16:18:58 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;
diff -r 1ced587420b8 -r 01544fb82384 tests/test-extensions/net/sourceforge/jnlp/ThreadedProcess.java
--- a/tests/test-extensions/net/sourceforge/jnlp/ThreadedProcess.java Tue Jul 10 10:41:17 2012 -0400
+++ b/tests/test-extensions/net/sourceforge/jnlp/ThreadedProcess.java Wed Jul 11 16:18:58 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);
More information about the distro-pkg-dev
mailing list