This Bugzilla instance is a read-only archive of historic NetBeans bug reports. To report a bug in NetBeans please follow the project's instructions for reporting issues.

View | Details | Raw Unified | Return to bug 98371
Collapse All | Expand All

(-)apisupport/harness/release/README (-1 / +6 lines)
Lines 832-840 Link Here
832
832
833
jnlp.permissions - allows altering of the fragment in the resulting .jnlp file
833
jnlp.permissions - allows altering of the fragment in the resulting .jnlp file
834
  that sets the permissions for individual modules. The default value is
834
  that sets the permissions for individual modules. The default value is
835
  <security><all-permissions/></security>
835
  <security><all-permissions/></security> when jnlp.sign.jars
836
  is true, <security/> when jnlp.sign.jars is false.
836
  If you want to change the default to something else please define the value
837
  If you want to change the default to something else please define the value
837
  of the property.
838
  of the property.
839
840
jnlp.sign.jars [since 6.0] - defaults to true. If set to false the jars 
841
  will not be signed, only the main (startup) jar. This should allow for 
842
  faster startup but might compromise JNLP security. Use with extreme care.
838
843
839
[XXX some of the above should be listed in "Suite Properties"]
844
[XXX some of the above should be listed in "Suite Properties"]
840
845
(-)apisupport/harness/release/jnlp.xml (-20 / +77 lines)
Lines 42-47 Link Here
42
  </information>
42
  </information>
43
  <security><all-permissions/></security>
43
  <security><all-permissions/></security>
44
  <resources>
44
  <resources>
45
    <!-- The following property is needed when running with unsigned jars: -->
46
    <property name="netbeans.jnlp.fixPolicy" value="$${netbeans.jnlp.fixPolicy}"/>
47
    <extension name='branding' href='branding.jnlp' />
45
<!-- The following line will be replaced with an automatically generated list of resources: -->    
48
<!-- The following line will be replaced with an automatically generated list of resources: -->    
46
<!--$${jnlp.resources}-->
49
<!--$${jnlp.resources}-->
47
  </resources>
50
  </resources>
Lines 54-59 Link Here
54
  </application-desc>
57
  </application-desc>
55
</jnlp>  
58
</jnlp>  
56
]]></echo>
59
]]></echo>
60
        <echo file="branding.jnlp"><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
61
<jnlp spec="1.0+" codebase="${jnlp.codebase}">
62
  <information>
63
      <title>$${app.title}</title>
64
      <vendor>$${app.title} vendor</vendor>
65
      <description>$${app.name} application</description>
66
      <icon href="$${app.icon}"/>
67
  </information>
68
  <security>$${jnlp.permissions}</security>
69
  <resources>
70
    $${jnlp.branding.jars}
71
  </resources>
72
  <component-desc/>
73
</jnlp>  
74
]]></echo>
57
    </target>
75
    </target>
58
    
76
    
59
    <target name="jnlp-init" depends="jnlp-init-generate-master">
77
    <target name="jnlp-init" depends="jnlp-init-generate-master">
Lines 105-111 Link Here
105
123
106
    <target name="jnlp-generate-platform" depends="jnlp-generate-platform-repository,jnlp-generate-platform-master"/>
124
    <target name="jnlp-generate-platform" depends="jnlp-generate-platform-repository,jnlp-generate-platform-master"/>
107
    
125
    
108
    <target name="jnlp-generate-platform-repository" depends="jnlp-generate-keystore,jnlp-init" unless="jnlp.platform.codebase">
126
    <target name="jnlp-generate-platform-repository" depends="jnlp-generate-keystore,jnlp-init,set-all-permissions,set-empty-permissions" unless="jnlp.platform.codebase">
109
        <condition property="jnlp.platform.codebase.own" value="${jnlp.codebase}netbeans/" >
127
        <condition property="jnlp.platform.codebase.own" value="${jnlp.codebase}netbeans/" >
