1 package org.apache.maven.shared.jarsigner;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.io.File;
23 import java.io.IOException;
24 import java.util.Map;
25 import java.util.jar.Attributes;
26 import java.util.jar.JarFile;
27 import java.util.jar.Manifest;
28
29
30
31
32
33
34
35 public class JarSignerUtilTest
36 extends AbstractJarSignerTest
37 {
38
39
40 public void testUnsignArchive()
41 throws Exception
42 {
43
44 File target = prepareTestJar( "javax.persistence_2.0.5.v201212031355.jar" );
45
46 assertTrue( JarSignerUtil.isArchiveSigned( target ) );
47
48
49 Manifest originalManifest = readManifest( target );
50 assertTrue( containsDigest( originalManifest ) );
51
52 Manifest originalCleanManifest = JarSignerUtil.buildUnsignedManifest( originalManifest );
53 assertFalse( containsDigest( originalCleanManifest ) );
54
55 assertTrue( originalCleanManifest.equals( JarSignerUtil.buildUnsignedManifest( originalCleanManifest ) ) );
56
57 JarSignerUtil.unsignArchive( target );
58
59 assertFalse( JarSignerUtil.isArchiveSigned( target ) );
60
61
62
63 Manifest manifest = readManifest( target );
64
65 Manifest cleanManifest = JarSignerUtil.buildUnsignedManifest( manifest );
66 assertFalse( containsDigest( cleanManifest ) );
67
68 assertTrue( manifest.equals( cleanManifest ) );
69 assertTrue( manifest.equals( originalCleanManifest ) );
70
71 }
72
73 private Manifest readManifest( File file )
74 throws IOException
75 {
76 JarFile jarFile = new JarFile( file );
77
78 Manifest manifest = jarFile.getManifest();
79
80 jarFile.close();
81
82 return manifest;
83 }
84
85 private boolean containsDigest( Manifest manifest )
86 {
87 for ( Map.Entry<String, Attributes> entry : manifest.getEntries().entrySet() )
88 {
89 Attributes attr = entry.getValue();
90
91 for ( Map.Entry<Object, Object> objectEntry : attr.entrySet() )
92 {
93 String attributeKey = String.valueOf( objectEntry.getKey() );
94 if ( attributeKey.endsWith( "-Digest" ) )
95 {
96 return true;
97 }
98 }
99 }
100 return false;
101 }
102 }