[rfc][icedtea-web] tests for hanging firefox
Adam Domurad
adomurad at redhat.com
Wed Feb 6 05:55:49 PST 2013
On 02/06/2013 06:38 AM, Jiri Vanek wrote:
> On 02/05/2013 06:32 PM, Adam Domurad wrote:
>> On 01/31/2013 08:29 AM, Jiri Vanek wrote:
>>> Following tests are testing now fixed, hanging of firefox after the
>>> LaunchExceeption.
>>> To achieve this I have missused AddShutDown test. It was one of the
>>> most stable test... So I'm
>>> looking forward how my changes will destabilize it :) (not expected!)
>>>
>>> 2013-01-31 Jiri Vanek <jvanek at redhat.com>
>>>
>>> Added test for hanging firefox by LaunchException and Improved
>>> AddShutdownHookTest
>>> *
>>> tests/reproducers/simple/AddShutdownHook/resources/AddShutdownHook.html:
>>>
>>> new file to launch applet with RuntimeException as result.
>>> *
>>> tests/reproducers/simple/AddShutdownHook/resources/AddShutdownHook_wrong.html:
>>> new file to launch applet with LaunchException as result.
>>> *
>>> tests/reproducers/simple/AddShutdownHook/srcs/AddShutdownHook.java: is
>>> now also applet.
>>> *
>>> tests/reproducers/simple/AddShutdownHook/testcases/AddShutdownHookTest.java:
>>> Added test (AddShutdownHookApplet)for applet, removed duplicate
>>> code by rules.
>>> *
>>> tests/reproducers/simple/AddShutdownHook/testcases/HangFirefoxTests.java:
>>> New test set which is launching exception throwing applet, and
>>> after exception
>>> is thrown then it tries jsut stdou-ing applet. Second applet
>>> have to be
>>> launched.
>>
>> Thanks very much for tackling the test! It seems to work well, when
>> firefox does hang.
>>
>> Some thoughts:
>> - Does the test fail for you before my fix ? I have to apply also my
>> 'pseudo-reproducer' to coax it
>> to hang.
>
> Nope :(( On my old f14 jdk6 it si hanging always, on my second
> 10.34.2.200 miraculous machine it is always passing.
>
>> - If this test ever does come up as a failure it will probably be
>> necessary to apply this patch to
>> properly diagnose it, as it seems it can pass/fail randomly.
>
> It it will START to fail then we will at least know when this
> happened. (well idea connected more to daily report then to anything
> else). Eg some of the freezing problems just occurred :/ And now after
> several month we have no idea when :(
> I hope this test can track it.
>>
>> Patch:
>>
>>> diff -r e631770d76ba
>>> tests/reproducers/simple/AddShutdownHook/resources/AddShutdownHook.html
>>> --- /dev/null Thu Jan 01 00:00:00 1970 +0000
>>> +++
>>> b/tests/reproducers/simple/AddShutdownHook/resources/AddShutdownHook.html
>>> Thu Jan 31 14:26:40
>>> 2013 +0100
>>> @@ -0,0 +1,42 @@
>>> +<!--
>>> +
>>> +This file is part of IcedTea.
>>> +
>>> +IcedTea is free software; you can redistribute it and/or modify
>>> +it under the terms of the GNU General Public License as published by
>>> +the Free Software Foundation; either version 2, or (at your option)
>>> +any later version.
>>> +
>>> +IcedTea 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 for more details.
>>> +
>>> +You should have received a copy of the GNU General Public License
>>> +along with IcedTea; see the file COPYING. If not, write to the
>>> +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
>>> Boston, MA
>>> +02110-1301 USA.
>>> +
>>> +Linking this library statically or dynamically with other modules is
>>> +making a combined work based on this library. Thus, the terms and
>>> +conditions of the GNU General Public License cover the whole
>>> +combination.
>>> +
>>> +As a special exception, the copyright holders of this library give you
>>> +permission to link this library with independent modules to produce an
>>> +executable, regardless of the license terms of these independent
>>> +modules, and to copy and distribute the resulting executable under
>>> +terms of your choice, provided that you also meet, for each linked
>>> +independent module, the terms and conditions of the license of that
>>> +module. An independent module is a module which is not derived from
>>> +or based on this library. If you modify this library, you may extend
>>> +this exception to your version of the library, but you are not
>>> +obligated to do so. If you do not wish to do so, delete this
>>> +exception statement from your version.
>>> +
>>> + -->
>>> +<html><head></head><body bgcolor="blue">
>>> +<p><applet code="AddShutdownHook.class"
>>> archive="AddShutdownHook.jar" codebase="." width="800"
>>> height="600">
>>> +</applet></p>
>>> +</body>
>>> +</html>
>>> \ No newline at end of file
>>> diff -r e631770d76ba
>>> tests/reproducers/simple/AddShutdownHook/resources/AddShutdownHook_wrong.html
>>> --- /dev/null Thu Jan 01 00:00:00 1970 +0000
>>> +++
>>> b/tests/reproducers/simple/AddShutdownHook/resources/AddShutdownHook_wrong.html
>>> Thu Jan 31
>>> 14:26:40 2013 +0100
>>> @@ -0,0 +1,42 @@
>>> +<!--
>>> +
>>> +This file is part of IcedTea.
>>> +
>>> +IcedTea is free software; you can redistribute it and/or modify
>>> +it under the terms of the GNU General Public License as published by
>>> +the Free Software Foundation; either version 2, or (at your option)
>>> +any later version.
>>> +
>>> +IcedTea 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 for more details.
>>> +
>>> +You should have received a copy of the GNU General Public License
>>> +along with IcedTea; see the file COPYING. If not, write to the
>>> +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
>>> Boston, MA
>>> +02110-1301 USA.
>>> +
>>> +Linking this library statically or dynamically with other modules is
>>> +making a combined work based on this library. Thus, the terms and
>>> +conditions of the GNU General Public License cover the whole
>>> +combination.
>>> +
>>> +As a special exception, the copyright holders of this library give you
>>> +permission to link this library with independent modules to produce an
>>> +executable, regardless of the license terms of these independent
>>> +modules, and to copy and distribute the resulting executable under
>>> +terms of your choice, provided that you also meet, for each linked
>>> +independent module, the terms and conditions of the license of that
>>> +module. An independent module is a module which is not derived from
>>> +or based on this library. If you modify this library, you may extend
>>> +this exception to your version of the library, but you are not
>>> +obligated to do so. If you do not wish to do so, delete this
>>> +exception statement from your version.
>>> +
>>> + -->
>>> +<html><head></head><body bgcolor="blue">
>>> +<p><applet code="NotExistingMain.class"
>>> archive="NotExisitngArchive.jar" codebase="." width="800"
>>> height="600">
>>
>> Nit: s/Exisitng/Existing/
>>
>>> +</applet></p>
>>> +</body>
>>> +</html>
>>> \ No newline at end of file
>>> diff -r e631770d76ba
>>> tests/reproducers/simple/AddShutdownHook/srcs/AddShutdownHook.java
>>> ---
>>> a/tests/reproducers/simple/AddShutdownHook/srcs/AddShutdownHook.java
>>> Thu Jan 31 11:12:35 2013
>>> +0100
>>> +++
>>> b/tests/reproducers/simple/AddShutdownHook/srcs/AddShutdownHook.java
>>> Thu Jan 31 14:26:40 2013
>>> +0100
>>> @@ -1,3 +1,6 @@
>>> +
>>> +import java.applet.Applet;
>>> +
>>> /* AddShutdownHook.java
>>> Copyright (C) 2011 Red Hat, Inc.
>>>
>>> @@ -35,7 +38,7 @@
>>> exception statement from your version.
>>> */
>>>
>>> -public class AddShutdownHook {
>>> +public class AddShutdownHook extends Applet {
>>> public static void main(String[] args) {
>>>
>>> Runtime.getRuntime().addShutdownHook(new Thread() {
>>> @@ -45,4 +48,11 @@
>>> });
>>>
>>> }
>>> +
>>> + @Override
>>> + public void start() {
>>> + main(null);
>>> + }
>>> +
>>> +
>>> }
>>> diff -r e631770d76ba
>>> tests/reproducers/simple/AddShutdownHook/testcases/AddShutdownHookTest.java
>>> ---
>>> a/tests/reproducers/simple/AddShutdownHook/testcases/AddShutdownHookTest.java
>>> Thu Jan 31
>>> 11:12:35 2013 +0100
>>> +++
>>> b/tests/reproducers/simple/AddShutdownHook/testcases/AddShutdownHookTest.java
>>> Thu Jan 31
>>> 14:26:40 2013 +0100
>>> @@ -1,58 +1,74 @@
>>> /* AddShutdownHookTest.java
>>> -Copyright (C) 2011 Red Hat, Inc.
>>> + Copyright (C) 2011 Red Hat, Inc.
>>>
>>> -This file is part of IcedTea.
>>> + This file is part of IcedTea.
>>>
>>> -IcedTea is free software; you can redistribute it and/or
>>> -modify it under the terms of the GNU General Public License as
>>> published by
>>> -the Free Software Foundation, version 2.
>>> + IcedTea is free software; you can redistribute it and/or
>>> + modify it under the terms of the GNU General Public License as
>>> published by
>>> + the Free Software Foundation, version 2.
>>>
>>> -IcedTea 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 for more details.
>>> + IcedTea 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 for more details.
>>>
>>> -You should have received a copy of the GNU General Public License
>>> -along with IcedTea; see the file COPYING. If not, write to
>>> -the Free Software Foundation, Inc., 51 Franklin Street, Fifth
>>> Floor, Boston, MA
>>> -02110-1301 USA.
>>> + You should have received a copy of the GNU General Public License
>>> + along with IcedTea; see the file COPYING. If not, write to
>>> + the Free Software Foundation, Inc., 51 Franklin Street, Fifth
>>> Floor, Boston, MA
>>> + 02110-1301 USA.
>>>
>>> -Linking this library statically or dynamically with other modules is
>>> -making a combined work based on this library. Thus, the terms and
>>> -conditions of the GNU General Public License cover the whole
>>> -combination.
>>> + Linking this library statically or dynamically with other modules is
>>> + making a combined work based on this library. Thus, the terms and
>>> + conditions of the GNU General Public License cover the whole
>>> + combination.
>>>
>>> -As a special exception, the copyright holders of this library give you
>>> -permission to link this library with independent modules to produce an
>>> -executable, regardless of the license terms of these independent
>>> -modules, and to copy and distribute the resulting executable under
>>> -terms of your choice, provided that you also meet, for each linked
>>> -independent module, the terms and conditions of the license of that
>>> -module. An independent module is a module which is not derived from
>>> -or based on this library. If you modify this library, you may extend
>>> -this exception to your version of the library, but you are not
>>> -obligated to do so. If you do not wish to do so, delete this
>>> -exception statement from your version.
>>> + As a special exception, the copyright holders of this library give
>>> you
>>> + permission to link this library with independent modules to
>>> produce an
>>> + executable, regardless of the license terms of these independent
>>> + modules, and to copy and distribute the resulting executable under
>>> + terms of your choice, provided that you also meet, for each linked
>>> + independent module, the terms and conditions of the license of that
>>> + module. An independent module is a module which is not derived from
>>> + or based on this library. If you modify this library, you may extend
>>> + this exception to your version of the library, but you are not
>>> + obligated to do so. If you do not wish to do so, delete this
>>> + exception statement from your version.
>>> */
>>>
>>> -import net.sourceforge.jnlp.ServerAccess;
>>> +import net.sourceforge.jnlp.ClosingListener;
>>> +import net.sourceforge.jnlp.ProcessResult;
>>> +import net.sourceforge.jnlp.annotations.TestInBrowsers;
>>> +import net.sourceforge.jnlp.browsertesting.BrowserTest;
>>> +import net.sourceforge.jnlp.browsertesting.Browsers;
>>> +import
>>> net.sourceforge.jnlp.closinglisteners.RulesFolowingClosingListener;
>>> +import
>>> net.sourceforge.jnlp.closinglisteners.StringMatchClosingListener;
>>> import org.junit.Assert;
>>>
>>> import org.junit.Test;
>>>
>>> -public class AddShutdownHookTest {
>>> +public class AddShutdownHookTest extends BrowserTest {
>>>
>>> - private static ServerAccess server = new ServerAccess();
>>> + public static final String s =
>>> "(?s).*java.security.AccessControlException.{0,5}access
>>> denied.{0,5}java.lang.RuntimePermission.{0,5}" + "shutdownHooks" +
>>> ".*";
>>> + public static final String cnfString = "ClassNotFoundException";
>>> + public static final RulesFolowingClosingListener.MatchesRule mr
>>> = new
>>> RulesFolowingClosingListener.MatchesRule(s);
>>> + public static final RulesFolowingClosingListener.ContainsRule
>>> cnf = new
>>> RulesFolowingClosingListener.ContainsRule(cnfString);
>>> + public static final RulesFolowingClosingListener rfc = new
>>> RulesFolowingClosingListener(mr);
>>>
>>> @Test
>>> public void AddShutdownHookTestLunch1() throws Exception {
>>> - ServerAccess.ProcessResult pr =
>>> server.executeJavawsHeadless(null, "/AddShutdownHook.jnlp");
>>> - String s =
>>> "(?s).*java.security.AccessControlException.{0,5}access
>>> denied.{0,5}java.lang.RuntimePermission.{0,5}" + "shutdownHooks" +
>>> ".*";
>>> - Assert.assertTrue("stderr should match "+s+" but
>>> didn't",pr.stderr.matches(s));
>>> - String cc="ClassNotFoundException";
>>> - Assert.assertFalse("stderr should NOT contains `"+cc+"`,
>>> but did",pr.stderr.contains(cc));
>>> - Assert.assertFalse("stdout length should be <=2, but was
>>> "+pr.stdout.length(),pr.stdout.length()>2);
>>> - Assert.assertFalse("AddShutdownHookTestLunch1 should not be
>>> terminated, but
>>> was",pr.wasTerminated);
>>> + ProcessResult pr = server.executeJavawsHeadless(null,
>>> "/AddShutdownHook.jnlp");
>>> + Assert.assertTrue("stderr " + mr.toPassingString(),
>>> mr.evaluate(pr.stderr));
>>> + Assert.assertFalse("stderr " + cnf.toFailingString(),
>>> cnf.evaluate(pr.stderr));
>>> + Assert.assertFalse("stdout length should be <=2, but was "
>>> + pr.stdout.length(),
>>> pr.stdout.length() > 2);
>>> + Assert.assertFalse("AddShutdownHookTestLunch1 should not be
>>> terminated, but was",
>>> pr.wasTerminated);
>>> Assert.assertEquals((Integer) 0, pr.returnValue);
>>> }
>>> +
>>> + @Test
>>> + @TestInBrowsers(testIn = Browsers.one)
>>> + public void AddShutdownHookApplet() throws Exception {
>>> + ProcessResult pr =
>>> server.executeBrowser("/AddShutdownHook.html", null, rfc);
>>> + Assert.assertTrue("stderr " + mr.toPassingString(),
>>> mr.evaluate(pr.stderr));
>>> + Assert.assertFalse("stderr " + cnf.toFailingString(),
>>> cnf.evaluate(pr.stderr));
>>> + }
>>> }
>>> diff -r e631770d76ba
>>> tests/reproducers/simple/AddShutdownHook/testcases/HangFirefoxTests.java
>>>
>>> --- /dev/null Thu Jan 01 00:00:00 1970 +0000
>>> +++
>>> b/tests/reproducers/simple/AddShutdownHook/testcases/HangFirefoxTests.java
>>> Thu Jan 31
>>> 14:26:40 2013 +0100
>>> @@ -0,0 +1,111 @@
>>> +/* AddShutdownHookTest.java
>>> + Copyright (C) 2011 Red Hat, Inc.
>>> +
>>> + This file is part of IcedTea.
>>> +
>>> + IcedTea is free software; you can redistribute it and/or
>>> + modify it under the terms of the GNU General Public License as
>>> published by
>>> + the Free Software Foundation, version 2.
>>> +
>>> + IcedTea 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 for more details.
>>> +
>>> + You should have received a copy of the GNU General Public License
>>> + along with IcedTea; see the file COPYING. If not, write to
>>> + the Free Software Foundation, Inc., 51 Franklin Street, Fifth
>>> Floor, Boston, MA
>>> + 02110-1301 USA.
>>> +
>>> + Linking this library statically or dynamically with other modules is
>>> + making a combined work based on this library. Thus, the terms and
>>> + conditions of the GNU General Public License cover the whole
>>> + combination.
>>> +
>>> + As a special exception, the copyright holders of this library give
>>> you
>>> + permission to link this library with independent modules to
>>> produce an
>>> + executable, regardless of the license terms of these independent
>>> + modules, and to copy and distribute the resulting executable under
>>> + terms of your choice, provided that you also meet, for each linked
>>> + independent module, the terms and conditions of the license of that
>>> + module. An independent module is a module which is not derived from
>>> + or based on this library. If you modify this library, you may extend
>>> + this exception to your version of the library, but you are not
>>> + obligated to do so. If you do not wish to do so, delete this
>>> + exception statement from your version.
>>> + */
>>> +
>>> +import net.sourceforge.jnlp.ProcessResult;
>>> +import net.sourceforge.jnlp.annotations.TestInBrowsers;
>>> +import net.sourceforge.jnlp.browsertesting.BrowserTest;
>>> +import net.sourceforge.jnlp.browsertesting.Browsers;
>>> +import net.sourceforge.jnlp.closinglisteners.CountingClosingListener;
>>> +import
>>> net.sourceforge.jnlp.closinglisteners.RulesFolowingClosingListener;
>>> +import org.junit.Assert;
>>> +
>>> +import org.junit.Test;
>>> +
>>> +public class HangFirefoxTests extends BrowserTest {
>>> +
>>> + String leString = "LaunchException";
>>> + ;
>>> + String startedString = "applet was started";
>>> + RulesFolowingClosingListener.ContainsRule leRule = new
>>> RulesFolowingClosingListener.ContainsRule(leString);
>>> + RulesFolowingClosingListener.ContainsRule appleStartedRule = new
>>> RulesFolowingClosingListener.ContainsRule(startedString);
>>> +
>>> + @Test
>>> + @TestInBrowsers(testIn = Browsers.firefox)
>>> + public void HangFirefoxWithRuntimeExceptionTests() throws
>>> Exception {
>>> + ProcessResult pr =
>>> server.executeBrowser("/AddShutdownHook.html", new
>>> RulesFolowingClosingListener(appleStartedRule), new
>>> CountingClosingListener() {
>>> + private boolean launched = false;
>>> +
>>> + @Override
>>> + protected boolean isAlowedToFinish(String content) {
>>
>> s/Alowed/Allowed/
>>
>>> + if (AddShutdownHookTest.mr.evaluate(content) &&
>>> !launched) {
>>> + launched = true;
>>> + try {
>>> + server.executeBrowser("/appletAutoTests2.html", null,
>>> (CountingClosingListener) null);
>>> + } catch (Exception ex) {
>>> + throw new RuntimeException(ex);
>>> + }
>>> + }
>>> + return false;
>>> + }
>>> + });
>>> + Assert.assertTrue("stderr " +
>>> AddShutdownHookTest.mr.toPassingString(),
>>> AddShutdownHookTest.mr.evaluate(pr.stderr));
>>> + Assert.assertTrue("stdout " +
>>> appleStartedRule.toPassingString(),
>>> appleStartedRule.evaluate(pr.stdout));
>>> + Assert.assertFalse("stderr " +
>>> AddShutdownHookTest.cnf.toFailingString(),
>>> AddShutdownHookTest.cnf.evaluate(pr.stderr));
>>> + }
>>> +
>>> + @Test
>>> + @TestInBrowsers(testIn = Browsers.firefox)
>>> + public void HangFirefoxWithLaunchException() throws Exception {
>>> + ProcessResult pr =
>>> server.executeBrowser("/AddShutdownHook_wrong.html", new
>>> RulesFolowingClosingListener(appleStartedRule), new
>>> CountingClosingListener() {
>>> + private boolean launched = false;
>>> +
>>> + @Override
>>> + protected boolean isAlowedToFinish(String content) {
>>
>> s/Alowed/Allowed/
>>
>>> + if (leRule.evaluate(content) && !launched) {
>>> + launched = true;
>>> + try {
>>> + server.executeBrowser("/appletAutoTests2.html", null,
>>> (CountingClosingListener) null);
>>> + } catch (Exception ex) {
>>> + throw new RuntimeException(ex);
>>> + }
>>> + }
>>> + return false;
>>> + }
>>> + });
>>> + Assert.assertTrue("stderr " + leRule.toPassingString(),
>>> leRule.evaluate(pr.stderr));
>>> + Assert.assertTrue("stdout " +
>>> appleStartedRule.toPassingString(),
>>> appleStartedRule.evaluate(pr.stdout));
>>> + Assert.assertFalse("stderr " +
>>> AddShutdownHookTest.cnf.toFailingString(),
>>> AddShutdownHookTest.cnf.evaluate(pr.stderr));
>>> + }
>>> +
>>> + @Test
>>> + @TestInBrowsers(testIn = Browsers.one)
>>> + public void TestAddShutdownHookWrong() throws Exception {
>>> + ProcessResult pr =
>>> server.executeBrowser("/AddShutdownHook_wrong.html", null, new
>>> RulesFolowingClosingListener(leRule));
>>> + Assert.assertTrue("stderr " + leRule.toPassingString(),
>>> leRule.evaluate(pr.stderr));
>>> + Assert.assertFalse("stderr " +
>>> AddShutdownHookTest.cnf.toFailingString(),
>>> AddShutdownHookTest.cnf.evaluate(pr.stderr));
>>> + }
>>> +}
>>
>
> Thanx for the nits, will be fixec.
>
>> Otherwise looks good for HEAD. Maybe add a comment somewhere in the
>> reproducer that says eg
>>
>> "If this test has failed, you may try the following to reproduce the
>> problem more consistently:
>> - private static final int MAX_WORKERS = MAX_PARALLEL_INITS * 4;
>> - private static final int PRIORITY_WORKERS = MAX_PARALLEL_INITS * 2;
>> + private static final int MAX_WORKERS = MAX_PARALLEL_INITS * 2;
>> + private static final int PRIORITY_WORKERS = MAX_PARALLEL_INITS * 1;
>> in PluginMessageConsumer.java"
>
> Great idea. Will do!
>
> Still ok to push?
Yes, please do.
-Adam
>>
>> -Adam
>
More information about the distro-pkg-dev
mailing list