1 /* CodebasesAttsNoDialogsTest1.java
2  Copyright (C) 2013 Red Hat, Inc.
3 
4  This file is part of IcedTea.
5 
6  IcedTea is free software; you can redistribute it and/or
7  modify it under the terms of the GNU General Public License as published by
8  the Free Software Foundation, version 2.
9 
10  IcedTea is distributed in the hope that it will be useful,
11  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  General Public License for more details.
14 
15  You should have received a copy of the GNU General Public License
16  along with IcedTea; see the file COPYING.  If not, write to
17  the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
18  02110-1301 USA.
19 
20  Linking this library statically or dynamically with other modules is
21  making a combined work based on this library.  Thus, the terms and
22  conditions of the GNU General Public License cover the whole
23  combination.
24 
25  As a special exception, the copyright holders of this library give you
26  permission to link this library with independent modules to produce an
27  executable, regardless of the license terms of these independent
28  modules, and to copy and distribute the resulting executable under
29  terms of your choice, provided that you also meet, for each linked
30  independent module, the terms and conditions of the license of that
31  module.  An independent module is a module which is not derived from
32  or based on this library.  If you modify this library, you may extend
33  this exception to your version of the library, but you are not
34  obligated to do so.  If you do not wish to do so, delete this
35  exception statement from your version.
36  */
37 
38 import java.io.File;
39 import java.io.FileNotFoundException;
40 import java.io.FileOutputStream;
41 import java.io.IOException;
42 import java.io.InputStream;
43 import java.io.OutputStream;
44 import java.net.URL;
45 import java.util.AbstractMap;
46 import java.util.Arrays;
47 import java.util.Enumeration;
48 import java.util.List;
49 import java.util.zip.ZipEntry;
50 import java.util.zip.ZipFile;
51 import java.util.zip.ZipOutputStream;
52 import net.sourceforge.jnlp.OptionsDefinitions;
53 import net.sourceforge.jnlp.ProcessResult;
54 import net.sourceforge.jnlp.ServerAccess;
55 import net.sourceforge.jnlp.ServerLauncher;
56 import net.sourceforge.jnlp.annotations.Bug;
57 import net.sourceforge.jnlp.annotations.NeedsDisplay;
58 import net.sourceforge.jnlp.annotations.TestInBrowsers;
59 import net.sourceforge.jnlp.browsertesting.BrowserTest;
60 import net.sourceforge.jnlp.browsertesting.Browsers;
61 import net.sourceforge.jnlp.closinglisteners.AutoErrorClosingListener;
62 import net.sourceforge.jnlp.closinglisteners.AutoOkClosingListener;
63 import net.sourceforge.jnlp.config.DeploymentConfiguration;
64 import net.sourceforge.jnlp.runtime.ManifestAttributesChecker;
65 import net.sourceforge.jnlp.security.appletextendedsecurity.AppletSecurityLevel;
66 import net.sourceforge.jnlp.tools.DeploymentPropertiesModifier;
67 import net.sourceforge.jnlp.util.FileUtils;
68 import org.junit.AfterClass;
69 
70 import org.junit.Assert;
71 import org.junit.BeforeClass;
72 import org.junit.Test;
73 
74 /**
75  *
76  * null, empty, none, wrong, correct jnlp x html different codebases.
77  *
78  * no dialogs should be appeared. Second testsuite with ALL dialogs (head only)
79  *
80  *
81  */
82 public class CodebasesAttsNoDialogsTest1 extends BrowserTest {
83 
84     public static final String appletCloseString = AutoOkClosingListener.MAGICAL_OK_CLOSING_STRING;
85     public static final String[] JAVAWS_HTML_ARRAY = new String[]{OptionsDefinitions.OPTIONS.HTML.option};
86     public static final List<String> JAVAWS_HTML_LIST = Arrays.asList(JAVAWS_HTML_ARRAY);
87 
88     public static final String JNLPAPP = "CodebasesAttsApp.jnlp";
89     public static final String JNLPAPPLET = "CodebasesAttsApplet.jnlp";
90     public static final String HTML = "CodebasesAtts.html";
91     public static final String HTMLHREF = "CodebasesAttsJnlpHref.html";
92     public static final String CodebasesAtts = "CodebasesAtts";
93 
94     private static ServerLauncher emptyServer;
95     private static ServerLauncher secondValidServer;
96     private static DeploymentPropertiesModifier.MultipleDeploymentPropertiesModifier ensuredDP;
97 
98     public static final String[] files = new String[]{"CodebasesAttsApp.jnlp", "CodebasesAtts.html", "CodebasesAttsApplet.jnlp", "CodebasesAttsJnlpHref.html"};
99 
100     @BeforeClass
initSecondaryServers()101     public static void initSecondaryServers() throws IOException {
102         emptyServer = ServerAccess.getIndependentInstanceOnTmpDir();
103         secondValidServer = ServerAccess.getIndependentInstanceOnTmpDir();
104     }
105 
106     @AfterClass
stopSecondaryServers()107     public static void stopSecondaryServers() throws IOException {
108         emptyServer.stop();
109         secondValidServer.stop();
110     }
111 
112     @BeforeClass
setProperties()113     public static void setProperties() throws IOException {
114         ensuredDP = new DeploymentPropertiesModifier.MultipleDeploymentPropertiesModifier(
115                 new AbstractMap.SimpleEntry(DeploymentConfiguration.KEY_ENABLE_MANIFEST_ATTRIBUTES_CHECK, ManifestAttributesChecker.MANIFEST_ATTRIBUTES_CHECK.NONE.name()),
116                 new AbstractMap.SimpleEntry(DeploymentConfiguration.KEY_SECURITY_LEVEL, AppletSecurityLevel.ALLOW_UNSIGNED.name())
117         );
118         ensuredDP.setProperties();
119     }
120 
121     @AfterClass
resetProperties()122     public static void resetProperties() throws IOException {
123         ensuredDP.restoreProperties();
124     }
125 
126     //jnlp app
127     @NeedsDisplay
128     @Test
codebasesAttsTestWorksJnlp1_dot()129     public void codebasesAttsTestWorksJnlp1_dot() throws Exception {
130         prepare("\".\"");
131         ProcessResult pr = server.executeJavaws(JNLPAPP, new AutoOkClosingListener(), new AutoErrorClosingListener());
132         Assert.assertTrue(pr.stdout.contains(appletCloseString));
133         Assert.assertTrue(pr.stdout.contains(CodebasesAtts));
134         Assert.assertTrue(pr.stdout.contains("id: 1"));
135         Assert.assertTrue(pr.stdout.contains("BID0"));
136     }
137 
138     @NeedsDisplay
139     @Test
codebasesAttsTestWorksJnlp1_empty()140     public void codebasesAttsTestWorksJnlp1_empty() throws Exception {
141         prepare("\"\"");
142         ProcessResult pr = server.executeJavaws(JNLPAPP, new AutoOkClosingListener(), new AutoErrorClosingListener());
143         Assert.assertTrue(pr.stdout.contains(appletCloseString));
144         Assert.assertTrue(pr.stdout.contains(CodebasesAtts));
145         Assert.assertTrue(pr.stdout.contains("id: 1"));
146         Assert.assertTrue(pr.stdout.contains("BID0"));
147     }
148 
149     @NeedsDisplay
150     @Test
codebasesAttsTestWorksJnlp1_space()151     public void codebasesAttsTestWorksJnlp1_space() throws Exception {
152         prepare("\" \"");
153         ProcessResult pr = server.executeJavaws(JNLPAPP, new AutoOkClosingListener(), new AutoErrorClosingListener());
154         Assert.assertTrue(pr.stdout.contains(appletCloseString));
155         Assert.assertTrue(pr.stdout.contains(CodebasesAtts));
156         Assert.assertTrue(pr.stdout.contains("id: 1"));
157         Assert.assertTrue(pr.stdout.contains("BID0"));
158     }
159 
160     @NeedsDisplay
161     @Test
codebasesAttsTestWorksJnlp1_spaces()162     public void codebasesAttsTestWorksJnlp1_spaces() throws Exception {
163         prepare("\"     \"");
164         ProcessResult pr = server.executeJavaws(JNLPAPP, new AutoOkClosingListener(), new AutoErrorClosingListener());
165         Assert.assertTrue(pr.stdout.contains(appletCloseString));
166         Assert.assertTrue(pr.stdout.contains(CodebasesAtts));
167         Assert.assertTrue(pr.stdout.contains("id: 1"));
168         Assert.assertTrue(pr.stdout.contains("BID0"));
169     }
170 
171     @NeedsDisplay
172     @Test
173     @Bug(id = "PR2489")
codebasesAttsTestWorksJnlp1_null()174     public void codebasesAttsTestWorksJnlp1_null() throws Exception {
175         prepare(null);
176         ProcessResult pr = server.executeJavaws(JNLPAPP, new AutoOkClosingListener(), new AutoErrorClosingListener());
177         Assert.assertTrue(pr.stdout.contains(appletCloseString));
178         Assert.assertTrue(pr.stdout.contains(CodebasesAtts));
179         Assert.assertTrue(pr.stdout.contains("id: 1"));
180         Assert.assertTrue(pr.stdout.contains("BID0"));
181     }
182 
183     @NeedsDisplay
184     @Test
codebasesAttsTestWorksJnlp1_value()185     public void codebasesAttsTestWorksJnlp1_value() throws Exception {
186         prepare(server.getUrl().toString());
187         ProcessResult pr = server.executeJavaws(JNLPAPP, new AutoOkClosingListener(), new AutoErrorClosingListener());
188         Assert.assertTrue(pr.stdout.contains(appletCloseString));
189         Assert.assertTrue(pr.stdout.contains(CodebasesAtts));
190         Assert.assertTrue(pr.stdout.contains("id: 1"));
191         Assert.assertTrue(pr.stdout.contains("BID0"));
192     }
193 
194     @NeedsDisplay
195     @Test
196     //all three are valid, but on l one bug is supported nows
197     @Bug(id = "http://icedtea.classpath.org/hg/icedtea-web/rev/22b7becd48a7")
198     //@Bug(id = "http://icedtea.classpath.org/hg/release/icedtea-web-1.6/rev/0d9faf51357d")
199     //@Bug(id = "http://mail.openjdk.java.net/pipermail/distro-pkg-dev/2016-January/034446.html")
codebasesAttsTestWorksJnlp1_value2()200     public void codebasesAttsTestWorksJnlp1_value2() throws Exception {
201         prepare(secondValidServer.getUrl().toString());
202         ProcessResult pr = server.executeJavaws(JNLPAPP, new AutoOkClosingListener(), new AutoErrorClosingListener());
203         Assert.assertTrue(pr.stdout.contains(appletCloseString));
204         Assert.assertTrue(pr.stdout.contains(CodebasesAtts));
205         Assert.assertTrue(pr.stdout.contains("id: 1")); //param comes from original jnlp, this will be visible on jnlp_href
206         Assert.assertTrue(pr.stdout.contains("BID2"));
207     }
208 
209     @NeedsDisplay
210     @Test
codebasesAttsTestWorksJnlp1_value3()211     public void codebasesAttsTestWorksJnlp1_value3() throws Exception {
212         prepare(secondValidServer.getUrl().toString());
213         ProcessResult pr = server.executeJavawsUponUrl(null, new URL(secondValidServer.getUrl().toString() + "/" + JNLPAPP), new AutoOkClosingListener(), new AutoErrorClosingListener());
214         Assert.assertTrue(pr.stdout.contains(appletCloseString));
215         Assert.assertTrue(pr.stdout.contains(CodebasesAtts));
216         Assert.assertTrue(pr.stdout.contains("id: 2"));
217         Assert.assertTrue(pr.stdout.contains("BID2"));
218     }
219 
220     //value3 and 4 tests ar emoreover testing taht our three servers are working as expected.
221     @NeedsDisplay
222     @Test
223     //all three are valid, but on l one bug is supported now
224     @Bug(id = "http://icedtea.classpath.org/hg/release/icedtea-web-1.6/rev/0d9faf51357d")
225     //@Bug(id = "http://icedtea.classpath.org/hg/icedtea-web/rev/22b7becd48a7")
226     //@Bug(id = "http://mail.openjdk.java.net/pipermail/distro-pkg-dev/2016-January/034446.html")
codebasesAttsTestWorksJnlp1_value4()227     public void codebasesAttsTestWorksJnlp1_value4() throws Exception {
228         prepare(server.getUrl().toString());
229         ProcessResult pr = server.executeJavawsUponUrl(null, new URL(secondValidServer.getUrl().toString() + "/" + JNLPAPP), new AutoOkClosingListener(), new AutoErrorClosingListener());
230         Assert.assertTrue(pr.stdout.contains(appletCloseString));
231         Assert.assertTrue(pr.stdout.contains(CodebasesAtts));
232         Assert.assertTrue(pr.stdout.contains("id: 2")); //param comes from original jnlp, this will be visible on jnlp_href
233         Assert.assertTrue(pr.stdout.contains("BID0"));
234     }
235 
236     //jnlp applet
237     @NeedsDisplay
238     @Test
codebasesAttsTestWorksJnlp2_dot()239     public void codebasesAttsTestWorksJnlp2_dot() throws Exception {
240         prepare("\".\"");
241         ProcessResult pr = server.executeJavaws(JNLPAPPLET, new AutoOkClosingListener(), new AutoErrorClosingListener());
242         Assert.assertTrue(pr.stdout.contains(appletCloseString));
243         Assert.assertTrue(pr.stdout.contains(CodebasesAtts));
244         Assert.assertTrue(pr.stdout.contains("id: 1"));
245         Assert.assertTrue(pr.stdout.contains("BID0"));
246     }
247 
248     @NeedsDisplay
249     @Test
codebasesAttsTestWorksJnlp2_empty()250     public void codebasesAttsTestWorksJnlp2_empty() throws Exception {
251         prepare("\"\"");
252         ProcessResult pr = server.executeJavaws(JNLPAPPLET, new AutoOkClosingListener(), new AutoErrorClosingListener());
253         Assert.assertTrue(pr.stdout.contains(appletCloseString));
254         Assert.assertTrue(pr.stdout.contains(CodebasesAtts));
255         Assert.assertTrue(pr.stdout.contains("id: 1"));
256         Assert.assertTrue(pr.stdout.contains("BID0"));
257     }
258 
259     @NeedsDisplay
260     @Test
codebasesAttsTestWorksJnlp2_space()261     public void codebasesAttsTestWorksJnlp2_space() throws Exception {
262         prepare("\" \"");
263         ProcessResult pr = server.executeJavaws(JNLPAPPLET, new AutoOkClosingListener(), new AutoErrorClosingListener());
264         Assert.assertTrue(pr.stdout.contains(appletCloseString));
265         Assert.assertTrue(pr.stdout.contains(CodebasesAtts));
266         Assert.assertTrue(pr.stdout.contains("id: 1"));
267         Assert.assertTrue(pr.stdout.contains("BID0"));
268     }
269 
270     @NeedsDisplay
271     @Test
codebasesAttsTestWorksJnlp2_spaces()272     public void codebasesAttsTestWorksJnlp2_spaces() throws Exception {
273         prepare("\"     \"");
274         ProcessResult pr = server.executeJavaws(JNLPAPPLET, new AutoOkClosingListener(), new AutoErrorClosingListener());
275         Assert.assertTrue(pr.stdout.contains(appletCloseString));
276         Assert.assertTrue(pr.stdout.contains(CodebasesAtts));
277         Assert.assertTrue(pr.stdout.contains("id: 1"));
278         Assert.assertTrue(pr.stdout.contains("BID0"));
279     }
280 
281     @NeedsDisplay
282     @Test
283     @Bug(id = "PR2489")
codebasesAttsTestWorksJnlp2_null()284     public void codebasesAttsTestWorksJnlp2_null() throws Exception {
285         prepare(null);
286         ProcessResult pr = server.executeJavaws(JNLPAPPLET, new AutoOkClosingListener(), new AutoErrorClosingListener());
287         Assert.assertTrue(pr.stdout.contains(appletCloseString));
288         Assert.assertTrue(pr.stdout.contains(CodebasesAtts));
289         Assert.assertTrue(pr.stdout.contains("id: 1"));
290         Assert.assertTrue(pr.stdout.contains("BID0"));
291     }
292 
293     @NeedsDisplay
294     @Test
codebasesAttsTestWorksJnlp2_value()295     public void codebasesAttsTestWorksJnlp2_value() throws Exception {
296         prepare(server.getUrl().toString());
297         ProcessResult pr = server.executeJavaws(JNLPAPPLET, new AutoOkClosingListener(), new AutoErrorClosingListener());
298         Assert.assertTrue(pr.stdout.contains(appletCloseString));
299         Assert.assertTrue(pr.stdout.contains(CodebasesAtts));
300         Assert.assertTrue(pr.stdout.contains("id: 1"));
301         Assert.assertTrue(pr.stdout.contains("BID0"));
302     }
303 
304     @NeedsDisplay
305     @Test
306     //all three are valid, but on l one bug is supported now
307     @Bug(id = "http://mail.openjdk.java.net/pipermail/distro-pkg-dev/2016-January/034446.html")
308     //@Bug(id = "http://icedtea.classpath.org/hg/release/icedtea-web-1.6/rev/0d9faf51357d")
309     //@Bug(id = "http://icedtea.classpath.org/hg/icedtea-web/rev/22b7becd48a7")
codebasesAttsTestWorksJnlp2_value2()310     public void codebasesAttsTestWorksJnlp2_value2() throws Exception {
311         prepare(secondValidServer.getUrl().toString());
312         ProcessResult pr = server.executeJavaws(JNLPAPPLET, new AutoOkClosingListener(), new AutoErrorClosingListener());
313         Assert.assertTrue(pr.stdout.contains(appletCloseString));
314         Assert.assertTrue(pr.stdout.contains(CodebasesAtts));
315         Assert.assertTrue(pr.stdout.contains("id: 1")); //param comes from original jnlp, this will be visible on jnlp_href
316         Assert.assertTrue(pr.stdout.contains("BID2"));
317     }
318 
319     @NeedsDisplay
320     @Test
codebasesAttsTestWorksJnlp2_value3()321     public void codebasesAttsTestWorksJnlp2_value3() throws Exception {
322         prepare(secondValidServer.getUrl().toString());
323         ProcessResult pr = server.executeJavawsUponUrl(null, new URL(secondValidServer.getUrl().toString() + "/" + JNLPAPPLET), new AutoOkClosingListener(), new AutoErrorClosingListener());
324         Assert.assertTrue(pr.stdout.contains(appletCloseString));
325         Assert.assertTrue(pr.stdout.contains(CodebasesAtts));
326         Assert.assertTrue(pr.stdout.contains("id: 2"));
327         Assert.assertTrue(pr.stdout.contains("BID2"));
328     }
329 
330     //value3 and 4 tests ar emoreover testing taht our three servers are working as expected.
331     @NeedsDisplay
332     @Test
333     //all three are valid, but on l one bug is supported now
334     //@Bug(id = "http://mail.openjdk.java.net/pipermail/distro-pkg-dev/2016-January/034446.html")
335     @Bug(id = "http://icedtea.classpath.org/hg/release/icedtea-web-1.6/rev/0d9faf51357d")
336     //@Bug(id = "http://icedtea.classpath.org/hg/icedtea-web/rev/22b7becd48a7")
codebasesAttsTestWorksJnlp2_value4()337     public void codebasesAttsTestWorksJnlp2_value4() throws Exception {
338         prepare(server.getUrl().toString());
339         ProcessResult pr = server.executeJavawsUponUrl(null, new URL(secondValidServer.getUrl().toString() + "/" + JNLPAPPLET), new AutoOkClosingListener(), new AutoErrorClosingListener());
340         Assert.assertTrue(pr.stdout.contains(appletCloseString));
341         Assert.assertTrue(pr.stdout.contains(CodebasesAtts));
342         Assert.assertTrue(pr.stdout.contains("id: 2")); //param comes from original jnlp, this will be visible on jnlp_href
343         Assert.assertTrue(pr.stdout.contains("BID0"));
344     }
345 
346     @NeedsDisplay
347     @Test
348     @TestInBrowsers(testIn = Browsers.one)
codebasesAttsTestWorksHtml1_dot()349     public void codebasesAttsTestWorksHtml1_dot() throws Exception {
350         prepare("\".\"");
351         ProcessResult pr = server.executeBrowser(HTML, new AutoOkClosingListener(), new AutoErrorClosingListener());
352         Assert.assertTrue(pr.stdout.contains(appletCloseString));
353         Assert.assertTrue(pr.stdout.contains(CodebasesAtts));
354         Assert.assertTrue(pr.stdout.contains("id: 1"));
355         Assert.assertTrue(pr.stdout.contains("BID0"));
356     }
357 
358     @NeedsDisplay
359     @Test
360     @TestInBrowsers(testIn = Browsers.one)
codebasesAttsTestWorksHtml1_empty()361     public void codebasesAttsTestWorksHtml1_empty() throws Exception {
362         prepare("\"\"");
363         ProcessResult pr = server.executeBrowser(HTML, new AutoOkClosingListener(), new AutoErrorClosingListener());
364         Assert.assertTrue(pr.stdout.contains(appletCloseString));
365         Assert.assertTrue(pr.stdout.contains(CodebasesAtts));
366         Assert.assertTrue(pr.stdout.contains("id: 1"));
367         Assert.assertTrue(pr.stdout.contains("BID0"));
368     }
369 
370     @NeedsDisplay
371     @Test
372     @TestInBrowsers(testIn = Browsers.one)
codebasesAttsTestWorksJHtml1_space()373     public void codebasesAttsTestWorksJHtml1_space() throws Exception {
374         prepare("\" \"");
375         ProcessResult pr = server.executeBrowser(HTML, new AutoOkClosingListener(), new AutoErrorClosingListener());
376         Assert.assertTrue(pr.stdout.contains(appletCloseString));
377         Assert.assertTrue(pr.stdout.contains(CodebasesAtts));
378         Assert.assertTrue(pr.stdout.contains("id: 1"));
379         Assert.assertTrue(pr.stdout.contains("BID0"));
380     }
381 
382     @NeedsDisplay
383     @Test
384     @TestInBrowsers(testIn = Browsers.one)
codebasesAttsTestWorksHtml1_spaces()385     public void codebasesAttsTestWorksHtml1_spaces() throws Exception {
386         prepare("\"     \"");
387         ProcessResult pr = server.executeBrowser(HTML, new AutoOkClosingListener(), new AutoErrorClosingListener());
388         Assert.assertTrue(pr.stdout.contains(appletCloseString));
389         Assert.assertTrue(pr.stdout.contains(CodebasesAtts));
390         Assert.assertTrue(pr.stdout.contains("id: 1"));
391         Assert.assertTrue(pr.stdout.contains("BID0"));
392     }
393 
394     @NeedsDisplay
395     @Test
396     @TestInBrowsers(testIn = Browsers.one)
397     @Bug(id = "PR2489")
codebasesAttsTestWorksHtml1_null()398     public void codebasesAttsTestWorksHtml1_null() throws Exception {
399         prepare(null);
400         ProcessResult pr = server.executeBrowser(HTML, new AutoOkClosingListener(), new AutoErrorClosingListener());
401         Assert.assertTrue(pr.stdout.contains(appletCloseString));
402         Assert.assertTrue(pr.stdout.contains(CodebasesAtts));
403         Assert.assertTrue(pr.stdout.contains("id: 1"));
404         Assert.assertTrue(pr.stdout.contains("BID0"));
405     }
406 
407     @NeedsDisplay
408     @Test
409     @TestInBrowsers(testIn = Browsers.one)
codebasesAttsTestWorksHtml1_value()410     public void codebasesAttsTestWorksHtml1_value() throws Exception {
411         prepare(server.getUrl().toString());
412         ProcessResult pr = server.executeBrowser(HTML, new AutoOkClosingListener(), new AutoErrorClosingListener());
413         Assert.assertTrue(pr.stdout.contains(appletCloseString));
414         Assert.assertTrue(pr.stdout.contains(CodebasesAtts));
415         Assert.assertTrue(pr.stdout.contains("id: 1"));
416         Assert.assertTrue(pr.stdout.contains("BID0"));
417     }
418 
419     @NeedsDisplay
420     @Test
421     @TestInBrowsers(testIn = Browsers.one)
422     //all three are valid, but on l one bug is supported now
423     //@Bug(id = "http://mail.openjdk.java.net/pipermail/distro-pkg-dev/2016-January/034446.html")
424     //@Bug(id = "http://icedtea.classpath.org/hg/release/icedtea-web-1.6/rev/0d9faf51357d")
425     @Bug(id = "http://icedtea.classpath.org/hg/icedtea-web/rev/22b7becd48a7")
codebasesAttsTestWorksHtml1_value2()426     public void codebasesAttsTestWorksHtml1_value2() throws Exception {
427         prepare(secondValidServer.getUrl().toString());
428         ProcessResult pr = server.executeBrowser(HTML, new AutoOkClosingListener(), new AutoErrorClosingListener());
429         Assert.assertTrue(pr.stdout.contains(appletCloseString));
430         Assert.assertTrue(pr.stdout.contains(CodebasesAtts));
431         Assert.assertTrue(pr.stdout.contains("id: 1")); //param comes from original jnlp, this will be visible on jnlp_href
432         Assert.assertTrue(pr.stdout.contains("BID2"));
433     }
434 
435     @NeedsDisplay
436     @Test
437     @TestInBrowsers(testIn = Browsers.one)
codebasesAttsTestWorksHtml1_value3()438     public void codebasesAttsTestWorksHtml1_value3() throws Exception {
439         prepare(secondValidServer.getUrl().toString());
440         ProcessResult pr = server.executeBrowser(null, new URL(secondValidServer.getUrl().toString() + "/" + HTML), new AutoOkClosingListener(), new AutoErrorClosingListener());
441         Assert.assertTrue(pr.stdout.contains(appletCloseString));
442         Assert.assertTrue(pr.stdout.contains(CodebasesAtts));
443         Assert.assertTrue(pr.stdout.contains("id: 2"));
444         Assert.assertTrue(pr.stdout.contains("BID2"));
445     }
446 
447     //value3 and 4 tests ar emoreover testing taht our three servers are working as expected.
448     @NeedsDisplay
449     @Test
450     @TestInBrowsers(testIn = Browsers.one)
451     //all three are valid, but on l one bug is supported now
452     @Bug(id = "http://mail.openjdk.java.net/pipermail/distro-pkg-dev/2016-January/034446.html")
453     //@Bug(id = "http://icedtea.classpath.org/hg/release/icedtea-web-1.6/rev/0d9faf51357d")
454     //@Bug(id = "http://icedtea.classpath.org/hg/icedtea-web/rev/22b7becd48a7")
codebasesAttsTestWorksHtml1_value4()455     public void codebasesAttsTestWorksHtml1_value4() throws Exception {
456         prepare(server.getUrl().toString());
457         ProcessResult pr = server.executeBrowser(null, new URL(secondValidServer.getUrl().toString() + "/" + HTML), new AutoOkClosingListener(), new AutoErrorClosingListener());
458         Assert.assertTrue(pr.stdout.contains(appletCloseString));
459         Assert.assertTrue(pr.stdout.contains(CodebasesAtts));
460         Assert.assertTrue(pr.stdout.contains("id: 2")); //param comes from original jnlp, this will be visible on jnlp_href
461         Assert.assertTrue(pr.stdout.contains("BID0"));
462     }
463 
464     @NeedsDisplay
465     @Test
466     @TestInBrowsers(testIn = Browsers.one)
codebasesAttsTestWorksHtml2_dot()467     public void codebasesAttsTestWorksHtml2_dot() throws Exception {
468         prepare("\".\"");
469         ProcessResult pr = server.executeBrowser(HTMLHREF, new AutoOkClosingListener(), new AutoErrorClosingListener());
470         Assert.assertTrue(pr.stdout.contains(appletCloseString));
471         Assert.assertTrue(pr.stdout.contains(CodebasesAtts));
472         Assert.assertTrue(pr.stdout.contains("id: 1"));
473         Assert.assertTrue(pr.stdout.contains("BID0"));
474     }
475 
476     @NeedsDisplay
477     @Test
478     @TestInBrowsers(testIn = Browsers.one)
codebasesAttsTestWorksHtml2_empty()479     public void codebasesAttsTestWorksHtml2_empty() throws Exception {
480         prepare("\"\"");
481         ProcessResult pr = server.executeBrowser(HTMLHREF, new AutoOkClosingListener(), new AutoErrorClosingListener());
482         Assert.assertTrue(pr.stdout.contains(appletCloseString));
483         Assert.assertTrue(pr.stdout.contains(CodebasesAtts));
484         Assert.assertTrue(pr.stdout.contains("id: 1"));
485         Assert.assertTrue(pr.stdout.contains("BID0"));
486     }
487 
488     @NeedsDisplay
489     @Test
490     @TestInBrowsers(testIn = Browsers.one)
codebasesAttsTestWorksJHtml2_space()491     public void codebasesAttsTestWorksJHtml2_space() throws Exception {
492         prepare("\" \"");
493         ProcessResult pr = server.executeBrowser(HTMLHREF, new AutoOkClosingListener(), new AutoErrorClosingListener());
494         Assert.assertTrue(pr.stdout.contains(appletCloseString));
495         Assert.assertTrue(pr.stdout.contains(CodebasesAtts));
496         Assert.assertTrue(pr.stdout.contains("id: 1"));
497         Assert.assertTrue(pr.stdout.contains("BID0"));
498     }
499 
500     @NeedsDisplay
501     @Test
502     @TestInBrowsers(testIn = Browsers.one)
codebasesAttsTestWorksHtml2_spaces()503     public void codebasesAttsTestWorksHtml2_spaces() throws Exception {
504         prepare("\"     \"");
505         ProcessResult pr = server.executeBrowser(HTMLHREF, new AutoOkClosingListener(), new AutoErrorClosingListener());
506         Assert.assertTrue(pr.stdout.contains(appletCloseString));
507         Assert.assertTrue(pr.stdout.contains(CodebasesAtts));
508         Assert.assertTrue(pr.stdout.contains("id: 1"));
509         Assert.assertTrue(pr.stdout.contains("BID0"));
510     }
511 
512     @NeedsDisplay
513     @Test
514     @TestInBrowsers(testIn = Browsers.one)
515     @Bug(id = "PR2489")
codebasesAttsTestWorksHtml2_null()516     public void codebasesAttsTestWorksHtml2_null() throws Exception {
517         prepare(null);
518         ProcessResult pr = server.executeBrowser(HTMLHREF, new AutoOkClosingListener(), new AutoErrorClosingListener());
519         Assert.assertTrue(pr.stdout.contains(appletCloseString));
520         Assert.assertTrue(pr.stdout.contains(CodebasesAtts));
521         Assert.assertTrue(pr.stdout.contains("id: 1"));
522         Assert.assertTrue(pr.stdout.contains("BID0"));
523     }
524 
525     @NeedsDisplay
526     @Test
527     @TestInBrowsers(testIn = Browsers.one)
codebasesAttsTestWorksHtml2_value()528     public void codebasesAttsTestWorksHtml2_value() throws Exception {
529         prepare(server.getUrl().toString());
530         ProcessResult pr = server.executeBrowser(HTMLHREF, new AutoOkClosingListener(), new AutoErrorClosingListener());
531         Assert.assertTrue(pr.stdout.contains(appletCloseString));
532         Assert.assertTrue(pr.stdout.contains(CodebasesAtts));
533         Assert.assertTrue(pr.stdout.contains("id: 1"));
534         Assert.assertTrue(pr.stdout.contains("BID0"));
535     }
536 
537     @NeedsDisplay
538     @Test
539     @TestInBrowsers(testIn = Browsers.one)
540     //all three are valid, but on l one bug is supported now
541     //@Bug(id = "http://mail.openjdk.java.net/pipermail/distro-pkg-dev/2016-January/034446.html")
542     @Bug(id = "http://icedtea.classpath.org/hg/release/icedtea-web-1.6/rev/0d9faf51357d")
543     //@Bug(id = "http://icedtea.classpath.org/hg/icedtea-web/rev/22b7becd48a7")
codebasesAttsTestWorksHtml2_value2()544     public void codebasesAttsTestWorksHtml2_value2() throws Exception {
545         prepare(secondValidServer.getUrl().toString());
546         ProcessResult pr = server.executeBrowser(HTMLHREF, new AutoOkClosingListener(), new AutoErrorClosingListener());
547         Assert.assertTrue(pr.stdout.contains(appletCloseString));
548         Assert.assertTrue(pr.stdout.contains(CodebasesAtts));
549         Assert.assertTrue(pr.stdout.contains("id: 1")); //param comes from original jnlp, this will be visible on SECOND jnlp_href tests
550         Assert.assertTrue(pr.stdout.contains("BID2"));
551     }
552 
553     @NeedsDisplay
554     @Test
555     @TestInBrowsers(testIn = Browsers.one)
codebasesAttsTestWorksHtml2_value3()556     public void codebasesAttsTestWorksHtml2_value3() throws Exception {
557         prepare(secondValidServer.getUrl().toString());
558         ProcessResult pr = server.executeBrowser(null, new URL(secondValidServer.getUrl().toString() + "/" + HTMLHREF), new AutoOkClosingListener(), new AutoErrorClosingListener());
559         Assert.assertTrue(pr.stdout.contains(appletCloseString));
560         Assert.assertTrue(pr.stdout.contains(CodebasesAtts));
561         Assert.assertTrue(pr.stdout.contains("id: 2"));
562         Assert.assertTrue(pr.stdout.contains("BID2"));
563     }
564 
565     //value3 and 4 tests ar emoreover testing taht our three servers are working as expected.
566     @NeedsDisplay
567     @Test
568     @TestInBrowsers(testIn = Browsers.one)
569     //all three are valid, but on l one bug is supported now
570     //@Bug(id = "http://mail.openjdk.java.net/pipermail/distro-pkg-dev/2016-January/034446.html")
571     //@Bug(id = "http://icedtea.classpath.org/hg/release/icedtea-web-1.6/rev/0d9faf51357d")
572     @Bug(id = "http://icedtea.classpath.org/hg/icedtea-web/rev/22b7becd48a7")
codebasesAttsTestWorksHtml2_value4()573     public void codebasesAttsTestWorksHtml2_value4() throws Exception {
574         prepare(server.getUrl().toString());
575         ProcessResult pr = server.executeBrowser(null, new URL(secondValidServer.getUrl().toString() + "/" + HTMLHREF), new AutoOkClosingListener(), new AutoErrorClosingListener());
576         Assert.assertTrue(pr.stdout.contains(appletCloseString));
577         Assert.assertTrue(pr.stdout.contains(CodebasesAtts));
578         Assert.assertTrue(pr.stdout.contains("id: 2")); //param comes from original jnlp, this will be visible on jnlp_href
579         Assert.assertTrue(pr.stdout.contains("BID0"));
580     }
581 
prepare(String codebase)582     private static void prepare(String codebase) throws IOException {
583         prepare(codebase, codebase);
584     }
585 
prepare(String codebase1, String codebase2)586     private static void prepare(String codebase1, String codebase2) throws IOException {
587         prepareSingle(codebase1, null, null, '1', ServerAccess.getInstance().getDir(), files);
588         prepareSingle(codebase2, null, null, '2', secondValidServer.getDir(), files);
589     }
590 
prepareSingle(URL codebase, String jnlphref, String jar, char id, File targetDir, String[] files)591     public static void prepareSingle(URL codebase, String jnlphref, String jar, char id, File targetDir, String[] files) throws IOException {
592         prepareSingle(codebase.toExternalForm(), jnlphref, jar, id, targetDir, files);
593     }
prepareSingle(String codebase, String jnlphref, String jar, char id, File targetDir, String[] files)594     public static void prepareSingle(String codebase, String jnlphref, String jar, char id, File targetDir, String[] files) throws IOException {
595         File srcDir = ServerAccess.getInstance().getDir();
596         for (String file : files) {
597             String s1 = FileUtils.loadFileAsString(new File(srcDir, file + ".in"));
598             if (codebase == null) {
599                 s1 = s1.replace("@CODEBASE@", "");
600             } else {
601                 s1 = s1.replace("@CODEBASE@", "codebase=\"" + codebase + "\"");
602             }
603             if (jnlphref == null) {
604                 s1 = s1.replace("@JNLPHREF@", "CodebasesAttsApplet.jnlp");
605             } else {
606                 s1 = s1.replace("@JNLPHREF@", jnlphref + "/CodebasesAttsApplet.jnlp");
607             }
608             if (jar == null) {
609                 s1 = s1.replace("@JAR@", "CodebasesAtts");
610             } else {
611                 s1 = s1.replace("@JAR@", jar + "/CodebasesAtts");
612             }
613             s1 = s1.replace("@ID@", "" + id);
614             FileUtils.saveFile(s1, new File(targetDir, file));
615         }
616         String n = "CodebasesAtts.jar";
617         if (!srcDir.equals(targetDir)) {
618             copyJarAndChange(new File(srcDir, n), new File(targetDir, n), id);
619         }
620     }
621 
622     /**
623      * This copy zip jar entry by entry, and for one particular class it do BYTE
624      * changes
625      *
626      * @param from
627      * @param to
628      * @param id
629      * @throws FileNotFoundException
630      * @throws IOException
631      */
copyJarAndChange(File from, File to, char id)632     private static void copyJarAndChange(File from, File to, char id) throws FileNotFoundException, IOException {
633         ZipFile original = new ZipFile(from);
634         try (ZipOutputStream outputStream = new ZipOutputStream(new FileOutputStream(to))) {
635             Enumeration entries = original.entries();
636             byte[] buffer = new byte[512];
637             while (entries.hasMoreElements()) {
638                 ZipEntry entry = (ZipEntry) entries.nextElement();
639                 if (entry.getName().endsWith("CodebasesAtts.class")) {
640                     ZipEntry newEntry = new ZipEntry(entry.getName());
641                     outputStream.putNextEntry(newEntry);
642                     try (InputStream in = original.getInputStream(entry)) {
643                         copyStreamAndChange(in, outputStream, id);
644                     }
645                 } else {
646                     ZipEntry newEntry = new ZipEntry(entry.getName());
647                     outputStream.putNextEntry(newEntry);
648                     try (InputStream in = original.getInputStream(entry)) {
649                         while (0 < in.available()) {
650                             int read = in.read(buffer);
651                             outputStream.write(buffer, 0, read);
652                         }
653                     }
654                 }
655                 outputStream.closeEntry();
656             }
657         }
658     }
659 
660     /**
661      * This changes bytes BID0 to BID'idchar'.
662      *
663      * @param din
664      * @param dout
665      * @param id
666      * @throws FileNotFoundException
667      * @throws IOException
668      */
copyStreamAndChange(InputStream din, OutputStream dout, char id)669     private static void copyStreamAndChange(InputStream din, OutputStream dout, char id) throws FileNotFoundException, IOException {
670         int c;
671         final boolean[] BID0 = new boolean[]{false, false, false};
672         while ((c = din.read()) != -1) {
673             if (c == 'B') {
674                 BID0[0] = true;
675                 dout.write((byte) c);
676             } else if (c == 'I' && BID0[0]) {
677                 BID0[1] = true;
678                 dout.write((byte) c);
679             } else if (c == 'D' && BID0[1]) {
680                 BID0[2] = true;
681                 dout.write((byte) c);
682             } else if (c == '0' && BID0[2]) {
683                 dout.write((byte) id);
684                 reset(BID0);
685             } else {
686                 reset(BID0);
687                 dout.write((byte) c);
688             }
689         }
690     }
691 
reset(final boolean[] b)692     private static void reset(final boolean[] b) {
693         for (int i = 0; i < b.length; i++) {
694             b[i] = false;
695 
696         }
697     }
698 
699 }
700