blob: e67770df4ffed1d2597c695f016f696e187dbb4d [file] [log] [blame]
/**
* 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.
*/
package org.apache.maven.mercury.repository.tests;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import org.apache.maven.mercury.MavenDependencyProcessor;
import org.apache.maven.mercury.artifact.ArtifactBasicMetadata;
import org.apache.maven.mercury.builder.api.MetadataReaderException;
import org.apache.maven.mercury.repository.api.RepositoryException;
import org.apache.maven.mercury.repository.local.m2.MetadataProcessorMock;
import org.apache.maven.mercury.repository.metadata.Metadata;
import org.apache.maven.mercury.repository.metadata.io.xpp3.MetadataXpp3Reader;
import org.apache.maven.mercury.repository.remote.m2.RemoteRepositoryM2;
import org.apache.maven.mercury.spi.http.client.retrieve.DefaultRetrievalRequest;
import org.apache.maven.mercury.spi.http.client.retrieve.DefaultRetriever;
import org.apache.maven.mercury.spi.http.client.retrieve.RetrievalResponse;
import org.apache.maven.mercury.spi.http.server.HttpTestServer;
import org.apache.maven.mercury.transport.api.Binding;
import org.apache.maven.mercury.transport.api.Server;
import org.apache.maven.mercury.util.FileUtil;
import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
public class RemoteRepositoryReaderM2Test
extends AbstractRepositoryReaderM2Test
{
MetadataXpp3Reader _reader;
File _testBase;
DefaultRetriever _retriever;
public String _port;
HttpTestServer _server;
DefaultRetrievalRequest _request;
//-------------------------------------------------------------------------
@Override
protected void setUp()
throws Exception
{
_testBase = new File("./target/test-classes/repo");
FileUtil.copy( new File("src/test/resources/repo"), _testBase, false );
_retriever = new DefaultRetriever();
_server = new HttpTestServer( _testBase, "/repo" );
_server.start();
_port = String.valueOf( _server.getPort() );
_reader = new MetadataXpp3Reader();
_request = new DefaultRetrievalRequest();
mdProcessor = new MetadataProcessorMock();
query = new ArrayList<ArtifactBasicMetadata>();
server = new Server( "test", new URL("http://localhost:"+_port+"/repo") );
repo = new RemoteRepositoryM2( "testRepo", server, new MavenDependencyProcessor() );
repo.setDependencyProcessor( mdProcessor );
reader = repo.getReader();
super.setUp();
}
//-------------------------------------------------------------------------
@Override
protected void tearDown()
throws Exception
{
super.tearDown();
_server.stop();
_server.destroy();
}
//-------------------------------------------------------------------------
private void validateMmd( Metadata mmd )
{
assertNotNull( mmd );
assertEquals("a", mmd.getGroupId() );
assertEquals("a", mmd.getArtifactId() );
assertNotNull( mmd.getVersioning() );
List<String> versions = mmd.getVersioning().getVersions();
assertNotNull( versions );
assertTrue( versions.size() > 3 );
}
//-------------------------------------------------------------------------
public void testReadMd()
throws FileNotFoundException, IOException, XmlPullParserException
{
FileInputStream fis = new FileInputStream( new File( _testBase, "a/a/maven-metadata.xml") );
Metadata mmd = _reader.read( fis );
fis.close();
validateMmd( mmd );
}
//-------------------------------------------------------------------------
public void testReadRemoteMdViaHttpClient()
throws FileNotFoundException, IOException, XmlPullParserException
{
File temp = new File("./target/maven-metadata.temp" );
HashSet<Binding> bindings = new HashSet<Binding>();
Binding aaMdBinding = new Binding( new URL("http://localhost:"+_port+"/repo/a/a/maven-metadata.xml"), temp);
bindings.add( aaMdBinding );
_request.setBindings(bindings);
RetrievalResponse response = _retriever.retrieve(_request);
if( response.hasExceptions() )
fail("retrieval exceptions: "+response.getExceptions()+"\nReading from "+aaMdBinding.getRemoteResource() );
Metadata mmd = _reader.read( new FileInputStream( temp ) );
temp.delete();
validateMmd( mmd );
}
//-------------------------------------------------------------------------
public void testReadRemoteMdViaRepositoryReader()
throws FileNotFoundException, IOException, XmlPullParserException, RepositoryException, MetadataReaderException
{
byte [] mmBuf = reader.readRawData( "a/a/maven-metadata.xml" );
assertNotNull( mmBuf );
assertTrue( mmBuf.length > 1 );
ByteArrayInputStream bais = new ByteArrayInputStream( mmBuf );
Metadata mmd = _reader.read( bais );
bais.close();
validateMmd( mmd );
}
//-------------------------------------------------------------------------
//-------------------------------------------------------------------------
}