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