/hg/icedtea-web: DummyJNLPFileWithJar enhanced to accept urls on...
jvanek at icedtea.classpath.org
jvanek at icedtea.classpath.org
Mon Jun 22 14:45:05 UTC 2015
changeset 6f6aa0416960 in /hg/icedtea-web
details: http://icedtea.classpath.org/hg/icedtea-web?cmd=changeset;node=6f6aa0416960
author: Jiri Vanek <jvanek at redhat.com>
date: Mon Jun 22 16:44:52 2015 +0200
DummyJNLPFileWithJar enhanced to accept urls only, added test to UnsignedAppletTrustConfirmationTest
* netx/net/sourceforge/jnlp/security/appletextendedsecurity/UnsignedAppletTrustConfirmation.java: (updateAppletAction) fixed wrong type, Class<RememberableDialog> become Class<? extends RememberableDialog>
* tests/netx/unit/net/sourceforge/jnlp/security/appletextendedsecurity/UnsignedAppletTrustConfirmationTest.java: Added updateAppletActionTest1
* tests/reproducers/signed/CodeBaseManifestEntrySignedMatching/testcases/CodeBaseManifestEntrySignedMatching.java: moved to diamond
* tests/test-extensions/net/sourceforge/jnlp/mock/DummyJNLPFileWithJar.java: constructors hierarchy enhanced to accept also plain URLs as resources. They are dummy anyway
diffstat:
ChangeLog | 13 +
netx/net/sourceforge/jnlp/security/appletextendedsecurity/UnsignedAppletTrustConfirmation.java | 2 +-
tests/netx/unit/net/sourceforge/jnlp/security/appletextendedsecurity/UnsignedAppletTrustConfirmationTest.java | 175 ++++++++-
tests/reproducers/signed/CodeBaseManifestEntrySignedMatching/testcases/CodeBaseManifestEntrySignedMatching.java | 10 +-
tests/test-extensions/net/sourceforge/jnlp/mock/DummyJNLPFileWithJar.java | 36 +-
5 files changed, 184 insertions(+), 52 deletions(-)
diffs (344 lines):
diff -r ad35d90a0ee9 -r 6f6aa0416960 ChangeLog
--- a/ChangeLog Fri Jun 19 16:00:59 2015 +0200
+++ b/ChangeLog Mon Jun 22 16:44:52 2015 +0200
@@ -1,3 +1,16 @@
+
+ DummyJNLPFileWithJar enhanced to accept urls only, added test to UnsignedAppletTrustConfirmationTest
+ * netx/net/sourceforge/jnlp/security/appletextendedsecurity/UnsignedAppletTrustConfirmation.java:
+ (updateAppletAction) fixed wrong type, Class<RememberableDialog> become
+ Class<? extends RememberableDialog>
+ * tests/netx/unit/net/sourceforge/jnlp/security/appletextendedsecurity/UnsignedAppletTrustConfirmationTest.java:
+ Added updateAppletActionTest1
+ * tests/reproducers/signed/CodeBaseManifestEntrySignedMatching/testcases/CodeBaseManifestEntrySignedMatching.java:
+ moved to diamond
+ * tests/test-extensions/net/sourceforge/jnlp/mock/DummyJNLPFileWithJar.java:
+ constructors hierarchy enhanced to accept also plain URLs as resources.
+ They are dummy anyway
+
2015-06-19 Jiri Vanek <jvanek at redhat.com>
Cache reproducer adapted to newest state
diff -r ad35d90a0ee9 -r 6f6aa0416960 netx/net/sourceforge/jnlp/security/appletextendedsecurity/UnsignedAppletTrustConfirmation.java
--- a/netx/net/sourceforge/jnlp/security/appletextendedsecurity/UnsignedAppletTrustConfirmation.java Fri Jun 19 16:00:59 2015 +0200
+++ b/netx/net/sourceforge/jnlp/security/appletextendedsecurity/UnsignedAppletTrustConfirmation.java Mon Jun 22 16:44:52 2015 +0200
@@ -133,7 +133,7 @@
return fileNames;
}
- public static void updateAppletAction(JNLPFile file, SavedRememberAction behaviour, Boolean rememberForCodeBase, Class<RememberableDialog> id) {
+ public static void updateAppletAction(JNLPFile file, SavedRememberAction behaviour, Boolean rememberForCodeBase, Class<? extends RememberableDialog> id) {
UnsignedAppletActionStorage userActionStorage = securitySettings.getUnsignedAppletActionCustomStorage();
userActionStorage.lock(); // We should ensure this operation is atomic
diff -r ad35d90a0ee9 -r 6f6aa0416960 tests/netx/unit/net/sourceforge/jnlp/security/appletextendedsecurity/UnsignedAppletTrustConfirmationTest.java
--- a/tests/netx/unit/net/sourceforge/jnlp/security/appletextendedsecurity/UnsignedAppletTrustConfirmationTest.java Fri Jun 19 16:00:59 2015 +0200
+++ b/tests/netx/unit/net/sourceforge/jnlp/security/appletextendedsecurity/UnsignedAppletTrustConfirmationTest.java Mon Jun 22 16:44:52 2015 +0200
@@ -1,53 +1,164 @@
/* Copyright (C) 2014 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.
*/
-
-
package net.sourceforge.jnlp.security.appletextendedsecurity;
+import java.io.File;
+import java.lang.reflect.Field;
+import java.lang.reflect.Modifier;
+import java.net.MalformedURLException;
+import java.net.URL;
import static org.junit.Assert.assertEquals;
-import java.net.URL;
-import java.util.ArrayList;
import java.util.Arrays;
-import java.util.List;
+import net.sourceforge.jnlp.InformationDesc;
+import net.sourceforge.jnlp.config.InfrastructureFileDescriptor;
+import net.sourceforge.jnlp.config.PathsAndFiles;
+import net.sourceforge.jnlp.mock.DummyJNLPFileWithJar;
+import net.sourceforge.jnlp.security.dialogs.apptrustwarningpanel.UnsignedAppletTrustWarningPanel;
+import net.sourceforge.jnlp.security.dialogs.remember.ExecuteAppletAction;
+import net.sourceforge.jnlp.security.dialogs.remember.SavedRememberAction;
+import net.sourceforge.jnlp.util.FileUtils;
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.BeforeClass;
import org.junit.Test;
public class UnsignedAppletTrustConfirmationTest {
+ private static final String surl1 = "http://codeba.se/app";
+ private static final String url41 = "http://my.url/app/";
+ private static final String url42 = "resource.jar";
+ private static URL url;
+ private static URL url4;
+ private static InfrastructureFileDescriptor APPLET_TRUST_SETTINGS_USER_BACKUP;
+
+ private static class DummyJnlpWithTitleAndUrls extends DummyJNLPFileWithJar {
+
+ public DummyJnlpWithTitleAndUrls(URL u) throws MalformedURLException {
+ super(u);
+ }
+
+ @Override
+ public InformationDesc getInformation() {
+ return new InformationDesc(null, false) {
+
+ @Override
+ public String getTitle() {
+ return "Demo App";
+ }
+
+ };
+ }
+
+ @Override
+ public URL getCodeBase() {
+ return url;
+ }
+
+ @Override
+ public URL getSourceLocation() {
+ return url;
+ }
+
+ };
+
+ @BeforeClass
+ public static void initUrl() throws MalformedURLException {
+ url=new URL(surl1);
+ url4=new URL(url41+url42);
+ }
+
+
+ @BeforeClass
+ public static void backupAppTrsSets() {
+ APPLET_TRUST_SETTINGS_USER_BACKUP = PathsAndFiles.APPLET_TRUST_SETTINGS_USER;
+ }
+
+ @After
+ public void restoreAppTrsSets() throws Exception {
+ fakeAppTrsSets(APPLET_TRUST_SETTINGS_USER_BACKUP);
+ }
+
+ private static void fakeAppTrsSets(final File f) throws NoSuchFieldException, IllegalArgumentException, IllegalAccessException {
+ fakeAppTrsSets(new InfrastructureFileDescriptor() {
+
+ @Override
+ public String getFullPath() {
+ return f.getAbsolutePath();
+ }
+
+ });
+ }
+ private static void fakeAppTrsSets(InfrastructureFileDescriptor fake) throws NoSuchFieldException, IllegalArgumentException, IllegalAccessException {
+ Field field = PathsAndFiles.class.getDeclaredField("APPLET_TRUST_SETTINGS_USER");
+ field.setAccessible(true);
+ Field modifiersField = Field.class.getDeclaredField("modifiers");
+ modifiersField.setAccessible(true);
+ modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);
+ field.set(null, fake);
+ }
+
+
+ @Test
+ public void updateAppletActionTest1() throws Exception {
+ File f = File.createTempFile("appletExtendedSecurity", "itwUnittest");
+ f.deleteOnExit();
+ fakeAppTrsSets(f);
+ UnsignedAppletTrustConfirmation.updateAppletAction(
+ new DummyJnlpWithTitleAndUrls(url4),
+ new SavedRememberAction(ExecuteAppletAction.ALWAYS, "YES"),
+ Boolean.FALSE,
+ UnsignedAppletTrustWarningPanel.class);
+ String s = FileUtils.loadFileAsString(f);
+ Assert.assertTrue(s.contains("UnsignedAppletTrustWarningPanel:A{YES}"));
+ Assert.assertTrue(s.contains(url41+url42));
+ Assert.assertTrue(s.contains(surl1));
+ UnsignedAppletTrustConfirmation.updateAppletAction(
+ new DummyJnlpWithTitleAndUrls(url4),
+ new SavedRememberAction(ExecuteAppletAction.NEVER, "NO"),
+ Boolean.TRUE,
+ UnsignedAppletTrustWarningPanel.class);
+ s = FileUtils.loadFileAsString(f);
+ Assert.assertTrue(s.contains("UnsignedAppletTrustWarningPanel:N{NO}"));
+ Assert.assertFalse(s.contains(url41+url42));
+ Assert.assertTrue(s.contains(surl1));
+ }
+
+
@Test
public void testToRelativePaths() throws Exception {
/* Absolute -> Relative */
diff -r ad35d90a0ee9 -r 6f6aa0416960 tests/reproducers/signed/CodeBaseManifestEntrySignedMatching/testcases/CodeBaseManifestEntrySignedMatching.java
--- a/tests/reproducers/signed/CodeBaseManifestEntrySignedMatching/testcases/CodeBaseManifestEntrySignedMatching.java Fri Jun 19 16:00:59 2015 +0200
+++ b/tests/reproducers/signed/CodeBaseManifestEntrySignedMatching/testcases/CodeBaseManifestEntrySignedMatching.java Mon Jun 22 16:44:52 2015 +0200
@@ -118,7 +118,7 @@
@Test
public void ApplicationJNLPLocalTest() throws Exception {
- List<String> commands = new ArrayList<String>(3);
+ List<String> commands = new ArrayList<>(3);
commands.add(server.getJavawsLocation());
commands.add(ServerAccess.HEADLES_OPTION);
commands.add(GENERAL_NAME + SIGNATURE + ".jnlp");
@@ -140,7 +140,7 @@
@Test
public void ApplicationJNLPLocalTestWithRemoteCodebase() throws Exception {
prepareCopyFile();
- List<String> commands = new ArrayList<String>(3);
+ List<String> commands = new ArrayList<>(3);
commands.add(server.getJavawsLocation());
commands.add(ServerAccess.HEADLES_OPTION);
commands.add(GENERAL_NAME + SIGNATURE + "_copy.jnlp");
@@ -160,7 +160,7 @@
@NeedsDisplay
@Test
public void AppletJNLPRLocalTest() throws Exception {
- List<String> commands = new ArrayList<String>(3);
+ List<String> commands = new ArrayList<>(3);
commands.add(server.getJavawsLocation());
commands.add(ServerAccess.HEADLES_OPTION);
commands.add(GENERAL_NAME + SIGNATURE + "Applet.jnlp");
@@ -182,7 +182,7 @@
@TestInBrowsers(testIn = {Browsers.one})
@Test
public void BrowserJNLPHrefLocalTest() throws Exception {
- List<String> commands = new ArrayList<String>(2);
+ List<String> commands = new ArrayList<>(2);
commands.add(server.getBrowserLocation());
commands.add(GENERAL_NAME + SIGNATURE + "Jnlp.html");
ProcessResult pr = ServerAccess.executeProcess(commands, server.getDir(), new AutoOkClosingListener(), null);
@@ -194,7 +194,7 @@
@TestInBrowsers(testIn = {Browsers.one})
@Test
public void BrowserAppletLocalTest() throws Exception {
- List<String> commands = new ArrayList<String>(2);
+ List<String> commands = new ArrayList<>(2);
commands.add(server.getBrowserLocation());
commands.add(GENERAL_NAME + SIGNATURE + ".html");
ProcessResult pr = ServerAccess.executeProcess(commands, server.getDir(), new AutoOkClosingListener(), null);
diff -r ad35d90a0ee9 -r 6f6aa0416960 tests/test-extensions/net/sourceforge/jnlp/mock/DummyJNLPFileWithJar.java
--- a/tests/test-extensions/net/sourceforge/jnlp/mock/DummyJNLPFileWithJar.java Fri Jun 19 16:00:59 2015 +0200
+++ b/tests/test-extensions/net/sourceforge/jnlp/mock/DummyJNLPFileWithJar.java Mon Jun 22 16:44:52 2015 +0200
@@ -23,38 +23,46 @@
}
private final JARDesc[] jarDescs;
- private final File[] jarFiles;
+ private final URL[] jarFiles;
public DummyJNLPFileWithJar(File... jarFiles) throws MalformedURLException {
this(-1, jarFiles);
}
+
+ public DummyJNLPFileWithJar(URL... jarFiles) throws MalformedURLException {
+ this(-1, jarFiles);
+ }
public DummyJNLPFileWithJar(int main, File... jarFiles) throws MalformedURLException {
- codeBase = jarFiles[0].getParentFile().toURI().toURL();
+ this(main, filesToUrls(jarFiles));
+ }
+
+ private static URL[] filesToUrls(File[] f) throws MalformedURLException{
+ URL[] r = new URL[f.length];
+ for (int i = 0; i < f.length; i++) {
+ r[i]=f[i].getParentFile().toURI().toURL();
+ }
+ return r;
+ }
+
+ public DummyJNLPFileWithJar(int main, URL... jarFiles) throws MalformedURLException {
+ codeBase = jarFiles[0];
this.jarFiles = jarFiles;
jarDescs = new JARDesc[jarFiles.length];
for (int i = 0; i < jarFiles.length; i++) {
- jarDescs[i] = makeJarDesc(jarFiles[i].toURI().toURL(), i==main);
+ jarDescs[i] = makeJarDesc(jarFiles[i], i==main);
}
- info = new ArrayList<InformationDesc>();
+ info = new ArrayList<>();
this.security = new SecurityDesc(this, SecurityDesc.SANDBOX_PERMISSIONS, null);
}
public URL getJarLocation() {
- try {
- return jarFiles[0].toURI().toURL();
- } catch (MalformedURLException e) {
- throw new RuntimeException(e);
- }
+ return jarFiles[0];
}
public URL getJarLocation(int i) {
- try {
- return jarFiles[i].toURI().toURL();
- } catch (MalformedURLException e) {
- throw new RuntimeException(e);
- }
+ return jarFiles[i];
}
public JARDesc[] getJarDescs() {
More information about the distro-pkg-dev
mailing list