110
            <not>
128
            <not>
111
                <equals arg1="${jnlp.codebase}" arg2="$$$$codebase" />
129
                <equals arg1="${jnlp.codebase}" arg2="$$$$codebase" />
Lines 113-119 Link Here
113
        </condition>
131
        </condition>
114
        <property name="jnlp.platform.codebase.own" value="$$$$codebase"/>
132
        <property name="jnlp.platform.codebase.own" value="$$$$codebase"/>
115
        <property name="jnlp.platform.codebase" value="netbeans/"/>
133
        <property name="jnlp.platform.codebase" value="netbeans/"/>
116
        <property name="jnlp.permissions" value="&lt;security&gt;&lt;all-permissions/&gt;&lt;/security&gt;"/>
117
        
134
        
118
        <mkdir dir="${jnlp.dest.dir}/netbeans"/>
135
        <mkdir dir="${jnlp.dest.dir}/netbeans"/>
119
        
136
        
Lines 126-135 Link Here
126
            verify="true"
143
            verify="true"
127
            verifyexcludes="lib/nbexec.cmd,lib/nbexec,lib/nbexec.exe,core/ide.ks,LICENSE.txt,DISTRIBUTION.txt,THIRDPARTYLICENSEREADME.txt,docs/swing-layout-1.0-doc.zip,docs/swing-layout-1.0.1-doc.zip,docs/html40.zip,core/org-netbeans-modules-utilities-cli.jar,docs/org/netbeans/modules/usersguide/ide.css"
144
            verifyexcludes="lib/nbexec.cmd,lib/nbexec,lib/nbexec.exe,core/ide.ks,LICENSE.txt,DISTRIBUTION.txt,THIRDPARTYLICENSEREADME.txt,docs/swing-layout-1.0-doc.zip,docs/swing-layout-1.0.1-doc.zip,docs/html40.zip,core/org-netbeans-modules-utilities-cli.jar,docs/org/netbeans/modules/usersguide/ide.css"
128
            permissions="${jnlp.permissions}"
145
            permissions="${jnlp.permissions}"
146
            signjars="${jnlp.sign.jars}"
129
        >
147
        >
130
            <modules refid="jnlp.included.modules"/>
148
            <modules refid="jnlp.included.modules"/>
131
        </makejnlp>
149
        </makejnlp>
132
    </target>
150
    </target>
151
152
    <target name="set-all-permissions" depends="check-signjars" if="unsign-the-jars">
153
        <property name="jnlp.permissions" value="&lt;security/&gt;"/>
154
    </target>
155
    <target name="set-empty-permissions" depends="check-signjars" unless="unsign-the-jars">
156
        <property name="jnlp.permissions" value="&lt;security&gt;&lt;all-permissions/&gt;&lt;/security&gt;"/>
157
    </target>
158
    
159
    <target name="check-signjars">
160
        <condition property="unsign-the-jars">
161
            <isfalse value="jnlp.sign.jars"/>
162
        </condition>
163
    </target>
133
    
164
    
134
    <target name="jnlp-generate-platform-master" depends="jnlp-generate-platform-repository">
165
    <target name="jnlp-generate-platform-master" depends="jnlp-generate-platform-repository">
135
        <makemasterjnlp 
166
        <makemasterjnlp 
Lines 219-243 Link Here
219
            <property name="jnlp.signjar.alias" value="${jnlp.signjar.alias}"/>
250
            <property name="jnlp.signjar.alias" value="${jnlp.signjar.alias}"/>
220
            <property name="jnlp.signjar.keystore" location="${jnlp.signjar.keystore}"/>
251
            <property name="jnlp.signjar.keystore" location="${jnlp.signjar.keystore}"/>
221
            <property name="jnlp.signjar.password" value="${jnlp.signjar.password}"/>
252
            <property name="jnlp.signjar.password" value="${jnlp.signjar.password}"/>
