]> source.dussan.org Git - archiva.git/blob
e7148fdf5469beb5ccea520eb56b13e8120fd988
[archiva.git] /
1 package org.apache.maven.archiva.reporting;
2
3 /*
4  * Copyright 2005-2006 The Apache Software Foundation.
5  *
6  * Licensed under the Apache License, Version 2.0 (the "License");
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  *      http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  */
18
19 import org.codehaus.plexus.digest.Digester;
20 import org.codehaus.plexus.digest.DigesterException;
21 import org.codehaus.plexus.util.FileUtils;
22 import org.codehaus.plexus.util.IOUtil;
23
24 import java.io.BufferedOutputStream;
25 import java.io.BufferedReader;
26 import java.io.File;
27 import java.io.FileOutputStream;
28 import java.io.FileReader;
29 import java.io.IOException;
30 import java.io.OutputStream;
31 import java.io.OutputStreamWriter;
32 import java.util.jar.JarEntry;
33 import java.util.jar.JarOutputStream;
34
35 /**
36  * This class creates the artifact and metadata files used for testing the ChecksumArtifactReportProcessor.
37  * It is extended by ChecksumArtifactReporterTest class.
38  */
39 public abstract class AbstractChecksumArtifactReporterTestCase
40     extends AbstractRepositoryReportsTestCase
41 {
42     private static final String[] validArtifactChecksumJars = {"validArtifact-1.0"};
43
44     private static final String[] invalidArtifactChecksumJars = {"invalidArtifact-1.0"};
45
46     private static final String metadataChecksumFilename = "maven-metadata";
47
48     private Digester sha1Digest;
49
50     private Digester md5Digest;
51
52     public void setUp()
53         throws Exception
54     {
55         super.setUp();
56
57         sha1Digest = (Digester) lookup( Digester.ROLE, "sha1" );
58         md5Digest = (Digester) lookup( Digester.ROLE, "md5" );
59     }
60
61     /**
62      * Create checksum files.
63      *
64      * @param type The type of checksum file to be created.
65      */
66     protected void createChecksumFile( String type )
67         throws DigesterException, IOException
68     {
69         //loop through the valid artifact names..
70         if ( "VALID".equals( type ) )
71         {
72             for ( int i = 0; i < validArtifactChecksumJars.length; i++ )
73             {
74                 writeChecksumFile( "checksumTest/", validArtifactChecksumJars[i], "jar", true );
75             }
76         }
77         else if ( "INVALID".equals( type ) )
78         {
79             for ( int i = 0; i < invalidArtifactChecksumJars.length; i++ )
80             {
81                 writeChecksumFile( "checksumTest/", invalidArtifactChecksumJars[i], "jar", false );
82             }
83         }
84     }
85
86     /**
87      * Create checksum files for metadata.
88      *
89      * @param type The type of checksum to be created. (Valid or invalid)
90      */
91     protected void createMetadataFile( String type )
92         throws DigesterException, IOException
93     {
94         //loop through the valid artifact names..
95         if ( "VALID".equals( type ) )
96         {
97             writeMetadataFile( "checksumTest/validArtifact/1.0/", metadataChecksumFilename, "xml", true );
98             writeMetadataFile( "checksumTest/validArtifact/", metadataChecksumFilename, "xml", true );
99             writeMetadataFile( "checksumTest/", metadataChecksumFilename, "xml", true );
100         }
101         else if ( "INVALID".equals( type ) )
102         {
103             writeMetadataFile( "checksumTest/invalidArtifact/1.0/", metadataChecksumFilename, "xml", false );
104         }
105     }
106
107     /**
108      * Create artifact together with its checksums.
109      *
110      * @param relativePath The groupId
111      * @param filename     The filename of the artifact to be created.
112      * @param type         The file type (JAR)
113      * @param isValid      Indicates whether the checksum to be created is valid or not.
114      */
115     private void writeChecksumFile( String relativePath, String filename, String type, boolean isValid )
116         throws IOException, DigesterException
117     {
118         //Initialize variables for creating jar files
119         String repoUrl = repository.getBasedir();
120
121         String dirs = filename.replace( '-', '/' );
122         //create the group level directory of the artifact
123         File dirFiles = new File( repoUrl + relativePath + dirs );
124
125         if ( dirFiles.mkdirs() )
126         {
127             // create a jar file
128             String path = repoUrl + relativePath + dirs + "/" + filename + "." + type;
129             FileOutputStream f = new FileOutputStream( path );
130             JarOutputStream out = new JarOutputStream( new BufferedOutputStream( f ) );
131
132             // jar sample.txt
133             String filename1 = repoUrl + relativePath + dirs + "/sample.txt";
134             createSampleFile( filename1 );
135
136             BufferedReader in = new BufferedReader( new FileReader( filename1 ) );
137             out.putNextEntry( new JarEntry( filename1 ) );
138             IOUtil.copy( in, out );
139             in.close();
140             out.close();
141
142             //Create md5 and sha-1 checksum files..
143
144             File file = new File( path + ".md5" );
145             OutputStream os = new FileOutputStream( file );
146             OutputStreamWriter osw = new OutputStreamWriter( os );
147             String sum = md5Digest.calc( new File( path ) );
148             if ( !isValid )
149             {
150                 osw.write( sum + "1" );
151             }
152             else
153             {
154                 osw.write( sum );
155             }
156             osw.close();
157
158             file = new File( path + ".sha1" );
159             os = new FileOutputStream( file );
160             osw = new OutputStreamWriter( os );
161             String sha1sum = sha1Digest.calc( new File( path ) );
162             if ( !isValid )
163             {
164                 osw.write( sha1sum + "2" );
165             }
166             else
167             {
168                 osw.write( sha1sum );
169             }
170             osw.close();
171         }
172     }
173
174     /**
175      * Create metadata file together with its checksums.
176      *
177      * @param relativePath The groupId
178      * @param filename     The filename of the artifact to be created.
179      * @param type         The file type (JAR)
180      * @param isValid      Indicates whether the checksum to be created is valid or not.
181      */
182     private void writeMetadataFile( String relativePath, String filename, String type, boolean isValid )
183         throws IOException, DigesterException
184     {
185         //create checksum for the metadata file..
186         String repoUrl = repository.getBasedir();
187         String url = repository.getBasedir() + "/" + filename + "." + type;
188
189         String path = repoUrl + relativePath + filename + "." + type;
190         FileUtils.copyFile( new File( url ), new File( path ) );
191
192         //Create md5 and sha-1 checksum files..
193         File file = new File( path + ".md5" );
194         OutputStream os = new FileOutputStream( file );
195         OutputStreamWriter osw = new OutputStreamWriter( os );
196         String md5sum = md5Digest.calc( new File( path ) );
197         if ( !isValid )
198         {
199             osw.write( md5sum + "1" );
200         }
201         else
202         {
203             osw.write( md5sum );
204         }
205         osw.close();
206
207         file = new File( path + ".sha1" );
208         os = new FileOutputStream( file );
209         osw = new OutputStreamWriter( os );
210         String sha1sum = sha1Digest.calc( new File( path ) );
211         if ( !isValid )
212         {
213             osw.write( sha1sum + "2" );
214         }
215         else
216         {
217             osw.write( sha1sum );
218         }
219         osw.close();
220     }
221
222     /**
223      * Create the sample file that will be included in the jar.
224      *
225      * @param filename
226      */
227     private void createSampleFile( String filename )
228         throws IOException
229     {
230         File file = new File( filename );
231         OutputStream os = new FileOutputStream( file );
232         OutputStreamWriter osw = new OutputStreamWriter( os );
233         osw.write( "This is the content of the sample file that will be included in the jar file." );
234         osw.close();
235     }
236
237     /**
238      * Delete the test directory created in the repository.
239      *
240      * @param dir The directory to be deleted.
241      */
242     protected void deleteTestDirectory( File dir )
243     {
244         try
245         {
246             FileUtils.deleteDirectory( dir );
247         }
248         catch ( IOException e )
249         {
250             // ignore
251         }
252     }
253
254     private void deleteFile( String filename )
255     {
256         File f = new File( filename );
257         f.delete();
258     }
259
260     protected void deleteChecksumFiles( String type )
261     {
262         //delete valid checksum files of artifacts created
263         for ( int i = 0; i < validArtifactChecksumJars.length; i++ )
264         {
265             deleteFile( repository.getBasedir() + "checksumTest/" + validArtifactChecksumJars[i].replace( '-', '/' ) +
266                 "/" + validArtifactChecksumJars[i] + "." + type + ".md5" );
267
268             deleteFile( repository.getBasedir() + "checksumTest/" + validArtifactChecksumJars[i].replace( '-', '/' ) +
269                 "/" + validArtifactChecksumJars[i] + "." + type + ".sha1" );
270         }
271
272         //delete valid checksum files of metadata file
273         for ( int i = 0; i < validArtifactChecksumJars.length; i++ )
274         {
275             deleteFile( repository.getBasedir() + "checksumTest/" + validArtifactChecksumJars[i].replace( '-', '/' ) +
276                 "/" + metadataChecksumFilename + ".xml.md5" );
277
278             deleteFile( repository.getBasedir() + "checksumTest/" + validArtifactChecksumJars[i].replace( '-', '/' ) +
279                 "/" + metadataChecksumFilename + ".xml.sha1" );
280         }
281     }
282
283 }