package org.apache.archiva.webdav; /* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ import com.gargoylesoftware.htmlunit.WebRequest; import com.gargoylesoftware.htmlunit.WebResponse; import org.apache.commons.lang.ArrayUtils; import org.apache.commons.lang.StringUtils; import org.custommonkey.xmlunit.DetailedDiff; import org.custommonkey.xmlunit.Diff; import org.junit.Before; /** * Abstract TestCase for RepositoryServlet Tests, Proxied, Get of Metadata. * * */ public abstract class AbstractRepositoryServletProxiedMetadataTestCase extends AbstractRepositoryServletProxiedTestCase { protected RemoteRepoInfo remotePrivateSnapshots; protected void assertExpectedMetadata( String expectedMetadata, String actualMetadata ) throws Exception { DetailedDiff detailedDiff = new DetailedDiff( new Diff( expectedMetadata, actualMetadata ) ); if ( !detailedDiff.similar() ) { // If it isn't similar, dump the difference. assertEquals( expectedMetadata, actualMetadata ); } // XMLAssert.assertXMLEqual( "Expected Metadata:", expectedMetadata, actualMetadata ); } protected String requestMetadataOK( String path ) throws Exception { // process the response code later, not via an exception. //HttpUnitOptions.setExceptionsThrownOnErrorStatus( false ); WebRequest request = new GetMethodWebRequest( "http://machine.com/repository/internal/" + path ); WebResponse response = getServletUnitClient().getResponse( request ); assertResponseOK( response ); return response.getContentAsString(); } protected String createProjectMetadata( String groupId, String artifactId, String latest, String release, String[] versions ) { StringBuilder buf = new StringBuilder(); buf.append( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\n" ); buf.append( "<metadata>\n" ); buf.append( " <groupId>" ).append( groupId ).append( "</groupId>\n" ); buf.append( " <artifactId>" ).append( artifactId ).append( "</artifactId>\n" ); boolean hasLatest = StringUtils.isNotBlank( latest ); boolean hasRelease = StringUtils.isNotBlank( release ); boolean hasVersions = !ArrayUtils.isEmpty( versions ); if ( hasLatest || hasRelease || hasVersions ) { buf.append( " <versioning>\n" ); if ( hasLatest ) { buf.append( " <latest>" ).append( latest ).append( "</latest>\n" ); } if ( hasRelease ) { buf.append( " <release>" ).append( release ).append( "</release>\n" ); } if ( hasVersions ) { buf.append( " <versions>\n" ); for ( String availVersion : versions ) { buf.append( " <version>" ).append( availVersion ).append( "</version>\n" ); } buf.append( " </versions>\n" ); } buf.append( " </versioning>\n" ); } buf.append( "</metadata>" ); return buf.toString(); } protected String createGroupMetadata( String groupId, String[] plugins ) { StringBuilder buf = new StringBuilder(); buf.append( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\n" ); buf.append( "<metadata>\n" ); buf.append( " <groupId>" ).append( groupId ).append( "</groupId>\n" ); boolean hasPlugins = !ArrayUtils.isEmpty( plugins ); if ( hasPlugins ) { buf.append( " <plugins>\n" ); for ( String plugin : plugins ) { buf.append( " <plugin>\n" ); buf.append( " <prefix>" ).append( plugin ).append( "</prefix>\n" ); buf.append( " <artifactId>" ).append( plugin + "-maven-plugin" ).append( "</artifactId>\n" ); buf.append( " <name>" ).append( "The " + plugin + " Plugin" ).append( "</name>\n" ); buf.append( " </plugin>\n" ); } buf.append( " </plugins>\n" ); } buf.append( "</metadata>" ); return buf.toString(); } protected void setupPrivateSnapshotsRemoteRepo() throws Exception { remotePrivateSnapshots = createServer( "private-snapshots" ); assertServerSetupCorrectly( remotePrivateSnapshots ); archivaConfiguration.getConfiguration().addRemoteRepository( remotePrivateSnapshots.config ); setupCleanRepo( remotePrivateSnapshots.root ); } // private void assertGetProxiedSnapshotMetadata( int expectation, boolean hasManagedCopy, // long deltaManagedToRemoteTimestamp ) // throws Exception // { // // --- Setup // setupSnapshotsRemoteRepo(); // setupCleanInternalRepo(); // // String resourcePath = "org/apache/archiva/archivatest-maven-plugin/4.0-alpha-1-SNAPSHOT/maven-metadata.xml"; // String expectedRemoteContents = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + "<metadata>\n" // + " <groupId>org.apache.maven.plugins</groupId>\n" + " <artifactId>maven-assembly-plugin</artifactId>\n" // + " <version>2.2-beta-2-SNAPSHOT</version>\n" + " <versioning>\n" + " <snapshot>\n" // + " <timestamp>20071017.162810</timestamp>\n" + " <buildNumber>20</buildNumber>\n" // + " </snapshot>\n" + " <lastUpdated>20071017162814</lastUpdated>\n" + " </versioning>\n" // + "</metadata>"; // String expectedManagedContents = null; // File remoteFile = populateRepo( remoteSnapshots, resourcePath, expectedRemoteContents ); // // if ( hasManagedCopy ) // { // expectedManagedContents = "<metadata>\n" + " <groupId>org.apache.maven.plugins</groupId>\n" // + " <artifactId>maven-assembly-plugin</artifactId>\n" + " <version>2.2-beta-2-SNAPSHOT</version>\n" // + "</metadata>"; // // File managedFile = populateRepo( repoRootInternal, resourcePath, expectedManagedContents ); // managedFile.setLastModified( remoteFile.lastModified() + deltaManagedToRemoteTimestamp ); // } // // setupConnector( REPOID_INTERNAL, remoteSnapshots ); // saveConfiguration(); // // // --- Execution // // process the response code later, not via an exception. // HttpUnitOptions.setExceptionsThrownOnErrorStatus( false ); // // WebRequest request = new GetMethodWebRequest( "http://machine.com/repository/internal/" + resourcePath ); // WebResponse response = sc.getResponse( request ); // // // --- Verification // // switch ( expectation ) // { // case EXPECT_MANAGED_CONTENTS: // assertResponseOK( response ); // assertTrue( "Invalid Test Case: Can't expect managed contents with " // + "test that doesn't have a managed copy in the first place.", hasManagedCopy ); // String actualContents = response.getText(); // XMLAssert.assertXMLEqual( expectedManagedContents, actualContents ); // // assertEquals( "Expected managed file contents", expectedManagedContents, response.getText() ); // break; // case EXPECT_REMOTE_CONTENTS: // assertResponseOK( response ); // assertEquals( "Expected remote file contents", expectedRemoteContents, response.getText() ); // break; // case EXPECT_NOT_FOUND: // assertResponseNotFound( response ); // assertManagedFileNotExists( repoRootInternal, resourcePath ); // break; // } // } @Before @Override public void tearDown() throws Exception { shutdownServer( remotePrivateSnapshots ); super.tearDown(); } }