253
            <property name="jnlp.sign.jars" value="${jnlp.sign.jars}"/>
254
            <property name="jnlp.permissions" value="${jnlp.permissions}"/>
222
        </subant>
255
        </subant>
223
256
224
        <mkdir dir="${jnlp.dest.dir}/branding"/>
257
        <antcall target="copy-branding"/>
225
        <copy todir="${jnlp.dest.dir}/branding" flatten="true">
226
            <fileset dir="${cluster}">
227
                <include name="**/locale/*.jar"/>
228
            </fileset>
229
        </copy>
230
        
231
        <signjar
232
            alias="${jnlp.signjar.alias}" 
233
            keystore="${jnlp.signjar.keystore}" 
234
            storepass="${jnlp.signjar.password}" 
235
        >
236
            <fileset dir="${jnlp.dest.dir}/branding">
237
                <include name="*_${branding.token}.jar"/>
238
            </fileset>
239
        </signjar>
240
        
241
        
258
        
242
        <signjar 
259
        <signjar 
243
            alias="${jnlp.signjar.alias}" 
260
            alias="${jnlp.signjar.alias}" 
Lines 260-266 Link Here
260
    <j2se version="1.4+"/>
277
    <j2se version="1.4+"/>
261
    <jar href="startup.jar"/>
278
    <jar href="startup.jar"/>
262
    <property name="netbeans.user" value="$${user.home}/.nbapp-${app.name}"/>
279
    <property name="netbeans.user" value="$${user.home}/.nbapp-${app.name}"/>
263
    ${jnlp.branding.jars}
264
]]></echo>
280
]]></echo>
265
        <concat append="true" destfile="${jnlp.master.dir}/resources.xml">
281
        <concat append="true" destfile="${jnlp.master.dir}/resources.xml">
266
            <fileset dir="${jnlp.master.dir}">
282
            <fileset dir="${jnlp.master.dir}">
Lines 269-274 Link Here
269
        </concat>
285
        </concat>
270
        
286
        
271
        <loadfile property="jnlp.resources" srcfile="${jnlp.master.dir}/resources.xml"/>
287
        <loadfile property="jnlp.resources" srcfile="${jnlp.master.dir}/resources.xml"/>
288
289
        <condition property="netbeans.jnlp.fixPolicy">
290
            <isfalse value="jnlp.sign.jars"/>
291
        </condition>
292
        <!-- Anyone knows a better way to negate a property value? -->
293
        <condition property="netbeans.jnlp.fixPolicy" value="false">
294
            <istrue value="jnlp.sign.jars"/>
295
        </condition>
272
        
296
        
273
        <copy file="${app.icon}" tofile="${jnlp.dest.dir}/master.png" failonerror="false"/>
297
        <copy file="${app.icon}" tofile="${jnlp.dest.dir}/master.png" failonerror="false"/>
274
        <copy file="master.jnlp" tofile="${jnlp.dest.dir}/master.jnlp">
298
        <copy file="master.jnlp" tofile="${jnlp.dest.dir}/master.jnlp">
Lines 279-289 Link Here
279
                <replacestring from="$${app.title}" to="${app.title}"/>
303
                <replacestring from="$${app.title}" to="${app.title}"/>
280
                <replacestring from="$${app.icon}" to="master.png"/>
304
                <replacestring from="$${app.icon}" to="master.png"/>
281
                <replacestring from="$${branding.token}" to="${branding.token}"/>
305
                <replacestring from="$${branding.token}" to="${branding.token}"/>
306
                <replacestring from="$${netbeans.jnlp.fixPolicy}" to="${netbeans.jnlp.fixPolicy}"/>
282
            </filterchain>
307
            </filterchain>
283
        </copy>
308
        </copy>
284
        <echo>Your JNLP file is generated at ${jnlp.dest.dir}/master.jnlp</echo>
309
        <echo>Your JNLP file is generated at ${jnlp.dest.dir}/master.jnlp</echo>
