Index: archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/maven/archiva/configuration/MavenProxyPropertyLoader.java =================================================================== --- archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/maven/archiva/configuration/MavenProxyPropertyLoader.java (revision 1024438) +++ archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/maven/archiva/configuration/MavenProxyPropertyLoader.java (working copy) @@ -19,6 +19,7 @@ * under the License. */ +import org.apache.commons.io.IOUtils; import org.apache.commons.lang.StringUtils; import org.apache.maven.archiva.policies.ReleasesPolicy; import org.apache.maven.archiva.policies.SnapshotsPolicy; @@ -132,9 +133,16 @@ public void load( InputStream is, Configuration configuration ) throws IOException, InvalidConfigurationException { - Properties props = new Properties(); - props.load( is ); - load( props, configuration ); + try + { + Properties props = new Properties(); + props.load( is ); + load( props, configuration ); + } + finally + { + IOUtils.closeQuietly( is ); + } } private String getMandatoryProperty( Properties props, String key ) Index: archiva-modules/archiva-base/archiva-proxy/src/test/java/org/apache/maven/archiva/proxy/MetadataTransferTest.java =================================================================== --- archiva-modules/archiva-base/archiva-proxy/src/test/java/org/apache/maven/archiva/proxy/MetadataTransferTest.java (revision 1024438) +++ archiva-modules/archiva-base/archiva-proxy/src/test/java/org/apache/maven/archiva/proxy/MetadataTransferTest.java (working copy) @@ -19,6 +19,7 @@ * under the License. */ +import org.apache.commons.io.IOUtils; import org.apache.commons.lang.StringUtils; import org.apache.maven.archiva.common.utils.VersionUtil; import org.apache.maven.archiva.model.ArchivaRepositoryMetadata; @@ -1022,14 +1023,21 @@ assertTrue( "Actual file exists.", actualFile.exists() ); StringWriter actualContents = new StringWriter(); - ArchivaRepositoryMetadata metadata = RepositoryMetadataReader.read( actualFile ); - RepositoryMetadataWriter.write( metadata, actualContents ); - - DetailedDiff detailedDiff = new DetailedDiff( new Diff( expectedMetadataXml, actualContents.toString() ) ); - if ( !detailedDiff.similar() ) + try { - assertEquals( expectedMetadataXml, actualContents ); + ArchivaRepositoryMetadata metadata = RepositoryMetadataReader.read( actualFile ); + RepositoryMetadataWriter.write( metadata, actualContents ); + + DetailedDiff detailedDiff = new DetailedDiff( new Diff( expectedMetadataXml, actualContents.toString() ) ); + if ( !detailedDiff.similar() ) + { + assertEquals( expectedMetadataXml, actualContents ); + } } + finally + { + IOUtils.closeQuietly( actualContents ); + } // assertEquals( "Check file contents.", expectedMetadataXml, actualContents ); } @@ -1100,22 +1108,29 @@ { // Build expected metadata XML StringWriter expectedMetadataXml = new StringWriter(); - ArchivaRepositoryMetadata m = new ArchivaRepositoryMetadata(); - m.setGroupId( actualMetadata.getGroupId() ); - - for ( String pluginId : expectedPlugins ) + try { - Plugin p = new Plugin(); - p.setPrefix( pluginId ); - p.setArtifactId( pluginId + "-maven-plugin" ); - p.setName( "The " + pluginId + " Plugin" ); - m.getPlugins().add( p ); + ArchivaRepositoryMetadata m = new ArchivaRepositoryMetadata(); + m.setGroupId( actualMetadata.getGroupId() ); + + for ( String pluginId : expectedPlugins ) + { + Plugin p = new Plugin(); + p.setPrefix( pluginId ); + p.setArtifactId( pluginId + "-maven-plugin" ); + p.setName( "The " + pluginId + " Plugin" ); + m.getPlugins().add( p ); + } + + RepositoryMetadataWriter.write( m, expectedMetadataXml ); + + // Compare the file to the actual contents. + assertMetadataEquals( expectedMetadataXml.toString(), actualFile ); } - - RepositoryMetadataWriter.write( m, expectedMetadataXml ); - - // Compare the file to the actual contents. - assertMetadataEquals( expectedMetadataXml.toString(), actualFile ); + finally + { + IOUtils.closeQuietly( expectedMetadataXml ); + } } /** @@ -1136,21 +1151,28 @@ // Build expected metadata XML StringWriter expectedMetadataXml = new StringWriter(); - ArchivaRepositoryMetadata m = new ArchivaRepositoryMetadata(); - m.setGroupId( metadata.getGroupId() ); - m.setArtifactId( metadata.getArtifactId() ); - m.setLatestVersion( latestVersion ); - m.setReleasedVersion( releaseVersion ); - - if ( expectedVersions != null ) + try { - m.getAvailableVersions().addAll( Arrays.asList( expectedVersions ) ); + ArchivaRepositoryMetadata m = new ArchivaRepositoryMetadata(); + m.setGroupId( metadata.getGroupId() ); + m.setArtifactId( metadata.getArtifactId() ); + m.setLatestVersion( latestVersion ); + m.setReleasedVersion( releaseVersion ); + + if ( expectedVersions != null ) + { + m.getAvailableVersions().addAll( Arrays.asList( expectedVersions ) ); + } + + RepositoryMetadataWriter.write( m, expectedMetadataXml ); + + // Compare the file to the actual contents. + assertMetadataEquals( expectedMetadataXml.toString(), actualFile ); } - - RepositoryMetadataWriter.write( m, expectedMetadataXml ); - - // Compare the file to the actual contents. - assertMetadataEquals( expectedMetadataXml.toString(), actualFile ); + finally + { + IOUtils.closeQuietly( expectedMetadataXml ); + } } /** @@ -1170,14 +1192,21 @@ // Build expected metadata XML StringWriter expectedMetadataXml = new StringWriter(); - ArchivaRepositoryMetadata m = new ArchivaRepositoryMetadata(); - m.setGroupId( metadata.getGroupId() ); - m.setArtifactId( metadata.getArtifactId() ); - m.setVersion( metadata.getVersion() ); - RepositoryMetadataWriter.write( m, expectedMetadataXml ); - - // Compare the file to the actual contents. - assertMetadataEquals( expectedMetadataXml.toString(), actualFile ); + try + { + ArchivaRepositoryMetadata m = new ArchivaRepositoryMetadata(); + m.setGroupId( metadata.getGroupId() ); + m.setArtifactId( metadata.getArtifactId() ); + m.setVersion( metadata.getVersion() ); + RepositoryMetadataWriter.write( m, expectedMetadataXml ); + + // Compare the file to the actual contents. + assertMetadataEquals( expectedMetadataXml.toString(), actualFile ); + } + finally + { + IOUtils.closeQuietly( expectedMetadataXml ); + } } /** @@ -1235,26 +1264,33 @@ { // Build expected metadata XML StringWriter expectedMetadataXml = new StringWriter(); - ArchivaRepositoryMetadata m = new ArchivaRepositoryMetadata(); - m.setGroupId( actualMetadata.getGroupId() ); - m.setArtifactId( actualMetadata.getArtifactId() ); - m.setVersion( VersionUtil.getBaseVersion( actualMetadata.getVersion() ) ); - - m.setSnapshotVersion( new SnapshotVersion() ); - - if ( StringUtils.isNotBlank( expectedDate ) && StringUtils.isNotBlank( expectedTime ) ) + try { - m.getSnapshotVersion().setTimestamp( expectedDate + "." + expectedTime ); + ArchivaRepositoryMetadata m = new ArchivaRepositoryMetadata(); + m.setGroupId( actualMetadata.getGroupId() ); + m.setArtifactId( actualMetadata.getArtifactId() ); + m.setVersion( VersionUtil.getBaseVersion( actualMetadata.getVersion() ) ); + + m.setSnapshotVersion( new SnapshotVersion() ); + + if ( StringUtils.isNotBlank( expectedDate ) && StringUtils.isNotBlank( expectedTime ) ) + { + m.getSnapshotVersion().setTimestamp( expectedDate + "." + expectedTime ); + } + + m.getSnapshotVersion().setBuildNumber( expectedBuildnumber ); + + m.setLastUpdated( expectedDate + expectedTime ); + + RepositoryMetadataWriter.write( m, expectedMetadataXml ); + + // Compare the file to the actual contents. + assertMetadataEquals( expectedMetadataXml.toString(), actualFile ); } - - m.getSnapshotVersion().setBuildNumber( expectedBuildnumber ); - - m.setLastUpdated( expectedDate + expectedTime ); - - RepositoryMetadataWriter.write( m, expectedMetadataXml ); - - // Compare the file to the actual contents. - assertMetadataEquals( expectedMetadataXml.toString(), actualFile ); + finally + { + IOUtils.closeQuietly( expectedMetadataXml ); + } } /** @@ -1277,19 +1313,26 @@ // Build expected metadata XML StringWriter expectedMetadataXml = new StringWriter(); - ArchivaRepositoryMetadata m = new ArchivaRepositoryMetadata(); - m.setGroupId( metadata.getGroupId() ); - m.setArtifactId( metadata.getArtifactId() ); - - if ( expectedProxyVersions != null ) + try { - m.getAvailableVersions().addAll( Arrays.asList( expectedProxyVersions ) ); + ArchivaRepositoryMetadata m = new ArchivaRepositoryMetadata(); + m.setGroupId( metadata.getGroupId() ); + m.setArtifactId( metadata.getArtifactId() ); + + if ( expectedProxyVersions != null ) + { + m.getAvailableVersions().addAll( Arrays.asList( expectedProxyVersions ) ); + } + + RepositoryMetadataWriter.write( m, expectedMetadataXml ); + + // Compare the file to the actual contents. + assertMetadataEquals( expectedMetadataXml.toString(), actualFile ); } - - RepositoryMetadataWriter.write( m, expectedMetadataXml ); - - // Compare the file to the actual contents. - assertMetadataEquals( expectedMetadataXml.toString(), actualFile ); + finally + { + IOUtils.closeQuietly( expectedMetadataXml ); + } } /** @@ -1311,14 +1354,21 @@ // Build expected metadata XML StringWriter expectedMetadataXml = new StringWriter(); - ArchivaRepositoryMetadata m = new ArchivaRepositoryMetadata(); - m.setGroupId( metadata.getGroupId() ); - m.setArtifactId( metadata.getArtifactId() ); - m.setVersion( metadata.getVersion() ); - RepositoryMetadataWriter.write( m, expectedMetadataXml ); - - // Compare the file to the actual contents. - assertMetadataEquals( expectedMetadataXml.toString(), actualFile ); + try + { + ArchivaRepositoryMetadata m = new ArchivaRepositoryMetadata(); + m.setGroupId( metadata.getGroupId() ); + m.setArtifactId( metadata.getArtifactId() ); + m.setVersion( metadata.getVersion() ); + RepositoryMetadataWriter.write( m, expectedMetadataXml ); + + // Compare the file to the actual contents. + assertMetadataEquals( expectedMetadataXml.toString(), actualFile ); + } + finally + { + IOUtils.closeQuietly( expectedMetadataXml ); + } } /** Index: archiva-modules/archiva-base/archiva-xml-tools/src/test/java/org/apache/maven/archiva/xml/LatinEntityResolutionReaderTest.java =================================================================== --- archiva-modules/archiva-base/archiva-xml-tools/src/test/java/org/apache/maven/archiva/xml/LatinEntityResolutionReaderTest.java (revision 1024438) +++ archiva-modules/archiva-base/archiva-xml-tools/src/test/java/org/apache/maven/archiva/xml/LatinEntityResolutionReaderTest.java (working copy) @@ -26,6 +26,8 @@ import java.io.Reader; import java.io.StringWriter; +import org.apache.commons.io.IOUtils; + /** * LatinEntityResolutionReaderTest * @@ -50,15 +52,22 @@ { StringWriter output = new StringWriter(); - final char[] buffer = new char[bufsize]; - int n = 0; - while ( -1 != ( n = input.read( buffer ) ) ) + try { - output.write( buffer, 0, n ); + final char[] buffer = new char[bufsize]; + int n = 0; + while ( -1 != ( n = input.read( buffer ) ) ) + { + output.write( buffer, 0, n ); + } + output.flush(); + + return output.toString(); } - output.flush(); - - return output.toString(); + finally + { + IOUtils.closeQuietly( output ); + } } /** @@ -79,30 +88,37 @@ boolean hasContent = false; - String line = lineReader.readLine(); - while ( line != null ) + try { - if ( hasContent ) + String line = lineReader.readLine(); + while ( line != null ) { - sb.append( "\n" ); + if ( hasContent ) + { + sb.append( "\n" ); + } + sb.append( line ); + hasContent = true; + line = lineReader.readLine(); } - sb.append( line ); - hasContent = true; - line = lineReader.readLine(); + + return sb.toString(); } - - return sb.toString(); + finally + { + IOUtils.closeQuietly( lineReader ); + } } public void assertProperRead( String sourcePath, String expectedPath, int bufsize ) { + File inputFile = getExampleXml( sourcePath ); + FileReader fileReader = null; + LatinEntityResolutionReader testReader = null; try { - File inputFile = getExampleXml( sourcePath ); - - FileReader fileReader = new FileReader( inputFile ); - LatinEntityResolutionReader testReader = new LatinEntityResolutionReader( fileReader ); - + fileReader = new FileReader( inputFile ); + testReader = new LatinEntityResolutionReader( fileReader ); String actualOutput = toStringFromReader( testReader, bufsize ); String expectedOutput = toStringFromExample( expectedPath ); @@ -112,17 +128,22 @@ { fail( "IOException: " + e.getMessage() ); } + finally + { + IOUtils.closeQuietly( testReader ); + } } private void assertProperRead( StringBuffer expected, String sourcePath, int bufSize ) { + File inputFile = getExampleXml( sourcePath ); + FileReader fileReader = null; + LatinEntityResolutionReader testReader = null; try { - File inputFile = getExampleXml( sourcePath ); + fileReader = new FileReader( inputFile ); + testReader = new LatinEntityResolutionReader( fileReader ); - FileReader fileReader = new FileReader( inputFile ); - LatinEntityResolutionReader testReader = new LatinEntityResolutionReader( fileReader ); - String actualOutput = toStringFromReader( testReader, bufSize ); assertEquals( "Proper Read: ", expected.toString(), actualOutput ); @@ -131,6 +152,10 @@ { fail( "IOException: " + e.getMessage() ); } + finally + { + IOUtils.closeQuietly( testReader ); + } } public void testReaderNormalBufsize() Index: archiva-modules/archiva-base/archiva-xml-tools/src/main/java/org/apache/maven/archiva/xml/XMLReader.java =================================================================== --- archiva-modules/archiva-base/archiva-xml-tools/src/main/java/org/apache/maven/archiva/xml/XMLReader.java (revision 1024438) +++ archiva-modules/archiva-base/archiva-xml-tools/src/main/java/org/apache/maven/archiva/xml/XMLReader.java (working copy) @@ -99,13 +99,15 @@ this.xmlUrl = url; InputStream in = null; + InputStreamReader inReader = null; + LatinEntityResolutionReader latinReader = null; SAXReader reader = new SAXReader(); try { in = url.openStream(); - InputStreamReader inReader = new InputStreamReader( in, "UTF-8" ); - LatinEntityResolutionReader latinReader = new LatinEntityResolutionReader( inReader ); + inReader = new InputStreamReader( in, "UTF-8" ); + latinReader = new LatinEntityResolutionReader( inReader ); this.document = reader.read( latinReader ); } catch ( DocumentException e ) @@ -118,7 +120,8 @@ } finally { - IOUtils.closeQuietly( in ); + // closing the last to be constructed will automatically close the underlying streams (inReader, in) + IOUtils.closeQuietly( latinReader ); } Element root = this.document.getRootElement(); Index: archiva-modules/archiva-base/archiva-artifact-converter/src/main/java/org/apache/maven/archiva/converter/artifact/LegacyToDefaultConverter.java =================================================================== --- archiva-modules/archiva-base/archiva-artifact-converter/src/main/java/org/apache/maven/archiva/converter/artifact/LegacyToDefaultConverter.java (revision 1024438) +++ archiva-modules/archiva-base/archiva-artifact-converter/src/main/java/org/apache/maven/archiva/converter/artifact/LegacyToDefaultConverter.java (working copy) @@ -273,6 +273,7 @@ } finally { + IOUtils.closeQuietly( stringReader ); IOUtils.closeQuietly( writer ); } } @@ -658,10 +659,17 @@ File pomFile = new File( repository.getBasedir(), repository.pathOf( artifact ) ); StringWriter strWriter = new StringWriter(); - MavenXpp3Writer pomWriter = new MavenXpp3Writer(); - pomWriter.write( strWriter, pom ); + try + { + MavenXpp3Writer pomWriter = new MavenXpp3Writer(); + pomWriter.write( strWriter, pom ); - transaction.createFile( strWriter.toString(), pomFile, digesters ); + transaction.createFile( strWriter.toString(), pomFile, digesters ); + } + finally + { + IOUtils.closeQuietly( strWriter ); + } } private void addWarning( Artifact artifact, String message ) Index: archiva-modules/archiva-base/archiva-checksum/src/main/java/org/apache/archiva/checksum/Checksum.java =================================================================== --- archiva-modules/archiva-base/archiva-checksum/src/main/java/org/apache/archiva/checksum/Checksum.java (revision 1024438) +++ archiva-modules/archiva-base/archiva-checksum/src/main/java/org/apache/archiva/checksum/Checksum.java (working copy) @@ -97,8 +97,15 @@ throws IOException { DigestInputStream dig = new DigestInputStream( stream, md ); - IOUtils.copy( dig, new NullOutputStream() ); + try + { + IOUtils.copy( dig, new NullOutputStream() ); - return this; + return this; + } + finally + { + IOUtils.closeQuietly( dig ); + } } } Index: archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/maven/archiva/webdav/RepositoryServletRepositoryGroupTest.java =================================================================== --- archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/maven/archiva/webdav/RepositoryServletRepositoryGroupTest.java (revision 1024438) +++ archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/maven/archiva/webdav/RepositoryServletRepositoryGroupTest.java (working copy) @@ -205,11 +205,21 @@ String resourceName = "dummy/dummy-put-resource/1.0/dummy-put-resource-1.0.txt"; String putUrl = "http://machine.com/repository/" + REPO_GROUP_WITH_VALID_REPOS + "/" + resourceName; InputStream is = getClass().getResourceAsStream( "/artifact.jar" ); - - WebRequest request = new PutMethodWebRequest( putUrl, is, "text/plain" ); - WebResponse response = sc.getResponse( request ); - - assertResponseMethodNotAllowed( response ); + + try + { + WebRequest request = new PutMethodWebRequest( putUrl, is, "text/plain" ); + WebResponse response = sc.getResponse( request ); + + assertResponseMethodNotAllowed( response ); + } + finally + { + if ( is != null ) + { + is.close(); + } + } } // MRM-872 Index: archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/maven/archiva/webdav/RepositoryServletSecurityTest.java =================================================================== --- archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/maven/archiva/webdav/RepositoryServletSecurityTest.java (revision 1024438) +++ archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/maven/archiva/webdav/RepositoryServletSecurityTest.java (working copy) @@ -194,30 +194,40 @@ String putUrl = "http://machine.com/repository/internal/path/to/artifact.jar"; InputStream is = getClass().getResourceAsStream( "/artifact.jar" ); - assertNotNull( "artifact.jar inputstream", is ); - WebRequest request = new PutMethodWebRequest( putUrl, is, "application/octet-stream" ); - InvocationContext ic = sc.newInvocation( request ); - servlet = (RepositoryServlet) ic.getServlet(); - servlet.setDavSessionProvider( davSessionProvider ); - - AuthenticationResult result = new AuthenticationResult(); - httpAuthControl.expectAndReturn( httpAuth.getAuthenticationResult( null, null ), result ); - servletAuthControl.expectAndThrow( servletAuth.isAuthenticated( null, null ), - new AuthenticationException( "Authentication error" ) ); - - servletAuth.isAuthorized( "guest", "internal", ArchivaRoleConstants.OPERATION_REPOSITORY_UPLOAD ); - servletAuthControl.setMatcher( MockControl.EQUALS_MATCHER ); - servletAuthControl.setThrowable( new UnauthorizedException( "'guest' has no write access to repository" ) ); - - httpAuthControl.replay(); - servletAuthControl.replay(); - - servlet.service( ic.getRequest(), ic.getResponse() ); - - httpAuthControl.verify(); - servletAuthControl.verify(); - + try + { + assertNotNull( "artifact.jar inputstream", is ); + + WebRequest request = new PutMethodWebRequest( putUrl, is, "application/octet-stream" ); + InvocationContext ic = sc.newInvocation( request ); + servlet = (RepositoryServlet) ic.getServlet(); + servlet.setDavSessionProvider( davSessionProvider ); + + AuthenticationResult result = new AuthenticationResult(); + httpAuthControl.expectAndReturn( httpAuth.getAuthenticationResult( null, null ), result ); + servletAuthControl.expectAndThrow( servletAuth.isAuthenticated( null, null ), + new AuthenticationException( "Authentication error" ) ); + + servletAuth.isAuthorized( "guest", "internal", ArchivaRoleConstants.OPERATION_REPOSITORY_UPLOAD ); + servletAuthControl.setMatcher( MockControl.EQUALS_MATCHER ); + servletAuthControl.setThrowable( new UnauthorizedException( "'guest' has no write access to repository" ) ); + + httpAuthControl.replay(); + servletAuthControl.replay(); + + servlet.service( ic.getRequest(), ic.getResponse() ); + + httpAuthControl.verify(); + servletAuthControl.verify(); + } + finally + { + if ( is != null ) + { + is.close(); + } + } // assertEquals(HttpServletResponse.SC_UNAUTHORIZED, response.getResponseCode()); } @@ -229,51 +239,60 @@ String putUrl = "http://machine.com/repository/internal/path/to/artifact.jar"; InputStream is = getClass().getResourceAsStream( "/artifact.jar" ); - assertNotNull( "artifact.jar inputstream", is ); - - WebRequest request = new PutMethodWebRequest( putUrl, is, "application/octet-stream" ); - - InvocationContext ic = sc.newInvocation( request ); - servlet = (RepositoryServlet) ic.getServlet(); - servlet.setDavSessionProvider( davSessionProvider ); - - ArchivaDavResourceFactory archivaDavResourceFactory = (ArchivaDavResourceFactory) servlet.getResourceFactory(); - archivaDavResourceFactory.setHttpAuth( httpAuth ); - archivaDavResourceFactory.setServletAuth( servletAuth ); - - servlet.setResourceFactory( archivaDavResourceFactory ); - - AuthenticationResult result = new AuthenticationResult(); - httpAuthControl.expectAndReturn( httpAuth.getAuthenticationResult( null, null ), result ); - servletAuthControl.expectAndThrow( servletAuth.isAuthenticated( null, null ), - new AuthenticationException( "Authentication error" ) ); - - servletAuth.isAuthorized( "guest", "internal", ArchivaRoleConstants.OPERATION_REPOSITORY_UPLOAD ); - servletAuthControl.setMatcher( MockControl.EQUALS_MATCHER ); - servletAuthControl.setReturnValue( true ); - - // ArchivaDavResourceFactory#isAuthorized() - SecuritySession session = new DefaultSecuritySession(); - httpAuthControl.expectAndReturn( httpAuth.getAuthenticationResult( null, null ), result ); - httpAuthControl.expectAndReturn( httpAuth.getSecuritySession( ic.getRequest().getSession( true ) ), session ); - servletAuthControl.expectAndThrow( servletAuth.isAuthenticated( null, result ), - new AuthenticationException( "Authentication error" ) ); - - httpAuthControl.expectAndReturn( httpAuth.getSessionUser( ic.getRequest().getSession() ), null ); - - // check if guest has write access - servletAuth.isAuthorized( "guest", "internal", ArchivaRoleConstants.OPERATION_REPOSITORY_UPLOAD ); - servletAuthControl.setMatcher( MockControl.EQUALS_MATCHER ); - servletAuthControl.setReturnValue( true ); - - httpAuthControl.replay(); - servletAuthControl.replay(); - - servlet.service( ic.getRequest(), ic.getResponse() ); - - httpAuthControl.verify(); - servletAuthControl.verify(); - + try + { + assertNotNull( "artifact.jar inputstream", is ); + + WebRequest request = new PutMethodWebRequest( putUrl, is, "application/octet-stream" ); + + InvocationContext ic = sc.newInvocation( request ); + servlet = (RepositoryServlet) ic.getServlet(); + servlet.setDavSessionProvider( davSessionProvider ); + + ArchivaDavResourceFactory archivaDavResourceFactory = (ArchivaDavResourceFactory) servlet.getResourceFactory(); + archivaDavResourceFactory.setHttpAuth( httpAuth ); + archivaDavResourceFactory.setServletAuth( servletAuth ); + + servlet.setResourceFactory( archivaDavResourceFactory ); + + AuthenticationResult result = new AuthenticationResult(); + httpAuthControl.expectAndReturn( httpAuth.getAuthenticationResult( null, null ), result ); + servletAuthControl.expectAndThrow( servletAuth.isAuthenticated( null, null ), + new AuthenticationException( "Authentication error" ) ); + + servletAuth.isAuthorized( "guest", "internal", ArchivaRoleConstants.OPERATION_REPOSITORY_UPLOAD ); + servletAuthControl.setMatcher( MockControl.EQUALS_MATCHER ); + servletAuthControl.setReturnValue( true ); + + // ArchivaDavResourceFactory#isAuthorized() + SecuritySession session = new DefaultSecuritySession(); + httpAuthControl.expectAndReturn( httpAuth.getAuthenticationResult( null, null ), result ); + httpAuthControl.expectAndReturn( httpAuth.getSecuritySession( ic.getRequest().getSession( true ) ), session ); + servletAuthControl.expectAndThrow( servletAuth.isAuthenticated( null, result ), + new AuthenticationException( "Authentication error" ) ); + + httpAuthControl.expectAndReturn( httpAuth.getSessionUser( ic.getRequest().getSession() ), null ); + + // check if guest has write access + servletAuth.isAuthorized( "guest", "internal", ArchivaRoleConstants.OPERATION_REPOSITORY_UPLOAD ); + servletAuthControl.setMatcher( MockControl.EQUALS_MATCHER ); + servletAuthControl.setReturnValue( true ); + + httpAuthControl.replay(); + servletAuthControl.replay(); + + servlet.service( ic.getRequest(), ic.getResponse() ); + + httpAuthControl.verify(); + servletAuthControl.verify(); + } + finally + { + if ( is != null ) + { + is.close(); + } + } // assertEquals( HttpServletResponse.SC_CREATED, response.getResponseCode() ); } @@ -285,42 +304,51 @@ String putUrl = "http://machine.com/repository/internal/path/to/artifact.jar"; InputStream is = getClass().getResourceAsStream( "/artifact.jar" ); - assertNotNull( "artifact.jar inputstream", is ); - - WebRequest request = new PutMethodWebRequest( putUrl, is, "application/octet-stream" ); - - InvocationContext ic = sc.newInvocation( request ); - servlet = (RepositoryServlet) ic.getServlet(); - servlet.setDavSessionProvider( davSessionProvider ); - - ArchivaDavResourceFactory archivaDavResourceFactory = (ArchivaDavResourceFactory) servlet.getResourceFactory(); - archivaDavResourceFactory.setHttpAuth( httpAuth ); - archivaDavResourceFactory.setServletAuth( servletAuth ); - servlet.setResourceFactory( archivaDavResourceFactory ); - - AuthenticationResult result = new AuthenticationResult(); - httpAuthControl.expectAndReturn( httpAuth.getAuthenticationResult( null, null ), result ); - servletAuthControl.expectAndReturn( servletAuth.isAuthenticated( null, null ), true ); - - // ArchivaDavResourceFactory#isAuthorized() - SecuritySession session = new DefaultSecuritySession(); - httpAuthControl.expectAndReturn( httpAuth.getAuthenticationResult( null, null ), result ); - httpAuthControl.expectAndReturn( httpAuth.getSecuritySession( ic.getRequest().getSession( true ) ), session ); - httpAuthControl.expectAndReturn( httpAuth.getSessionUser( ic.getRequest().getSession() ), new SimpleUser() ); - servletAuthControl.expectAndReturn( servletAuth.isAuthenticated( null, result ), true ); - servletAuthControl.expectAndThrow( - servletAuth.isAuthorized( null, session, "internal", - ArchivaRoleConstants.OPERATION_REPOSITORY_UPLOAD ), - new UnauthorizedException( "User not authorized" ) ); - - httpAuthControl.replay(); - servletAuthControl.replay(); - - servlet.service( ic.getRequest(), ic.getResponse() ); - - httpAuthControl.verify(); - servletAuthControl.verify(); - + try + { + assertNotNull( "artifact.jar inputstream", is ); + + WebRequest request = new PutMethodWebRequest( putUrl, is, "application/octet-stream" ); + + InvocationContext ic = sc.newInvocation( request ); + servlet = (RepositoryServlet) ic.getServlet(); + servlet.setDavSessionProvider( davSessionProvider ); + + ArchivaDavResourceFactory archivaDavResourceFactory = (ArchivaDavResourceFactory) servlet.getResourceFactory(); + archivaDavResourceFactory.setHttpAuth( httpAuth ); + archivaDavResourceFactory.setServletAuth( servletAuth ); + servlet.setResourceFactory( archivaDavResourceFactory ); + + AuthenticationResult result = new AuthenticationResult(); + httpAuthControl.expectAndReturn( httpAuth.getAuthenticationResult( null, null ), result ); + servletAuthControl.expectAndReturn( servletAuth.isAuthenticated( null, null ), true ); + + // ArchivaDavResourceFactory#isAuthorized() + SecuritySession session = new DefaultSecuritySession(); + httpAuthControl.expectAndReturn( httpAuth.getAuthenticationResult( null, null ), result ); + httpAuthControl.expectAndReturn( httpAuth.getSecuritySession( ic.getRequest().getSession( true ) ), session ); + httpAuthControl.expectAndReturn( httpAuth.getSessionUser( ic.getRequest().getSession() ), new SimpleUser() ); + servletAuthControl.expectAndReturn( servletAuth.isAuthenticated( null, result ), true ); + servletAuthControl.expectAndThrow( + servletAuth.isAuthorized( null, session, "internal", + ArchivaRoleConstants.OPERATION_REPOSITORY_UPLOAD ), + new UnauthorizedException( "User not authorized" ) ); + + httpAuthControl.replay(); + servletAuthControl.replay(); + + servlet.service( ic.getRequest(), ic.getResponse() ); + + httpAuthControl.verify(); + servletAuthControl.verify(); + } + finally + { + if ( is != null ) + { + is.close(); + } + } // assertEquals(HttpServletResponse.SC_UNAUTHORIZED, response.getResponseCode()); } @@ -333,51 +361,61 @@ String putUrl = "http://machine.com/repository/internal/path/to/artifact.jar"; InputStream is = getClass().getResourceAsStream( "/artifact.jar" ); - assertNotNull( "artifact.jar inputstream", is ); - - WebRequest request = new PutMethodWebRequest( putUrl, is, "application/octet-stream" ); - - InvocationContext ic = sc.newInvocation( request ); - servlet = (RepositoryServlet) ic.getServlet(); - servlet.setDavSessionProvider( davSessionProvider ); - - ArchivaDavResourceFactory archivaDavResourceFactory = (ArchivaDavResourceFactory) servlet.getResourceFactory(); - archivaDavResourceFactory.setHttpAuth( httpAuth ); - archivaDavResourceFactory.setServletAuth( servletAuth ); - - TestAuditListener listener = new TestAuditListener(); - archivaDavResourceFactory.addAuditListener( listener ); - servlet.setResourceFactory( archivaDavResourceFactory ); - - AuthenticationResult result = new AuthenticationResult(); - httpAuthControl.expectAndReturn( httpAuth.getAuthenticationResult( null, null ), result ); - servletAuthControl.expectAndReturn( servletAuth.isAuthenticated( null, null ), true ); - - User user = new SimpleUser(); - user.setUsername( "admin" ); - - // ArchivaDavResourceFactory#isAuthorized() - SecuritySession session = new DefaultSecuritySession(); - httpAuthControl.expectAndReturn( httpAuth.getAuthenticationResult( null, null ), result ); - httpAuthControl.expectAndReturn( httpAuth.getSecuritySession( ic.getRequest().getSession( true ) ), session ); - httpAuthControl.expectAndReturn( httpAuth.getSessionUser( ic.getRequest().getSession() ), user ); - servletAuthControl.expectAndReturn( servletAuth.isAuthenticated( null, result ), true ); - servletAuthControl.expectAndReturn( - servletAuth.isAuthorized( null, session, "internal", - ArchivaRoleConstants.OPERATION_REPOSITORY_UPLOAD ), - true ); - - httpAuthControl.replay(); - servletAuthControl.replay(); - - servlet.service( ic.getRequest(), ic.getResponse() ); - - httpAuthControl.verify(); - servletAuthControl.verify(); - - // assertEquals(HttpServletResponse.SC_CREATED, response.getResponseCode()); - - assertEquals( "admin", listener.getEvents().get( 0 ).getUserId() ); + try + { + assertNotNull( "artifact.jar inputstream", is ); + + WebRequest request = new PutMethodWebRequest( putUrl, is, "application/octet-stream" ); + + InvocationContext ic = sc.newInvocation( request ); + servlet = (RepositoryServlet) ic.getServlet(); + servlet.setDavSessionProvider( davSessionProvider ); + + ArchivaDavResourceFactory archivaDavResourceFactory = (ArchivaDavResourceFactory) servlet.getResourceFactory(); + archivaDavResourceFactory.setHttpAuth( httpAuth ); + archivaDavResourceFactory.setServletAuth( servletAuth ); + + TestAuditListener listener = new TestAuditListener(); + archivaDavResourceFactory.addAuditListener( listener ); + servlet.setResourceFactory( archivaDavResourceFactory ); + + AuthenticationResult result = new AuthenticationResult(); + httpAuthControl.expectAndReturn( httpAuth.getAuthenticationResult( null, null ), result ); + servletAuthControl.expectAndReturn( servletAuth.isAuthenticated( null, null ), true ); + + User user = new SimpleUser(); + user.setUsername( "admin" ); + + // ArchivaDavResourceFactory#isAuthorized() + SecuritySession session = new DefaultSecuritySession(); + httpAuthControl.expectAndReturn( httpAuth.getAuthenticationResult( null, null ), result ); + httpAuthControl.expectAndReturn( httpAuth.getSecuritySession( ic.getRequest().getSession( true ) ), session ); + httpAuthControl.expectAndReturn( httpAuth.getSessionUser( ic.getRequest().getSession() ), user ); + servletAuthControl.expectAndReturn( servletAuth.isAuthenticated( null, result ), true ); + servletAuthControl.expectAndReturn( + servletAuth.isAuthorized( null, session, "internal", + ArchivaRoleConstants.OPERATION_REPOSITORY_UPLOAD ), + true ); + + httpAuthControl.replay(); + servletAuthControl.replay(); + + servlet.service( ic.getRequest(), ic.getResponse() ); + + httpAuthControl.verify(); + servletAuthControl.verify(); + + // assertEquals(HttpServletResponse.SC_CREATED, response.getResponseCode()); + + assertEquals( "admin", listener.getEvents().get( 0 ).getUserId() ); + } + finally + { + if ( is != null ) + { + is.close(); + } + } } // test get with invalid user, and guest has read access to repo Index: archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/maven/archiva/webdav/RepositoryServletDeployTest.java =================================================================== --- archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/maven/archiva/webdav/RepositoryServletDeployTest.java (revision 1024438) +++ archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/maven/archiva/webdav/RepositoryServletDeployTest.java (working copy) @@ -49,14 +49,24 @@ String putUrl = "http://machine.com/repository/internal" + ARTIFACT_DEFAULT_LAYOUT; InputStream is = getClass().getResourceAsStream( "/artifact.jar" ); - // verify that the file exists in resources-dir - assertNotNull( "artifact.jar inputstream", is ); - - WebRequest request = new PutMethodWebRequest( putUrl, is, "application/octet-stream" ); - - WebResponse response = sc.getResponse( request ); - assertResponseCreated( response ); - assertFileContents( "artifact.jar\n", repoRootInternal, ARTIFACT_DEFAULT_LAYOUT ); + try + { + // verify that the file exists in resources-dir + assertNotNull( "artifact.jar inputstream", is ); + + WebRequest request = new PutMethodWebRequest( putUrl, is, "application/octet-stream" ); + + WebResponse response = sc.getResponse( request ); + assertResponseCreated( response ); + assertFileContents( "artifact.jar\n", repoRootInternal, ARTIFACT_DEFAULT_LAYOUT ); + } + finally + { + if ( is != null ) + { + is.close(); + } + } } /** @@ -75,29 +85,39 @@ String checksumUrl = "http://machine.com/repository/internal" + ARTIFACT_DEFAULT_LAYOUT + ".sha1"; InputStream is = getClass().getResourceAsStream( "/artifact.jar" ); - // verify that the file exists in resources-dir - assertNotNull( "artifact.jar inputstream", is ); - - // send request #1 and verify it's successful - WebRequest request = new PutMethodWebRequest( putUrl, is, "application/octet-stream" ); - WebResponse response = sc.getResponse( request ); - assertResponseCreated( response ); - - is = getClass().getResourceAsStream( "/artifact.jar.sha1" ); - request = new PutMethodWebRequest( checksumUrl, is, "application/octet-stream" ); - response = sc.getResponse( request ); - assertResponseCreated( response ); - - is = getClass().getResourceAsStream( "/maven-metadata.xml" ); - request = new PutMethodWebRequest( metadataUrl, is, "application/octet-stream" ); - response = sc.getResponse( request ); - assertResponseCreated( response ); - - // send request #2 and verify it's blocked - is = getClass().getResourceAsStream( "/artifact.jar" ); - request = new PutMethodWebRequest( putUrl, is, "application/octet-stream" ); - response = sc.getResponse( request ); - assertResponseConflictError( response ); + try + { + // verify that the file exists in resources-dir + assertNotNull( "artifact.jar inputstream", is ); + + // send request #1 and verify it's successful + WebRequest request = new PutMethodWebRequest( putUrl, is, "application/octet-stream" ); + WebResponse response = sc.getResponse( request ); + assertResponseCreated( response ); + + is = getClass().getResourceAsStream( "/artifact.jar.sha1" ); + request = new PutMethodWebRequest( checksumUrl, is, "application/octet-stream" ); + response = sc.getResponse( request ); + assertResponseCreated( response ); + + is = getClass().getResourceAsStream( "/maven-metadata.xml" ); + request = new PutMethodWebRequest( metadataUrl, is, "application/octet-stream" ); + response = sc.getResponse( request ); + assertResponseCreated( response ); + + // send request #2 and verify it's blocked + is = getClass().getResourceAsStream( "/artifact.jar" ); + request = new PutMethodWebRequest( putUrl, is, "application/octet-stream" ); + response = sc.getResponse( request ); + assertResponseConflictError( response ); + } + finally + { + if ( is != null ) + { + is.close(); + } + } } public void testReleaseArtifactsRedeploymentIsAllowed() @@ -115,29 +135,39 @@ String checksumUrl = "http://machine.com/repository/internal" + ARTIFACT_DEFAULT_LAYOUT + ".sha1"; InputStream is = getClass().getResourceAsStream( "/artifact.jar" ); - // verify that the file exists in resources-dir - assertNotNull( "artifact.jar inputstream", is ); - - // send request #1 and verify it's successful - WebRequest request = new PutMethodWebRequest( putUrl, is, "application/octet-stream" ); - WebResponse response = sc.getResponse( request ); - assertResponseCreated( response ); + try + { + // verify that the file exists in resources-dir + assertNotNull( "artifact.jar inputstream", is ); - is = getClass().getResourceAsStream( "/artifact.jar.sha1" ); - request = new PutMethodWebRequest( checksumUrl, is, "application/octet-stream" ); - response = sc.getResponse( request ); - assertResponseCreated( response ); - - is = getClass().getResourceAsStream( "/maven-metadata.xml" ); - request = new PutMethodWebRequest( metadataUrl, is, "application/octet-stream" ); - response = sc.getResponse( request ); - assertResponseCreated( response ); - - // send request #2 and verify if it's still successful - is = getClass().getResourceAsStream( "/artifact.jar" ); - request = new PutMethodWebRequest( putUrl, is, "application/octet-stream" ); - response = sc.getResponse( request ); - assertResponseNoContent( response ); + // send request #1 and verify it's successful + WebRequest request = new PutMethodWebRequest( putUrl, is, "application/octet-stream" ); + WebResponse response = sc.getResponse( request ); + assertResponseCreated( response ); + + is = getClass().getResourceAsStream( "/artifact.jar.sha1" ); + request = new PutMethodWebRequest( checksumUrl, is, "application/octet-stream" ); + response = sc.getResponse( request ); + assertResponseCreated( response ); + + is = getClass().getResourceAsStream( "/maven-metadata.xml" ); + request = new PutMethodWebRequest( metadataUrl, is, "application/octet-stream" ); + response = sc.getResponse( request ); + assertResponseCreated( response ); + + // send request #2 and verify if it's still successful + is = getClass().getResourceAsStream( "/artifact.jar" ); + request = new PutMethodWebRequest( putUrl, is, "application/octet-stream" ); + response = sc.getResponse( request ); + assertResponseNoContent( response ); + } + finally + { + if ( is != null ) + { + is.close(); + } + } } public void testReleaseArtifactsRedeploymentInvalidPath() @@ -150,29 +180,39 @@ String checksumUrl = "http://machine.com/repository/internal/artifact.jar.sha1"; InputStream is = getClass().getResourceAsStream( "/artifact.jar" ); - // verify that the file exists in resources-dir - assertNotNull( "artifact.jar inputstream", is ); - - // send request #1 and verify it's successful - WebRequest request = new PutMethodWebRequest( putUrl, is, "application/octet-stream" ); - WebResponse response = sc.getResponse( request ); - assertResponseCreated( response ); - - is = getClass().getResourceAsStream( "/artifact.jar.sha1" ); - request = new PutMethodWebRequest( checksumUrl, is, "application/octet-stream" ); - response = sc.getResponse( request ); - assertResponseCreated( response ); - - is = getClass().getResourceAsStream( "/maven-metadata.xml" ); - request = new PutMethodWebRequest( metadataUrl, is, "application/octet-stream" ); - response = sc.getResponse( request ); - assertResponseCreated( response ); - - // send request #2 and verify it's re-deployed - is = getClass().getResourceAsStream( "/artifact.jar" ); - request = new PutMethodWebRequest( putUrl, is, "application/octet-stream" ); - response = sc.getResponse( request ); - assertResponseNoContent( response ); + try + { + // verify that the file exists in resources-dir + assertNotNull( "artifact.jar inputstream", is ); + + // send request #1 and verify it's successful + WebRequest request = new PutMethodWebRequest( putUrl, is, "application/octet-stream" ); + WebResponse response = sc.getResponse( request ); + assertResponseCreated( response ); + + is = getClass().getResourceAsStream( "/artifact.jar.sha1" ); + request = new PutMethodWebRequest( checksumUrl, is, "application/octet-stream" ); + response = sc.getResponse( request ); + assertResponseCreated( response ); + + is = getClass().getResourceAsStream( "/maven-metadata.xml" ); + request = new PutMethodWebRequest( metadataUrl, is, "application/octet-stream" ); + response = sc.getResponse( request ); + assertResponseCreated( response ); + + // send request #2 and verify it's re-deployed + is = getClass().getResourceAsStream( "/artifact.jar" ); + request = new PutMethodWebRequest( putUrl, is, "application/octet-stream" ); + response = sc.getResponse( request ); + assertResponseNoContent( response ); + } + finally + { + if ( is != null ) + { + is.close(); + } + } } public void testReleaseArtifactsRedeploymentArtifactIsSnapshot() @@ -185,29 +225,39 @@ String checksumUrl = "http://machine.com/repository/internal/path/to/artifact/1.0-SNAPSHOT/artifact-1.0-SNAPSHOT.jar.sha1"; InputStream is = getClass().getResourceAsStream( "/artifact.jar" ); - // verify that the file exists in resources-dir - assertNotNull( "artifact.jar inputstream", is ); - - // send request #1 and verify it's successful - WebRequest request = new PutMethodWebRequest( putUrl, is, "application/octet-stream" ); - WebResponse response = sc.getResponse( request ); - assertResponseCreated( response ); - - is = getClass().getResourceAsStream( "/artifact.jar.sha1" ); - request = new PutMethodWebRequest( checksumUrl, is, "application/octet-stream" ); - response = sc.getResponse( request ); - assertResponseCreated( response ); - - is = getClass().getResourceAsStream( "/maven-metadata.xml" ); - request = new PutMethodWebRequest( metadataUrl, is, "application/octet-stream" ); - response = sc.getResponse( request ); - assertResponseCreated( response ); - - // send request #2 and verify it's re-deployed - is = getClass().getResourceAsStream( "/artifact.jar" ); - request = new PutMethodWebRequest( putUrl, is, "application/octet-stream" ); - response = sc.getResponse( request ); - assertResponseNoContent( response ); + try + { + // verify that the file exists in resources-dir + assertNotNull( "artifact.jar inputstream", is ); + + // send request #1 and verify it's successful + WebRequest request = new PutMethodWebRequest( putUrl, is, "application/octet-stream" ); + WebResponse response = sc.getResponse( request ); + assertResponseCreated( response ); + + is = getClass().getResourceAsStream( "/artifact.jar.sha1" ); + request = new PutMethodWebRequest( checksumUrl, is, "application/octet-stream" ); + response = sc.getResponse( request ); + assertResponseCreated( response ); + + is = getClass().getResourceAsStream( "/maven-metadata.xml" ); + request = new PutMethodWebRequest( metadataUrl, is, "application/octet-stream" ); + response = sc.getResponse( request ); + assertResponseCreated( response ); + + // send request #2 and verify it's re-deployed + is = getClass().getResourceAsStream( "/artifact.jar" ); + request = new PutMethodWebRequest( putUrl, is, "application/octet-stream" ); + response = sc.getResponse( request ); + assertResponseNoContent( response ); + } + finally + { + if ( is != null ) + { + is.close(); + } + } } public void testMkColWithMissingParentCollectionFails() Index: archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/reports/GenerateReportAction.java =================================================================== --- archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/reports/GenerateReportAction.java (revision 1024438) +++ archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/reports/GenerateReportAction.java (working copy) @@ -402,6 +402,11 @@ addActionError( "Error occurred while generating CSV file." ); return ERROR; } + finally + { + IOUtils.closeQuietly( inputStream ); + IOUtils.closeQuietly( reader ); + } return SEND_FILE; }