aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog28
-rw-r--r--netx/net/sourceforge/jnlp/cache/CacheLRUWrapper.java12
-rw-r--r--netx/net/sourceforge/jnlp/cache/CacheUtil.java39
-rw-r--r--netx/net/sourceforge/jnlp/cache/LruCacheException.java52
-rw-r--r--netx/net/sourceforge/jnlp/resources/Messages.properties259
-rw-r--r--netx/net/sourceforge/jnlp/util/PropertiesFile.java1
-rw-r--r--tests/jnlp_tests/signed/CacheReproducer/resources/CacheReproducer1.jnlp16
-rw-r--r--tests/jnlp_tests/signed/CacheReproducer/resources/CacheReproducer1_1.jnlp16
-rw-r--r--tests/jnlp_tests/signed/CacheReproducer/resources/CacheReproducer2.jnlp16
-rw-r--r--tests/jnlp_tests/signed/CacheReproducer/resources/CacheReproducer2_1.jnlp16
-rw-r--r--tests/jnlp_tests/signed/CacheReproducer/srcs/CacheReproducer.java47
-rw-r--r--tests/jnlp_tests/signed/CacheReproducer/testcases/CacheReproducerTest.java427
-rw-r--r--tests/jnlp_tests/signed/SimpletestSigned1/resources/SimpletestSigned1.jnlp53
-rw-r--r--tests/jnlp_tests/signed/SimpletestSigned1/srcs/SimpletestSigned1.java43
-rw-r--r--tests/netx/jnlp_testsengine/net/sourceforge/jnlp/ServerAccess.java2
15 files changed, 892 insertions, 135 deletions
diff --git a/ChangeLog b/ChangeLog
index ae6b1c4..bb30e13 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,31 @@
+2012-01-24 Jiri Vanek<[email protected]>
+
+ Fix for PR844
+ * netx/net/sourceforge/jnlp/cache/CacheLRUWrapper.java: (getLRUSortedEntries)
+ instead of error throwing own LRU exception. Also catches more then
+ NumberFormatException
+ (clearLRUSortedEntries) new method - making soft clearing of cache public
+ (clearCache) now return true if cache was cleared, false otherwise
+ (or exception)
+ * netx/net/sourceforge/jnlp/cache/CacheUtil.java: (getCacheFileIfExist)
+ does three tires to load cache. If ifrst fails, then recently_used file
+ is emptied both in memory and on disc. When second attemmpt fails, then
+ LRU cache is forcibly cleared. if clearing fails, then error is thrown.
+ If it pass, then one more try to load entries is allowed. When third
+ attempt fails, then error is thrown.
+ * /netx/net/sourceforge/jnlp/cache/LruCacheException.java:
+ new file, for purpose of catching this particular exception
+ * netx/net/sourceforge/jnlp/util/PropertiesFile.java: (store) tries to
+ mkdirs to its path. It is better then to fail when no cache directory exists.
+ * tests/jnlp_tests/signed/CacheReproducer: new reproducr trying severals
+ way of corupted cache on several types of jnlp files. Is signed because
+ of reflection used.
+ * tests/jnlp_tests/signed/SimpletestSigned1: signed hello world to be
+ used in CacheReproducer tests.
+ * tests/netx/jnlp_testsengine/net/sourceforge/jnlp/ServerAccess.java:
+ timeout for processes doubled, as clear cache methods sometimes took
+ more then original allowed.
+
2012-01-27 Deepak Bhole <[email protected]>
PR852: Classloader not being flushed after last applet from a site is closed
diff --git a/netx/net/sourceforge/jnlp/cache/CacheLRUWrapper.java b/netx/net/sourceforge/jnlp/cache/CacheLRUWrapper.java
index 59ab00d..e148bd3 100644
--- a/netx/net/sourceforge/jnlp/cache/CacheLRUWrapper.java
+++ b/netx/net/sourceforge/jnlp/cache/CacheLRUWrapper.java
@@ -36,6 +36,8 @@ exception statement from your version.
*/
package net.sourceforge.jnlp.cache;
+import static net.sourceforge.jnlp.runtime.Translator.R;
+
import java.io.File;
import java.io.IOException;
import java.nio.channels.FileLock;
@@ -178,10 +180,8 @@ enum CacheLRUWrapper {
int c = t1.compareTo(t2);
return c < 0 ? 1 : (c > 0 ? -1 : 0);
- } catch (NumberFormatException e) {
- // Perhaps an error is too harsh. Maybe just somehow turn
- // caching off if this is the case.
- throw new InternalError("Corrupt LRU file entries");
+ } catch (Exception e) {
+ throw new LruCacheException(R("Corrupt LRU file entries"));
}
}
});
@@ -249,4 +249,8 @@ enum CacheLRUWrapper {
public String generateKey(String path) {
return System.currentTimeMillis() + "," + getIdForCacheFolder(path);
}
+
+ void clearLRUSortedEntries() {
+ cacheOrder.clear();
+ }
}
diff --git a/netx/net/sourceforge/jnlp/cache/CacheUtil.java b/netx/net/sourceforge/jnlp/cache/CacheUtil.java
index b88c6e9..320b0f2 100644
--- a/netx/net/sourceforge/jnlp/cache/CacheUtil.java
+++ b/netx/net/sourceforge/jnlp/cache/CacheUtil.java
@@ -144,16 +144,16 @@ public class CacheUtil {
* process is using them can be quite disasterous. Hence why Launcher creates lock files
* and we check for those by calling {@link #okToClearCache()}
*/
- public static void clearCache() {
+ public static boolean clearCache() {
if (!okToClearCache()) {
System.err.println(R("CCannotClearCache"));
- return;
+ return false;
}
File cacheDir = new File(CacheUtil.cacheDir);
if (!(cacheDir.isDirectory())) {
- return;
+ return false;
}
if (JNLPRuntime.isDebug()) {
@@ -165,6 +165,7 @@ public class CacheUtil {
} catch (IOException e) {
throw new RuntimeException(e);
}
+ return true;
}
/**
@@ -322,7 +323,37 @@ public class CacheUtil {
private static File getCacheFileIfExist(File urlPath) {
synchronized (lruHandler) {
File cacheFile = null;
- List<Entry<String, String>> entries = lruHandler.getLRUSortedEntries();
+ int tries = 0;
+ List<Entry<String, String>> entries = null;
+ do {
+ try {
+ tries++;
+ entries = lruHandler.getLRUSortedEntries();
+ } catch (LruCacheException ex) {
+ if (tries == 1) {
+ ex.printStackTrace();
+ System.out.println(R("CFakeCache"));
+ lruHandler.clearLRUSortedEntries();
+ lruHandler.store();
+ System.out.println(R("CFakedCache"));
+ } else if (tries == 2) {
+ ex.printStackTrace();
+ System.out.println(R("CStillCorupted"));
+ boolean clearingresult = CacheUtil.clearCache();
+ if (!clearingresult) {
+ throw new InternalError(R("CCleaningUnsuccessful"));
+ }
+ System.out.println(R("CClearedReloading"));
+ lruHandler.clearLRUSortedEntries();
+ lruHandler.store();
+ System.out.println(R("CReloadRestarting"));
+
+ } else {
+ throw new InternalError(R("CStillBroken"));
+ }
+
+ }
+ } while (entries == null);
// Start searching from the most recent to least recent.
for (Entry<String, String> e : entries) {
final String key = e.getKey();
diff --git a/netx/net/sourceforge/jnlp/cache/LruCacheException.java b/netx/net/sourceforge/jnlp/cache/LruCacheException.java
new file mode 100644
index 0000000..9589b06
--- /dev/null
+++ b/netx/net/sourceforge/jnlp/cache/LruCacheException.java
@@ -0,0 +1,52 @@
+/* LruCacheException.java -- Thrown when cache is corrupted.
+Copyright (C) 2012 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.
+ */
+package net.sourceforge.jnlp.cache;
+
+class LruCacheException extends RuntimeException {
+
+ public LruCacheException() {
+ super();
+ }
+
+ public LruCacheException(String string) {
+ super(string);
+ }
+
+ public LruCacheException(Throwable cause) {
+ super(cause);
+ }
+}
diff --git a/netx/net/sourceforge/jnlp/resources/Messages.properties b/netx/net/sourceforge/jnlp/resources/Messages.properties
index a08331d..f1187e5 100644
--- a/netx/net/sourceforge/jnlp/resources/Messages.properties
+++ b/netx/net/sourceforge/jnlp/resources/Messages.properties
@@ -190,6 +190,13 @@ CChooseCache=Choose a cache directory...
CChooseCacheInfo=Netx needs a location for storing cache files.
CChooseCacheDir=Cache directory
CCannotClearCache=Can not clear cache at this time
+CFakeCache=Cache is corrupt. Disabling.
+CFakedCache=Cache is corrupt and has been disabled. It is strongly recommended that you run 'javaws -Xclearcache' and rerun your application as soon as possible.
+CStillCorupted=Cache is still corrupt, clearing it.
+CCleaningUnsuccessful=Unable to clear cache due to running javaws instance. Please try to shut down all instances of javaws, run 'javaws -Xclearcache', and rerun your jnlp file
+CClearedReloading=Cache cleared, re-loading.
+CReloadRestarting=Cache re-loaded and application re-starting. It is strongly recommended that you run 'javaws -Xclearcache' and re-run your application as soon as possible.
+CStillBroken=Unable to fix corrupt cache. Please shutdown all javaws instances, run 'javaws -Xclearcache', and re-start your application.
# Security
SFileReadAccess=The application has requested read access to {0}. Do you want to allow this action?
@@ -205,7 +212,7 @@ SClipboardWriteAccess=The application has requested write-only access to the sys
SPrinterAccess=The application has requested printer access. Do you want to allow this action?
SNetworkAccess=The application has requested permission to establish connections to {0}. Do you want to allow this action?
SNoAssociatedCertificate=<no associated certificate>
-SUnverified=(unverified)
+SUnverified=(unverified)
SAlwaysTrustPublisher=Always trust content from this publisher
SHttpsUnverified=The website's certificate cannot be verified.
SNotAllSignedSummary=Only parts of this application code are signed.
@@ -266,7 +273,7 @@ KSClientCerts=Client Authentication Certificates
# Deployment Configuration messages
DCIncorrectValue=Property "{0}" has incorrect value "{1}". Possible values {2}.
DCInternal=Internal error: {0}
-DCSourceInternal=<internal>
+DCSourceInternal=<internal>
DCUnknownSettingWithName=Property "{0}" is unknown.
# Value Validator messages. Messages should follow "Possible values ..."
@@ -279,124 +286,124 @@ VVPossibleUrlValues=include any valid url (eg http://icedtea.classpath.org/hg/)
# Control Panel - Main
CPMainDescriptionShort=Configure IcedTea-Web
CPMainDescriptionLong=Configure how the browser plugin (IcedTeaNPPlugin) and javaws (NetX) work
-
-# Control Panel - Tab Descriptions
-CPAboutDescription=View version information about Icedtea Control Panel.
-CPNetworkSettingsDescription=Configure network settings, including how IcedTea-Web connects to the internet and whether to use any proxies.
-CPTempInternetFilesDescription=Java stores application data for faster execution the next time you run it.
-CPJRESettingsDescription=View and manage Java Runtime Environment versions and settings for Java applications and applets.
-CPCertificatesDescription=Use certificates to positively identify yourself, certifications, authorities, and plublishers.
-CPSecurityDescription=Use this to configure security settings.
-CPDebuggingDescription=Enable options here to help with debugging
-CPDesktopIntegrationDescription=Set whether or not to allow creation of desktop shortcut.
-
-# Control Panel - Buttons
-CPButAbout=About...
-CPButNetworkSettings=Network Settings...
-CPButSettings=Settings...
-CPButView=View...
-CPButCertificates=Certificates...
-
-# Control Panel - Headers
-CPHead=IcedTea Web Control Panel
-CPHeadAbout=About
-CPHeadNetworkSettings=Network Proxy Settings
-CPHeadTempInternetFiles=Temporary Internet Files
-CPHeadJRESettings=Java Runtime Environment Settings
-CPHeadCertificates=Certificates
-CPHeadDebugging=Debugging Settings
-CPHeadDesktopIntegration=Desktop Integrations
-CPHeadSecurity=Security Settings
-
-# Control Panel - Tabs
-CPTabAbout=About IcedTea-Web
-CPTabCache=Cache
-CPTabCertificate=Certificates
-CPTabClassLoader=Class Loaders
-CPTabDebugging=Debugging
-CPTabDesktopIntegration=Desktop Integration
-CPTabNetwork=Network
-CPTabRuntimes=Runtimes
-CPTabSecurity=Security
-
-# Control Panel - AboutPanel
-CPAboutInfo=This is the control panel for setting deployments.properties.<br/>Not all options will take effect until implemented.<br/>The use of multiple JREs is currently unsupported.<br/>
-
-# Control Panel - AdvancedProxySettings
-APSDialogTitle=Network Settings
-APSServersPanel=Servers
-APSProxyTypeLabel=Type
-APSProxyAddressLabel=Proxy Address
-APSProxyPortLabel=Proxy Port
-APSLabelHTTP=HTTP
-APSLabelSecure=Secure
-APSLabelFTP=FTP
-APSLabelSocks=Socks
-APSSameProxyForAllProtocols=Use the same proxy server for all protocols.
-APSExceptionsLabel=Exceptions
-APSExceptionsDescription=Do not use proxy server for addresses beginning with
-APSExceptionInstruction=Separate each entry with a semicolon.
-
-# Control Panel - DebugginPanel
-DPEnableTracing=Enable tracing
-DPEnableLogging=Enable logging
-DPDisable=Disable
-DPHide=Hide on startup
-DPShow=Show on startup
-DPJavaConsole=Java Console
-
-# Control Panel - DesktopShortcutPanel
-DSPNeverCreate=Never create
-DSPAlwaysAllow=Always allow
-DSPAskUser=Ask user
-DSPAskIfHinted=Ask if hinted
-DSPAlwaysIfHinted=Always if hinted
-
-# Control Panel - NetworkSettingsPanel
-NSDescription-1=Unknown Setting.
-NSDescription0=Use direct connection.
-NSDescription1=Override browser proxy settings.
-NSDescription2=Use automatic proxy configuration script at the specified location.
-NSDescription3=Use proxy settings from your default browser to connect to the internet.
-NSAddress=Address
-NSPort=Port
-NSAdvanced=Advanced
-NSBypassLocal=Bypass proxy server for local addresses
-NSDirectConnection=Direct connection
-NSManualProxy=Manual proxy server
-NSAutoProxy=Automatic proxy configuration script
-NSBrowserProxy=Use browser settings
-NSScriptLocation=Script location
-
-# Control Panel - SecurityGeneralPanel
-SGPAllowUserGrantSigned=Allow users to grant permissions to signed content
-SGPAllowUserGrantUntrust=Allow users to grant permissions to content from an untrusted authority
-SGPUseBrowserKeystore=Use certificates and keys in browser keystore (Unsupported)
-SGPUsePersonalCertOneMatch=Use personal certificate automatically if only one matches server request (Unsupported)
-SGPWarnCertHostMismatch=Warn if site certificate does not match hostname
-SGPShowValid=Show site certificate even if it is valid (Unsupported)
-SGPShowSandboxWarning=Show sandbox warning banner
-SGPAllowUserAcceptJNLPSecurityRequests=Allow user to accept JNLP security requests
-SGPCheckCertRevocationList=Check certificates for revocation using Certificate Revocation Lists (CRLs) (Unsupported)
-SGPEnableOnlineCertValidate=Enable online certificate validation (Unsupported)
-SGPEnableTrustedPublisherList=Enable list of trusted publishers (Unsupported)
-SGPEnableBlacklistRevocation=Enable blacklist revocation check (Unsupported)
-SGPEnableCachingPassword=Enable caching password for authentication (Unsupported)
-SGPUseSSL2=Use SSL 2.0 compatible ClientHello format (Unsupported)
-SGPUseSSL3=Use SSL 3.0 (Unsupported)
-SGPUseTLS1=Use TLS 1.0 (Unsupported)
-
-# Control Panel - TemporaryInternetFilesPanel
-TIFPEnableCache=Keep temporary files on my computer
-TIFPLocation=Location
-TIFPLocationLabel=Select the location where temporary files are kept
-TIFPChange=Change
-TIFPDiskSpace=Disk space
-TIFPCompressionLevel=Select the compression level for JAR files
-TIFPNone=None
-TIFPMax=Max
-TIFPCacheSize=Set the amount of disk space for storing temporary files
-TIFPDeleteFiles=Delete files
+
+# Control Panel - Tab Descriptions
+CPAboutDescription=View version information about Icedtea Control Panel.
+CPNetworkSettingsDescription=Configure network settings, including how IcedTea-Web connects to the internet and whether to use any proxies.
+CPTempInternetFilesDescription=Java stores application data for faster execution the next time you run it.
+CPJRESettingsDescription=View and manage Java Runtime Environment versions and settings for Java applications and applets.
+CPCertificatesDescription=Use certificates to positively identify yourself, certifications, authorities, and plublishers.
+CPSecurityDescription=Use this to configure security settings.
+CPDebuggingDescription=Enable options here to help with debugging
+CPDesktopIntegrationDescription=Set whether or not to allow creation of desktop shortcut.
+
+# Control Panel - Buttons
+CPButAbout=About...
+CPButNetworkSettings=Network Settings...
+CPButSettings=Settings...
+CPButView=View...
+CPButCertificates=Certificates...
+
+# Control Panel - Headers
+CPHead=IcedTea Web Control Panel
+CPHeadAbout=About
+CPHeadNetworkSettings=Network Proxy Settings
+CPHeadTempInternetFiles=Temporary Internet Files
+CPHeadJRESettings=Java Runtime Environment Settings
+CPHeadCertificates=Certificates
+CPHeadDebugging=Debugging Settings
+CPHeadDesktopIntegration=Desktop Integrations
+CPHeadSecurity=Security Settings
+
+# Control Panel - Tabs
+CPTabAbout=About IcedTea-Web
+CPTabCache=Cache
+CPTabCertificate=Certificates
+CPTabClassLoader=Class Loaders
+CPTabDebugging=Debugging
+CPTabDesktopIntegration=Desktop Integration
+CPTabNetwork=Network
+CPTabRuntimes=Runtimes
+CPTabSecurity=Security
+
+# Control Panel - AboutPanel
+CPAboutInfo=This is the control panel for setting deployments.properties.<br/>Not all options will take effect until implemented.<br/>The use of multiple JREs is currently unsupported.<br/>
+
+# Control Panel - AdvancedProxySettings
+APSDialogTitle=Network Settings
+APSServersPanel=Servers
+APSProxyTypeLabel=Type
+APSProxyAddressLabel=Proxy Address
+APSProxyPortLabel=Proxy Port
+APSLabelHTTP=HTTP
+APSLabelSecure=Secure
+APSLabelFTP=FTP
+APSLabelSocks=Socks
+APSSameProxyForAllProtocols=Use the same proxy server for all protocols.
+APSExceptionsLabel=Exceptions
+APSExceptionsDescription=Do not use proxy server for addresses beginning with
+APSExceptionInstruction=Separate each entry with a semicolon.
+
+# Control Panel - DebugginPanel
+DPEnableTracing=Enable tracing
+DPEnableLogging=Enable logging
+DPDisable=Disable
+DPHide=Hide on startup
+DPShow=Show on startup
+DPJavaConsole=Java Console
+
+# Control Panel - DesktopShortcutPanel
+DSPNeverCreate=Never create
+DSPAlwaysAllow=Always allow
+DSPAskUser=Ask user
+DSPAskIfHinted=Ask if hinted
+DSPAlwaysIfHinted=Always if hinted
+
+# Control Panel - NetworkSettingsPanel
+NSDescription-1=Unknown Setting.
+NSDescription0=Use direct connection.
+NSDescription1=Override browser proxy settings.
+NSDescription2=Use automatic proxy configuration script at the specified location.
+NSDescription3=Use proxy settings from your default browser to connect to the internet.
+NSAddress=Address
+NSPort=Port
+NSAdvanced=Advanced
+NSBypassLocal=Bypass proxy server for local addresses
+NSDirectConnection=Direct connection
+NSManualProxy=Manual proxy server
+NSAutoProxy=Automatic proxy configuration script
+NSBrowserProxy=Use browser settings
+NSScriptLocation=Script location
+
+# Control Panel - SecurityGeneralPanel
+SGPAllowUserGrantSigned=Allow users to grant permissions to signed content
+SGPAllowUserGrantUntrust=Allow users to grant permissions to content from an untrusted authority
+SGPUseBrowserKeystore=Use certificates and keys in browser keystore (Unsupported)
+SGPUsePersonalCertOneMatch=Use personal certificate automatically if only one matches server request (Unsupported)
+SGPWarnCertHostMismatch=Warn if site certificate does not match hostname
+SGPShowValid=Show site certificate even if it is valid (Unsupported)
+SGPShowSandboxWarning=Show sandbox warning banner
+SGPAllowUserAcceptJNLPSecurityRequests=Allow user to accept JNLP security requests
+SGPCheckCertRevocationList=Check certificates for revocation using Certificate Revocation Lists (CRLs) (Unsupported)
+SGPEnableOnlineCertValidate=Enable online certificate validation (Unsupported)
+SGPEnableTrustedPublisherList=Enable list of trusted publishers (Unsupported)
+SGPEnableBlacklistRevocation=Enable blacklist revocation check (Unsupported)
+SGPEnableCachingPassword=Enable caching password for authentication (Unsupported)
+SGPUseSSL2=Use SSL 2.0 compatible ClientHello format (Unsupported)
+SGPUseSSL3=Use SSL 3.0 (Unsupported)
+SGPUseTLS1=Use TLS 1.0 (Unsupported)
+
+# Control Panel - TemporaryInternetFilesPanel
+TIFPEnableCache=Keep temporary files on my computer
+TIFPLocation=Location
+TIFPLocationLabel=Select the location where temporary files are kept
+TIFPChange=Change
+TIFPDiskSpace=Disk space
+TIFPCompressionLevel=Select the compression level for JAR files
+TIFPNone=None
+TIFPMax=Max
+TIFPCacheSize=Set the amount of disk space for storing temporary files
+TIFPDeleteFiles=Delete files
TIFPViewFiles=View files...
# Control Panel - Cache Viewer
@@ -409,12 +416,12 @@ CVCPColDomain=Domain
CVCPColType=Type
CVCPColPath=Path
CVCPColName=Name
-
-# Control Panel - Misc.
-CPJRESupport=IcedTea-Web currently does not support the use of multiple JREs.
-CPInvalidPort=Invalid port number given.\n[Valid port numbers are 1-65535]
-CPInvalidPortTitle=Error on input.
-
+
+# Control Panel - Misc.
+CPJRESupport=IcedTea-Web currently does not support the use of multiple JREs.
+CPInvalidPort=Invalid port number given.\n[Valid port numbers are 1-65535]
+CPInvalidPortTitle=Error on input.
+
# command line control panel
CLNoInfo=No information avaiable (is this a valid option?).
CLValue=Value: {0}
diff --git a/netx/net/sourceforge/jnlp/util/PropertiesFile.java b/netx/net/sourceforge/jnlp/util/PropertiesFile.java
index a3188e0..69dbf53 100644
--- a/netx/net/sourceforge/jnlp/util/PropertiesFile.java
+++ b/netx/net/sourceforge/jnlp/util/PropertiesFile.java
@@ -134,6 +134,7 @@ public class PropertiesFile extends Properties {
OutputStream s = null;
try {
try {
+ file.getParentFile().mkdirs();
s = new FileOutputStream(file);
store(s, header);
} finally {
diff --git a/tests/jnlp_tests/signed/CacheReproducer/resources/CacheReproducer1.jnlp b/tests/jnlp_tests/signed/CacheReproducer/resources/CacheReproducer1.jnlp
new file mode 100644
index 0000000..e053b9c
--- /dev/null
+++ b/tests/jnlp_tests/signed/CacheReproducer/resources/CacheReproducer1.jnlp
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<jnlp spec="1.0"
+ codebase="./"
+ href="CacheReproducer1.jnlp">
+ <information>
+ <title>Just prints out "Good simple javaws exapmle" using reflection call from CacheReproducer.jar SimpletestSigned1.jar</title>
+ </information>
+ <resources>
+ <jar href="CacheReproducer.jar" main="true"/>
+ <jar href="SimpletestSigned1.jar" main="false" download="eager"/>
+ </resources>
+ <application-desc main-class="CacheReproducer"/>
+ <security>
+ <all-permissions/>
+ </security>
+</jnlp>
diff --git a/tests/jnlp_tests/signed/CacheReproducer/resources/CacheReproducer1_1.jnlp b/tests/jnlp_tests/signed/CacheReproducer/resources/CacheReproducer1_1.jnlp
new file mode 100644
index 0000000..d749061
--- /dev/null
+++ b/tests/jnlp_tests/signed/CacheReproducer/resources/CacheReproducer1_1.jnlp
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<jnlp spec="1.0"
+ codebase="./"
+ href="CacheReproducer1_1.jnlp">
+ <information>
+ <title>Just prints out "Good simple javaws exapmle" using reflection call from CacheReproducer.jar SimpletestSigned1.jar</title>
+ </information>
+ <resources>
+ <jar href="CacheReproducer.jar" main="true"/>
+ <jar href="SimpletestSigned1.jar" main="false" download="lazy"/>
+ </resources>
+ <application-desc main-class="CacheReproducer"/>
+ <security>
+ <all-permissions/>
+ </security>
+</jnlp>
diff --git a/tests/jnlp_tests/signed/CacheReproducer/resources/CacheReproducer2.jnlp b/tests/jnlp_tests/signed/CacheReproducer/resources/CacheReproducer2.jnlp
new file mode 100644
index 0000000..52770ac
--- /dev/null
+++ b/tests/jnlp_tests/signed/CacheReproducer/resources/CacheReproducer2.jnlp
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<jnlp spec="1.0"
+ codebase="./"
+ href="CacheReproducer2.jnlp">
+ <information>
+ <title>Just prints out "Good simple javaws exapmle" using reflection call from CacheReproducer.jar SimpletestSigned1.jar</title>
+ </information>
+ <resources>
+ <jar href="SimpletestSigned1.jar" main="false" download="eager"/>
+ <jar href="CacheReproducer.jar" main="true"/>
+ </resources>
+ <application-desc main-class="CacheReproducer"/>
+ <security>
+ <all-permissions/>
+ </security>
+</jnlp>
diff --git a/tests/jnlp_tests/signed/CacheReproducer/resources/CacheReproducer2_1.jnlp b/tests/jnlp_tests/signed/CacheReproducer/resources/CacheReproducer2_1.jnlp
new file mode 100644
index 0000000..33d6051
--- /dev/null
+++ b/tests/jnlp_tests/signed/CacheReproducer/resources/CacheReproducer2_1.jnlp
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<jnlp spec="1.0"
+ codebase="./"
+ href="CacheReproducer2_1.jnlp">
+ <information>
+ <title><title>Just prints out "Good simple javaws exapmle" using reflection call from CacheReproducer.jar SimpletestSigned1.jar</title></title>
+ </information>
+ <resources>
+ <jar href="SimpletestSigned1.jar" main="false" download="lazy"/>
+ <jar href="CacheReproducer.jar" main="true"/>
+ </resources>
+ <application-desc main-class="CacheReproducer"/>
+ <security>
+ <all-permissions/>
+ </security>
+</jnlp>
diff --git a/tests/jnlp_tests/signed/CacheReproducer/srcs/CacheReproducer.java b/tests/jnlp_tests/signed/CacheReproducer/srcs/CacheReproducer.java
new file mode 100644
index 0000000..e0813fa
--- /dev/null
+++ b/tests/jnlp_tests/signed/CacheReproducer/srcs/CacheReproducer.java
@@ -0,0 +1,47 @@
+/* CacheReproducer.java
+Copyright (C) 2012 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 java.lang.reflect.*;
+
+public class CacheReproducer{
+
+ public static void main(String[] args) throws Exception{
+ Class c1= Class.forName("SimpletestSigned1");
+ Method m1=c1.getDeclaredMethod("main",args.getClass());
+ m1.invoke((Object) null, (Object)args);
+ }
+}
diff --git a/tests/jnlp_tests/signed/CacheReproducer/testcases/CacheReproducerTest.java b/tests/jnlp_tests/signed/CacheReproducer/testcases/CacheReproducerTest.java
new file mode 100644
index 0000000..bf89fff
--- /dev/null
+++ b/tests/jnlp_tests/signed/CacheReproducer/testcases/CacheReproducerTest.java
@@ -0,0 +1,427 @@
+/* CacheReproducerTest.java
+Copyright (C) 2012 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 java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.UnsupportedEncodingException;
+import java.util.Arrays;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import net.sourceforge.jnlp.ServerAccess;
+import net.sourceforge.jnlp.ServerAccess.ProcessResult;
+import org.junit.AfterClass;
+import org.junit.Assert;
+
+import org.junit.Test;
+
+public class CacheReproducerTest {
+
+ private static final ServerAccess server = new ServerAccess();
+ private static final List<String> clear = Arrays.asList(new String[]{server.getJavawsLocation(), "-Xclearcache"});
+ private static final List<String> trusted = Arrays.asList(new String[]{"-Xtrustall", ServerAccess.HEADLES_OPTION});
+ private static final String home = System.getProperty("user.home");
+ private static final String name = System.getProperty("user.name");
+ private static final String tmp = System.getProperty("java.io.tmpdir");
+ private static final File icedteaDir = new File(home + "/" + ".icedtea");
+ private static final File icedteaCache = new File(icedteaDir, "cache");
+ private static final File icedteaCacheFile = new File(icedteaCache, "recently_used");
+ private static final File netxLock = new File(tmp + "/" + name + "/netx/locks/netx_running");
+ private static final String lre = "LruCacheException";
+ private static final String corruptRegex = "\\d{13}";
+ private static final Pattern corruptPatern = Pattern.compile(corruptRegex);
+ private static final String corruptString = "156dsf1562kd5";
+
+ @Test
+ public void cacheIsWorkingTest() throws Exception {
+ clearAndEvaluateCache();
+ evaluateSimpleTest1OkCache(runSimpleTest1());
+ assertCacheIsNotEmpty();
+ }
+
+ @Test
+ public void cacheIsWorkingTestSigned() throws Exception {
+ clearAndEvaluateCache();
+ evaluateSimpleTest1OkCache(runSimpleTest1Signed());
+ assertCacheIsNotEmpty();
+ }
+
+ private class ParallelSimpleTestRunner extends Thread {
+ public boolean b=false;
+ @Override
+ public void run() {
+ try {
+
+ ServerAccess.ProcessResult pr = runSimpleTest1();
+ evaluateSimpleTest1OkCache(pr);
+ b=true;
+ } catch (Exception ex) {
+ throw new RuntimeException(ex);
+ }
+ }
+ };
+
+ @Test
+ public void startParallelInstancesUponBrokenCache() throws Exception {
+ clearAndEvaluateCache();
+ evaluateSimpleTest1OkCache(runSimpleTest1());
+ assertCacheIsNotEmpty();
+ breakCache1();
+ ParallelSimpleTestRunner t1=new ParallelSimpleTestRunner();
+ ParallelSimpleTestRunner t2=new ParallelSimpleTestRunner();
+ ParallelSimpleTestRunner t3=new ParallelSimpleTestRunner();
+ t1.start();
+ t2.start();
+ t3.start();
+ int c=0;
+ while(true){
+ c++;
+ Thread.sleep(100);
+ if (c>600) throw new Error("threads have not died in time");
+ if (!t1.isAlive() && !t2.isAlive() && !t3.isAlive()) break;
+ }
+ Thread.sleep(1000);
+ Assert.assertTrue(t1.b);
+ Assert.assertTrue(t2.b);
+ Assert.assertTrue(t3.b);
+ }
+
+
+ private void assertCacheIsNotEmpty() {
+ Assert.assertTrue("icedtea cache " + icedteaCache.getAbsolutePath() + " should exist some any run", icedteaCache.exists());
+ Assert.assertTrue("icedtea cache file " + icedteaCacheFile.getAbsolutePath() + " should exist some any run", icedteaCacheFile.exists());
+ Assert.assertTrue("icedtea cache file " + icedteaCacheFile.getAbsolutePath() + " should not be empty", icedteaCacheFile.length() > 0);
+ }
+
+ @Test
+ public void coruptAndRunCache1() throws Exception {
+ clearAndEvaluateCache();
+ evaluateSimpleTest1OkCache(runSimpleTest1());
+ assertCacheIsNotEmpty();
+ breakCache1();
+ ProcessResult pr = runSimpleTest1();
+ assertLruExceptionAppeared(pr);
+ evaluateSimpleTest1OkCache(pr);
+ clearAndEvaluateCache();
+ ProcessResult pr2 = runSimpleTest1();
+ evaluateSimpleTest1OkCache(pr2);
+ assertLruExceptionNOTappeared(pr2);
+ }
+
+ @Test
+ public void coruptAndRunCache2() throws Exception {
+ clearAndEvaluateCache();
+ evaluateSimpleTest1OkCache(runSimpleTest1());
+ assertCacheIsNotEmpty();
+ breakCache1();
+ ProcessResult pr = runSimpleTest1();
+ assertLruExceptionAppeared(pr);
+ evaluateSimpleTest1OkCache(pr);
+ ProcessResult pr3 = runSimpleTest1();
+ evaluateSimpleTest1OkCache(pr3);
+ assertLruExceptionNOTappeared(pr3);
+ clearAndEvaluateCache();
+ ProcessResult pr2 = runSimpleTest1();
+ evaluateSimpleTest1OkCache(pr2);
+ assertLruExceptionNOTappeared(pr2);
+ }
+
+ private void assertLruExceptionNOTappeared(ProcessResult pr2) {
+ Assert.assertFalse("serr should NOT contain " + lre, pr2.stderr.contains(lre));
+ }
+
+ private void assertLruExceptionAppeared(ProcessResult pr) {
+ Assert.assertTrue("serr should contain " + lre, pr.stderr.contains(lre));
+ }
+
+ @Test
+ public void coruptAndRunCache1Signed() throws Exception {
+ clearAndEvaluateCache();
+ evaluateSimpleTest1OkCache(runSimpleTest1());
+ assertCacheIsNotEmpty();
+ breakCache1();
+ ProcessResult pr = runSimpleTest1Signed();
+ assertLruExceptionAppeared(pr);
+ evaluateSimpleTest1OkCache(pr);
+ clearAndEvaluateCache();
+ ProcessResult pr2 = runSimpleTest1Signed();
+ evaluateSimpleTest1OkCache(pr2);
+ assertLruExceptionNOTappeared(pr2);
+ }
+
+ @Test
+ public void coruptAndRunCache2Signed() throws Exception {
+ clearAndEvaluateCache();
+ evaluateSimpleTest1OkCache(runSimpleTest1());
+ assertCacheIsNotEmpty();
+ breakCache1();
+ ProcessResult pr = runSimpleTest1Signed();
+ assertLruExceptionAppeared(pr);
+ evaluateSimpleTest1OkCache(pr);
+ ProcessResult pr3 = runSimpleTest1Signed();
+ evaluateSimpleTest1OkCache(pr3);
+ assertLruExceptionNOTappeared(pr3);
+ clearAndEvaluateCache();
+ ProcessResult pr2 = runSimpleTest1Signed();
+ evaluateSimpleTest1OkCache(pr2);
+ assertLruExceptionNOTappeared(pr2);
+ }
+
+ @Test
+ public void clearCacheUnsucessfully() throws Exception {
+ evaluateSimpleTest1OkCache(runSimpleTest1());
+ assertCacheIsNotEmpty();
+ ProcessResult pr;
+ Thread t = new Thread(new Runnable() {
+
+ @Override
+ public void run() {
+ try {
+ System.out.println("connecting deadlocktest request");
+ System.err.println("connecting deadlocktest request");
+ ServerAccess.ProcessResult pr = server.executeJavawsHeadless(null, "/deadlocktest.jnlp");
+ System.out.println(pr.stdout);
+ System.err.println(pr.stderr);
+ } catch (Exception ex) {
+ throw new RuntimeException(ex);
+ }
+ }
+ });
+ t.start();
+ Thread.sleep(1000);
+ pr = tryToClearcache();
+ System.out.println(pr.stdout);
+ System.err.println(pr.stderr);
+ String q = "Can not clear cache at this time";
+ Assert.assertTrue("Stderr should contain " + q + ", but did not.", pr.stderr.contains(q));
+ assertCacheIsNotEmpty();
+ }
+
+
+ //next four tests are designed to ensure, that corupted cache wil not break already loaded cached files
+ public static final String CR1 = "CacheReproducer1";
+ public static final String CR2 = "CacheReproducer2";
+ public static final String CR11 = "CacheReproducer1_1";
+ public static final String CR21 = "CacheReproducer2_1";
+
+ public void testsBody(String id, int breaker) throws Exception {
+ clearAndEvaluateCache();
+ ProcessResult pr1 = runSimpleTestSigned(id);
+ assertLruExceptionNOTappeared(pr1);
+ evaluateSimpleTest1OkCache(pr1);
+ if (breaker < 0) {
+ breakCache1();
+ } else {
+ breakCache2(breaker);
+ }
+ ProcessResult pr2 = runSimpleTestSigned(id);
+ assertLruExceptionAppeared(pr2);
+ evaluateSimpleTest1OkCache(pr2);
+ }
+
+ @Test
+ public void testAlreadyLoadedCached1() throws Exception {
+ testsBody(CR1, 1);
+ testsBody(CR1, 2);
+ testsBody(CR1, -1);
+ }
+
+ @Test
+ public void testAlreadyLoadedCached2() throws Exception {
+ testsBody(CR2, 1);
+ testsBody(CR2, 2);
+ testsBody(CR2, -1);
+ }
+
+ @Test
+ public void testAlreadyLoadedCached11() throws Exception {
+ testsBody(CR11, 1);
+ testsBody(CR11, 2);
+ testsBody(CR11, -1);
+ }
+
+ @Test
+ public void testAlreadyLoadedCached21() throws Exception {
+ testsBody(CR21, 1);
+ testsBody(CR21, 2);
+ testsBody(CR21, -1);
+ }
+
+ @AfterClass
+ public static void clearCache() throws Exception {
+ clearAndEvaluateCache();
+ }
+
+ private static void clearAndEvaluateCache() throws Exception {
+ clearAndEvaluateCache(true);
+ }
+
+ private static void clearAndEvaluateCache(boolean force) throws Exception {
+ System.out.println("clearing cache");
+ System.err.println("clearing cache");
+ if (force) {
+ if (netxLock.isFile()) {
+ boolean b = netxLock.delete();
+ junit.framework.Assert.assertTrue(b);
+ }
+
+ }
+ tryToClearcache();
+ Assert.assertFalse("icedtea cache " + icedteaCache.getAbsolutePath() + " should not exist after clearing", icedteaCache.exists());
+ }
+
+ private static String loadFile(File f) throws FileNotFoundException, UnsupportedEncodingException, IOException {
+ BufferedReader r = new BufferedReader(new InputStreamReader(new FileInputStream(icedteaCacheFile), "UTF-8"));
+ StringBuilder sb = new StringBuilder();
+ while (true) {
+ String s = r.readLine();
+ if (s == null) {
+ break;
+ }
+ sb.append(s).append("\n");
+
+ }
+ return sb.toString();
+ }
+
+ private static String loadCacheFile() throws IOException {
+ return loadFile(icedteaCacheFile);
+ }
+
+ @Test
+ public void assertBreakersAreWorking() {
+ String s = "#netx file\n"
+ + "#Mon Dec 12 16:20:46 CET 2011\n"
+ + "1323703236508,0=/home/xp13/.icedtea/cache/0/http/localhost/ReadPropertiesBySignedHack.jnlp\n"
+ + "1323703243086,2=/home/xp14/.icedtea/cache/2/http/localhost/ReadProperties.jar\n"
+ + "1323703243082,1=/home/xp15/.icedtea/cache/1/http/localhost/ReadPropertiesBySignedHack.jar";
+ String sp[] = s.split("\n");
+
+ String ss[] = breakAll(s).split("\n");
+ for (int i = 0; i < 2; i++) {
+ Assert.assertEquals(sp[i], ss[i]);
+
+ }
+ for (int i = 2; i < ss.length; i++) {
+ Assert.assertNotSame(sp[i], ss[i]);
+
+ }
+ String sb = breakOne(s, 0);
+ junit.framework.Assert.assertEquals(s, sb);
+ for (int x = 1; x <= 3; x++) {
+ String[] sx = breakOne(s, x).split("\n");
+ for (int i = 0; i < sx.length; i++) {
+ if (i == x + 1) {
+ Assert.assertNotSame(sp[i], sx[i]);
+ } else {
+ Assert.assertEquals(sp[i], sx[i]);
+ }
+
+ }
+ }
+ String sbb = breakOne(s, 4);
+ Assert.assertEquals(s, sbb);
+ }
+
+ private static String breakAll(String s) {
+ return s.replaceAll(corruptRegex, corruptString);
+ }
+
+ private static String breakOne(String s, int i) {
+ Matcher m1 = corruptPatern.matcher(s);
+ int x = 0;
+ while (m1.find()) {
+ x++;
+ String r = (m1.group(0));
+ if (x == i) {
+ return s.replace(r, corruptString);
+ }
+ }
+ return s;
+ }
+
+ private static void breakCache1() throws IOException {
+ String s = loadCacheFile();
+ s = breakAll(s);
+ ServerAccess.saveFile(s, icedteaCacheFile);
+ }
+
+ private static void breakCache2(int i) throws FileNotFoundException, UnsupportedEncodingException, IOException {
+ String s = loadCacheFile();
+ s = breakOne(s, i);
+ ServerAccess.saveFile(s, icedteaCacheFile);
+ }
+
+ private static ServerAccess.ProcessResult runSimpleTest1() throws Exception {
+ return runSimpleTest1(null, "simpletest1");
+ }
+
+ private static ServerAccess.ProcessResult runSimpleTest1(List<String> args, String s) throws Exception {
+ System.out.println("connecting " + s + " request");
+ System.err.println("connecting " + s + " request");
+ ServerAccess.ProcessResult pr2 = server.executeJavawsHeadless(args, "/" + s + ".jnlp");
+ System.out.println(pr2.stdout);
+ System.err.println(pr2.stderr);
+ return pr2;
+ }
+
+ private static ServerAccess.ProcessResult runSimpleTest1Signed() throws Exception {
+ return runSimpleTestSigned("SimpletestSigned1");
+ }
+
+ private static ServerAccess.ProcessResult runSimpleTestSigned(String id) throws Exception {
+ return runSimpleTest1(trusted, id);
+ }
+
+ private static void evaluateSimpleTest1OkCache(ServerAccess.ProcessResult pr2) throws Exception {
+ String s = "Good simple javaws exapmle";
+ Assert.assertTrue("test stdout should contain " + s + " but didn't", pr2.stdout.contains(s));
+ Assert.assertFalse(pr2.wasTerminated);
+ Assert.assertEquals((Integer) 0, pr2.returnValue);
+ }
+
+ private static ProcessResult tryToClearcache() throws Exception {
+ ServerAccess.ProcessResult pr1 = ServerAccess.executeProcess(clear);
+ System.out.println(pr1.stdout);
+ System.err.println(pr1.stderr);
+ return pr1;
+ }
+}
diff --git a/tests/jnlp_tests/signed/SimpletestSigned1/resources/SimpletestSigned1.jnlp b/tests/jnlp_tests/signed/SimpletestSigned1/resources/SimpletestSigned1.jnlp
new file mode 100644
index 0000000..12429b6
--- /dev/null
+++ b/tests/jnlp_tests/signed/SimpletestSigned1/resources/SimpletestSigned1.jnlp
@@ -0,0 +1,53 @@
+<!--
+
+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.
+
+ -->
+<?xml version="1.0" encoding="utf-8"?>
+<jnlp spec="1.0" href="SimpletestSigned1.jnlp" codebase=".">
+ <information>
+ <title>simpletest1</title>
+ <vendor>NetX</vendor>
+ <homepage href="http://jnlp.sourceforge.net/netx/"/>
+ <description>simpletest1</description>
+ <offline/>
+ </information>
+ <resources>
+ <j2se version="1.4+"/>
+ <jar href="SimpletestSigned1.jar"/>
+ </resources>
+ <application-desc main-class="SimpletestSigned1">
+ </application-desc>
+</jnlp>
diff --git a/tests/jnlp_tests/signed/SimpletestSigned1/srcs/SimpletestSigned1.java b/tests/jnlp_tests/signed/SimpletestSigned1/srcs/SimpletestSigned1.java
new file mode 100644
index 0000000..b0a30a9
--- /dev/null
+++ b/tests/jnlp_tests/signed/SimpletestSigned1/srcs/SimpletestSigned1.java
@@ -0,0 +1,43 @@
+/* SimpletestSigned1.java
+Copyright (C) 2012 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.
+ */
+
+public class SimpletestSigned1{
+
+ public static void main(String[] args){
+ System.out.println("Good simple javaws exapmle");
+ }
+}
diff --git a/tests/netx/jnlp_testsengine/net/sourceforge/jnlp/ServerAccess.java b/tests/netx/jnlp_testsengine/net/sourceforge/jnlp/ServerAccess.java
index 4391215..5b1bc2c 100644
--- a/tests/netx/jnlp_testsengine/net/sourceforge/jnlp/ServerAccess.java
+++ b/tests/netx/jnlp_testsengine/net/sourceforge/jnlp/ServerAccess.java
@@ -109,7 +109,7 @@ public class ServerAccess {
* timeout in ms to let process to finish, before assasin wil kill it.
* This can be changed in runtime, but will affect all following tasks
*/
- public static long PROCESS_TIMEOUT = 10 * 1000;//ms
+ public static long PROCESS_TIMEOUT = 20 * 1000;//ms
/**
* all terminated processes are stored here. As wee need to 'wait' to termination to be finished.
*/