310
        <copy file="branding.jnlp" tofile="${jnlp.dest.dir}/branding.jnlp">
311
            <filterchain>
312
                <replacestring from="$${jnlp.branding.jars}" to="${jnlp.branding.jars}"/>
313
                <replacestring from="$${app.name}" to="${app.name}"/>
314
                <replacestring from="$${app.title}" to="${app.title}"/>
315
                <replacestring from="$${app.icon}" to="master.png"/>
316
                <replacestring from="$${jnlp.permissions}" to="${jnlp.permissions}"/>
317
            </filterchain>
318
        </copy>
285
    </target>
319
    </target>
286
    
320
    
321
    <target name="sign-branding-jars" unless="unsign-the-jars" depends="copy-branding-jars">
322
        <signjar
323
            alias="${jnlp.signjar.alias}" 
324
            keystore="${jnlp.signjar.keystore}" 
325
            storepass="${jnlp.signjar.password}" 
326
        >
327
            <fileset dir="${jnlp.dest.dir}/branding">
328
                <include name="*_${branding.token}.jar"/>
329
            </fileset>
330
        </signjar>
331
    </target>
332
333
    <target name="copy-branding" depends="copy-branding-jars, sign-branding-jars"/>
334
335
    <target name="copy-branding-jars">
336
        <mkdir dir="${jnlp.dest.dir}/branding"/>
337
        <copy todir="${jnlp.dest.dir}/branding" flatten="true">
338
            <fileset dir="${cluster}">
339
                <include name="**/locale/*.jar"/>
340
            </fileset>
341
        </copy>
342
    </target>
343
287
    <target name="run" depends="build-jnlp-local" description="Executes this suite as JNLP application">
344
    <target name="run" depends="build-jnlp-local" description="Executes this suite as JNLP application">
288
        <condition property="run.javaws" value="${nbjdk.home}/jre/javaws/javaws">
345
        <condition property="run.javaws" value="${nbjdk.home}/jre/javaws/javaws">
289
            <available file="${nbjdk.home}/jre/javaws/javaws"/>
346
            <available file="${nbjdk.home}/jre/javaws/javaws"/>
(-)nbbuild/antsrc/org/netbeans/nbbuild/MakeJNLP.java (-11 / +39 lines)
Lines 134-139 Link Here
134
        indirectJars = fs;
134
        indirectJars = fs;
135
    }
135
    }
136
    
136
    
137
    private boolean signJars = true;
138
    /**
139
     * Whether the final jars should be signed or not. Deafults to true
140
     * (if not supplied).
141
     */
142
    public void setSignJars(boolean s) {
143
        this.signJars = s;
144
    }
145
    
137
    public void execute() throws BuildException {
146
    public void execute() throws BuildException {
138
        if (target == null) throw new BuildException("Output dir must be provided");
147
        if (target == null) throw new BuildException("Output dir must be provided");
139
        if (files == null) throw new BuildException("modules must be provided");
148
        if (files == null) throw new BuildException("modules must be provided");
Lines 239-248 Link Here
239
                        }
248
                        }
240
                        File t = new File(new File(target, dashcnb), name);
249
                        File t = new File(new File(target, dashcnb), name);
241
                        
250
                        
242
                        getSignTask().setJar(n);
251
                        if (signJars) {
243
                        getSignTask().setSignedjar(t);
252
                            getSignTask().setJar(n);
244
                        getSignTask().execute();
253
                            getSignTask().setSignedjar(t);
245
                        
254
                            getSignTask().execute();
255
                        } else {
256
                            Copy copy = (Copy)getProject().createTask("copy");
257
                            copy.setFile(n);
258
                            copy.setTofile(t);
259
                            copy.execute();
260
                        }
246
                        writeJNLP.write("    <jar href='" + dashcnb + '/' + name + "'/>\n");
261
                        writeJNLP.write("    <jar href='" + dashcnb + '/' + name + "'/>\n");
