blob: b77d6b0cdae835e7c6f9e56c3286ad798d246e7a [file] [log] [blame]
package org.apache.maven.index.packer;
/*
* 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 java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Arrays;
import java.util.List;
import junit.framework.Assert;
import org.apache.lucene.document.Document;
import org.apache.lucene.search.IndexSearcher;
import org.apache.maven.index.AbstractNexusIndexerTest;
import org.apache.maven.index.ArtifactInfo;
import org.apache.maven.index.NexusIndexer;
import org.apache.maven.index.context.IndexingContext;
import org.apache.maven.index.context.MergedIndexingContext;
import org.apache.maven.index.packer.IndexPackingRequest.IndexFormat;
import org.apache.maven.index.updater.IndexDataReader;
import org.codehaus.plexus.util.StringUtils;
public class NEXUS4149TransferFormatTest
extends AbstractNexusIndexerTest
{
protected File reposBase = new File( getBasedir(), "src/test/nexus-4149" );
protected File idxsBase = new File( getBasedir(), "target/index/nexus-4149" );
@Override
protected void setUp()
throws Exception
{
super.setUp();
}
@Override
protected void prepareNexusIndexer( NexusIndexer nexusIndexer )
throws Exception
{
IndexingContext ctx1 =
nexusIndexer.addIndexingContext( "repo1", "repo1", new File( reposBase, "repo1" ), new File( idxsBase,
"repo1" ), null, null, MIN_CREATORS );
nexusIndexer.scan( ctx1 );
IndexingContext ctx2 =
nexusIndexer.addIndexingContext( "repo2", "repo2", new File( reposBase, "repo2" ), new File( idxsBase,
"repo2" ), null, null, MIN_CREATORS );
nexusIndexer.scan( ctx2 );
IndexingContext ctx3 =
nexusIndexer.addIndexingContext( "repo3", "repo3", new File( reposBase, "repo3" ), new File( idxsBase,
"repo3" ), null, null, MIN_CREATORS );
nexusIndexer.scan( ctx3 );
IndexingContext ctx4 =
nexusIndexer.addIndexingContext( "repo4", "repo4", new File( reposBase, "repo4" ), new File( idxsBase,
"repo4" ), null, null, MIN_CREATORS );
nexusIndexer.scan( ctx4 );
context =
nexusIndexer.addMergedIndexingContext( "ctx", "ctx", new File( reposBase, "merged" ), new File( idxsBase,
"merged" ), false, Arrays.asList( ctx1, ctx2, ctx3, ctx4 ) );
context.getIndexDirectoryFile().mkdirs();
}
@Override
protected void unprepareNexusIndexer( NexusIndexer nexusIndexer )
throws Exception
{
// remove the merged
nexusIndexer.removeIndexingContext( context, true );
// remove members
MergedIndexingContext mctx = (MergedIndexingContext) context;
for ( IndexingContext member : mctx.getMembers() )
{
nexusIndexer.removeIndexingContext( member, true );
}
}
@Override
public void testDirectory()
throws IOException
{
// we use no directory
}
public void testMembersAndMergedRootGroups()
throws Exception
{
MergedIndexingContext mctx = (MergedIndexingContext) context;
for ( IndexingContext member : mctx.getMembers() )
{
Assert.assertEquals( "Members should have one root group!", 1, member.getRootGroups().size() );
}
Assert.assertEquals( "Merged should have one root multiply members count!", mctx.getMembers().size(),
mctx.getRootGroups().size() );
}
public void testTransportFile()
throws Exception
{
File packTargetDir = new File( getBasedir(), "target/nexus-4149/packed" );
IndexPacker packer = lookup( IndexPacker.class );
final IndexSearcher indexSearcher = context.acquireIndexSearcher();
try
{
IndexPackingRequest request = new IndexPackingRequest( context, indexSearcher.getIndexReader(), packTargetDir );
request.setCreateIncrementalChunks( false );
request.setFormats( Arrays.asList( IndexFormat.FORMAT_V1 ) );
packer.packIndex( request );
} finally {
context.releaseIndexSearcher( indexSearcher );
}
// read it up and verify, but stay "low level", directly consume the GZ file and count
InputStream fis = new BufferedInputStream( new FileInputStream( new File( packTargetDir, "nexus-maven-repository-index.gz" ) ) );
IndexDataReader reader = new IndexDataReader( fis );
try
{
// read header and neglect it
reader.readHeader();
// read docs
int totalDocs = 0;
int specialDocs = 0;
int artifactDocs = 0;
String allGroups = null;
String rootGroups = null;
Document doc;
while ( ( doc = reader.readDocument() ) != null )
{
totalDocs++;
if ( doc.getField( "DESCRIPTOR" ) != null || doc.getField( ArtifactInfo.ALL_GROUPS ) != null
|| doc.getField( ArtifactInfo.ROOT_GROUPS ) != null )
{
specialDocs++;
if ( doc.get( ArtifactInfo.ALL_GROUPS ) != null )
{
allGroups = doc.get( ArtifactInfo.ALL_GROUPS_LIST );
}
if ( doc.get( ArtifactInfo.ROOT_GROUPS ) != null )
{
rootGroups = doc.get( ArtifactInfo.ROOT_GROUPS_LIST );
}
}
else
{
artifactDocs++;
}
}
Assert.assertNotNull( "Group transport file should contain allGroups!", allGroups );
Assert.assertNotNull( "Group transport file should contain rootGroups!", rootGroups );
checkListOfStringDoesNotContainEmptyString( ArtifactInfo.str2lst( allGroups ) );
checkListOfStringDoesNotContainEmptyString( ArtifactInfo.str2lst( rootGroups ) );
Assert.assertEquals( 15, totalDocs );
// 1 descriptor + 1 allGroups + 1 rootGroups
Assert.assertEquals( 3, specialDocs );
// repo1 has 1 artifact, repo2 has 1 artifact and repo3 has 10 artifact
Assert.assertEquals( 12, artifactDocs );
}
finally
{
fis.close();
}
}
protected void checkListOfStringDoesNotContainEmptyString( List<String> lst )
{
if ( lst != null )
{
for ( String str : lst )
{
if ( StringUtils.isBlank( str ) )
{
throw new IllegalArgumentException( "List " + lst + " contains empty string!" );
}
}
}
}
}