247
                    }
262
                    }
248
263
Lines 259-268 Link Here
259
            w.write(writeJNLP.toString());
274
            w.write(writeJNLP.toString());
260
            w.close();
275
            w.close();
261
276
262
            getSignTask().setJar(jar);
277
            if (signJars) {
263
            getSignTask().setSignedjar(signed);
278
                getSignTask().setJar(jar);
264
            getSignTask().execute();
279
                getSignTask().setSignedjar(signed);
265
                
280
                getSignTask().execute();
281
            } else {
282
                Copy copy = (Copy)getProject().createTask("copy");
283
                copy.setFile(jar);
284
                copy.setTofile(signed);
285
                copy.execute();
286
            }
266
                
287
                
267
            theJar.close();
288
            theJar.close();
268
        }
289
        }
Lines 446-454 Link Here
446
                
467
                
447
                fileWriter.write("    <jar href='" + dashcnb + '/' + ext.getName() + "'/>\n");
468
                fileWriter.write("    <jar href='" + dashcnb + '/' + ext.getName() + "'/>\n");
448
469
449
                getSignTask().setJar(e);
470
                if (signJars) {
450
                getSignTask().setSignedjar(ext);
471
                    getSignTask().setJar(e);
451
                getSignTask().execute();
472
                    getSignTask().setSignedjar(ext);
473
                    getSignTask().execute();
474
                } else {
475
                    Copy copy = (Copy)getProject().createTask("copy");
476
                    copy.setFile(e);
477
                    copy.setTofile(ext);
478
                    copy.execute();
479
                }
452
            }
480
            }
453
        }
481
        }
454
    }
482
    }
(-)nbbuild/templates/common.xml (+1 lines)
Lines 260-265 Link Here
260
            verify="true"
260
            verify="true"
261
            verifyexcludes="${jnlp.verify.excludes}"
261
            verifyexcludes="${jnlp.verify.excludes}"
262
            permissions="${jnlp.permissions}"
262
            permissions="${jnlp.permissions}"
263
            signjars="${jnlp.sign.jars}"
263
        >
264
        >
264
            <modules dir="${cluster}" >
265
            <modules dir="${cluster}" >
265
                <include name="${module.jar}" />
266
                <include name="${module.jar}" />
(-)nbbuild/test/unit/src/org/netbeans/nbbuild/MakeJNLPTest.java (+153 lines)
Lines 125-130 Link Here
125
            fail ("File does not seem to be signed: " + jar);
125
            fail ("File does not seem to be signed: " + jar);
126
        }
126
        }
127
    }
127
    }
128
129
    public void testGenerateJNLPAndUnSignedJarForSimpleModule() throws Exception {
130
        Manifest m;
131
        
132
        m = ModuleDependenciesTest.createManifest ();
133
        m.getMainAttributes ().putValue ("OpenIDE-Module", "org.my.module/3");
134
        File simpleJar = generateJar (new String[0], m);
135
136
        File parent = simpleJar.getParentFile ();
137
        File output = new File(parent, "output");
138
        File ks = generateKeystore("jnlp", "netbeans-test");
139
        
140
        java.io.File f = PublicPackagesInProjectizedXMLTest.extractString (
141
            "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
142
            "<project name=\"Test Arch\" basedir=\".\" default=\"all\" >" +
143
            "  <taskdef name=\"jnlp\" classname=\"org.netbeans.nbbuild.MakeJNLP\" classpath=\"${nb_all}/nbbuild/nbantext.jar\"/>" +
144
            "<target name=\"all\" >" +
145
            "  <mkdir dir='" + output + "' />" + 
146
            "  <jnlp dir='" + output + "' alias='jnlp' storepass='netbeans-test' keystore='" + ks + "' signjars='false' >" +
147
            "    <modules dir='" + parent + "' >" +
148
            "      <include name='" + simpleJar.getName() + "' />" +
149
            "    </modules>" +
150
            "  </jnlp>" +
151
            "</target>" +
152
            "</project>"
153
        );
154
        PublicPackagesInProjectizedXMLTest.execute (f, new String[] { "-verbose" });
155
        
156
        assertFilenames(output, "org-my-module.jnlp", "org-my-module/s0.jar");
157
        
158
        File jnlp = new File(output, "org-my-module.jnlp");
159
        String res = ModuleDependenciesTest.readFile (jnlp);
160
        
161
        assertTrue ("Component JNLP type: " + res, res.indexOf ("<component-desc/>") >= 0);
162
        assertTrue ("We support all permitions by default: " + res, res.indexOf ("<all-permissions/>") >= 0);
163
        
164
        Matcher match = Pattern.compile(".*codebase=['\\\"]([^'\\\"]*)['\\\"]").matcher(res);
165
        assertTrue("codebase is there", match.find());
166
        assertEquals("one group found", 1, match.groupCount());
167
        String base = match.group(1);
168
        
169
        assertEquals("By default the dest directory is $$codebase: ", "$$codebase", base);
170
171
        File jar = new File(output, "org-my-module/s0.jar");
172
        JarFile signed = new JarFile(jar);
173
        Enumeration it = signed.entries();
174
        while (it.hasMoreElements()) {
175
            JarEntry entry = (JarEntry)it.nextElement();
176
            if (entry.getName().endsWith(".SF")) {
177
                fail ("File should not be signed: " + jar);
178
            }
179
        }
180
        
181
    }
128
    
182
    
129
    public void testTheLocalizedAutoupdateProblem() throws Exception {
183
    public void testTheLocalizedAutoupdateProblem() throws Exception {
130
        String UTfile =   
184
        String UTfile =   
Lines 338-343 Link Here
338
                }
392
                }
339
            }
393
            }
340
            fail ("File does not seem to be signed: " + jar);
394
            fail ("File does not seem to be signed: " + jar);
395
        }
396
    }
397
    
398
    public void testGenerateJNLPAndUnSignedJarForSimpleLocalizedModule() throws Exception {
399
        Manifest m;
400
        
401
        m = ModuleDependenciesTest.createManifest ();
402
        m.getMainAttributes ().putValue ("OpenIDE-Module", "org.my.module/3");
403
        File simpleJar = generateJar ("modules/", new String[0], m, null);
404
405
        File parent = simpleJar.getParentFile ();
406
        File localizedJarCZ = generateJar("modules/locale/", new String[0], ModuleDependenciesTest.createManifest(), null);
407
        assertEquals("There need to have the same name", simpleJar.getName(), localizedJarCZ.getName());
408
        assertTrue("Successful rename", localizedJarCZ.renameTo(new File(localizedJarCZ.getParent(), "0_cs.jar")));
409
        
410
        File localizedJarZH = generateJar("modules/locale/", new String[0], ModuleDependenciesTest.createManifest(), null);
411
        assertEquals("There need to have the same name", simpleJar.getName(), localizedJarZH.getName());
412
        assertTrue("Successful rename", localizedJarZH.renameTo(new File(localizedJarCZ.getParent(), "0_zh_CN.jar")));
413
        
414
        File localizedJarJA = generateJar("modules/locale/", new String[0], ModuleDependenciesTest.createManifest(), null);
415
        assertEquals("There need to have the same name", simpleJar.getName(), localizedJarJA.getName());
416
        assertTrue("Successful rename", localizedJarJA.renameTo(new File(localizedJarCZ.getParent(), "0_ja.jar")));
417
418
        File updateTracking = new File(getWorkDir(), "update_tracking");
419
        updateTracking.mkdirs();
420
        assertTrue("Created", updateTracking.isDirectory());
421
        
422
        File trackingFile = new File(updateTracking, "org-my-module.xml");
423
        FileWriter w = new FileWriter(trackingFile);
424
        w.write(
425
"<?xml version='1.0' encoding='UTF-8'?>\n" +
426
"<module codename='org.my.module/3'>\n" +
427
    "<module_version specification_version='3.22' origin='installer' last='true' install_time='1124194231878'>\n" +
428
        "<file name='modules/" + simpleJar.getName() + "' crc='3245456472'/>\n" +
429
        "<file name='config/Modules/org-my-module.xml' crc='43434' />\n" +
430
        "<file name='modules/locale/0_cs.jar' crc='454244' />\n" +
431
        "<file name='modules/locale/0_ja.jar' crc='779831' />\n" +
432
        "<file name='modules/locale/0_zh_CN.jar' crc='475345' />\n" +
433
"    </module_version>\n" +
434
"</module>\n"
435
        );
436
        w.close();
437
        
438
        
439
        File output = new File(parent, "output");
440
        File ks = generateKeystore("jnlp", "netbeans-test");
441
        
442
        java.io.File f = PublicPackagesInProjectizedXMLTest.extractString (
443
            "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
444
            "<project name=\"Test Arch\" basedir=\".\" default=\"all\" >" +
445
            "  <taskdef name=\"jnlp\" classname=\"org.netbeans.nbbuild.MakeJNLP\" classpath=\"${nb_all}/nbbuild/nbantext.jar\"/>" +
446
            "<target name=\"all\" >" +
447
            "  <mkdir dir='" + output + "' />" + 
448
            "  <jnlp dir='" + output + "' alias='jnlp' storepass='netbeans-test' keystore='" + ks + "' verify='true' signjars='false' >" +
449
            "    <modules dir='" + parent + "' >" +
450
            "      <include name='" + simpleJar.getName() + "' />" +
451
            "    </modules>" +
452
            "  </jnlp>" +
453
            "</target>" +
454
            "</project>"
455
        );
456
        PublicPackagesInProjectizedXMLTest.execute (f, new String[] { "-verbose" });
457
458
        assertFilenames(output, "org-my-module.jnlp",
459
                "org-my-module/0.jar",
460
                "org-my-module/locale-0_cs.jar",
461
                "org-my-module/locale-0_zh_CN.jar",
462
                "org-my-module/locale-0_ja.jar");
463
464
        File jnlp = new File(output, "org-my-module.jnlp");
465
        String res = ModuleDependenciesTest.readFile (jnlp);
466
        
467
        assertTrue ("Component JNLP type: " + res, res.indexOf ("<component-desc/>") >= 0);
468
        assertTrue ("We support all permissions by default: " + res, res.indexOf ("<all-permissions/>") >= 0);
469
        
470
        Matcher match = Pattern.compile(".*codebase=['\\\"]([^'\\\"]*)['\\\"]").matcher(res);
471
        assertTrue("codebase is there", match.find());
472
        assertEquals("one group found", 1, match.groupCount());
473
        String base = match.group(1);
474
        
475
        assertEquals("By default the dest directory is $$codebase: ", "$$codebase", base);
476
        
477
        assertResource(res, "cs", "org-my-module/locale-0_cs.jar");
478
        assertResource(res, "ja", "org-my-module/locale-0_ja.jar");
479
        assertResource(res, "zh_CN", "org-my-module/locale-0_zh_CN.jar");
480
481
        for (File jar : new File(output, "org-my-module").listFiles()) {
482
            if (!jar.getName().endsWith(".jar")) {
483
                continue;
484
            }
485
            
486
            JarFile signed = new JarFile(jar);
487
            Enumeration it = signed.entries();
488
            while (it.hasMoreElements()) {
489
                JarEntry entry = (JarEntry)it.nextElement();
490
                if (entry.getName().endsWith(".SF")) {
491
                    fail ("File does not seem to be signed: " + jar);
492
                }
493
            }
341
        }
494
        }
342
    }
495
    }
343
    
496
    

Return to bug 98371