]> source.dussan.org Git - archiva.git/blob
0a1b5679551be7ec2b4b85057b4a8ee574d50420
[archiva.git] /
1 package org.apache.archiva.indexer.search;
2
3 /*
4 * Licensed to the Apache Software Foundation (ASF) under one
5 * or more contributor license agreements.  See the NOTICE file
6 * distributed with this work for additional information
7 * regarding copyright ownership.  The ASF licenses this file
8 * to you under the Apache License, Version 2.0 (the
9 * "License"); you may not use this file except in compliance
10 * with the License.  You may obtain a copy of the License at
11 *
12 *  http://www.apache.org/licenses/LICENSE-2.0
13 *
14 * Unless required by applicable law or agreed to in writing,
15 * software distributed under the License is distributed on an
16 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17 * KIND, either express or implied.  See the License for the
18 * specific language governing permissions and limitations
19 * under the License.
20 */
21
22 import junit.framework.TestCase;
23 import org.apache.archiva.common.plexusbridge.MavenIndexerUtils;
24 import org.apache.archiva.common.plexusbridge.PlexusSisuBridge;
25 import org.apache.commons.io.FileUtils;
26 import org.apache.maven.archiva.common.utils.FileUtil;
27 import org.apache.maven.archiva.configuration.ArchivaConfiguration;
28 import org.apache.maven.archiva.configuration.Configuration;
29 import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration;
30 import org.apache.maven.index.ArtifactContext;
31 import org.apache.maven.index.ArtifactContextProducer;
32 import org.apache.maven.index.NexusIndexer;
33 import org.apache.maven.index.context.IndexingContext;
34 import org.apache.maven.index.context.UnsupportedExistingLuceneIndexException;
35 import org.easymock.MockControl;
36 import org.junit.After;
37 import org.junit.Before;
38 import org.junit.runner.RunWith;
39 import org.springframework.test.context.ContextConfiguration;
40 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
41
42 import javax.inject.Inject;
43 import java.io.File;
44 import java.io.IOException;
45 import java.util.ArrayList;
46 import java.util.List;
47
48 /**
49  * @author Olivier Lamy
50  */
51 @RunWith( SpringJUnit4ClassRunner.class )
52 @ContextConfiguration( locations = { "classpath*:/META-INF/spring-context.xml", "classpath:/spring-context.xml" } )
53 public abstract class AbstractNexusRepositorySearch
54     extends TestCase
55 {
56
57     public static String TEST_REPO_1 = "nexus-search-test-repo";
58
59     public static String TEST_REPO_2 = "nexus-search-test-repo-2";
60
61     NexusRepositorySearch search;
62
63     ArchivaConfiguration archivaConfig;
64
65     ArtifactContextProducer artifactContextProducer;
66
67     MockControl archivaConfigControl;
68
69     Configuration config;
70
71     @Inject
72     PlexusSisuBridge plexusSisuBridge;
73
74     @Inject
75     MavenIndexerUtils mavenIndexerUtils;
76
77     NexusIndexer nexusIndexer;
78
79     @Before
80     public void setUp()
81         throws Exception
82     {
83         super.setUp();
84
85         FileUtils.deleteDirectory(
86             new File( FileUtil.getBasedir(), "/target/test-classes/" + TEST_REPO_1 + "/.indexer" ) );
87         assertFalse( new File( FileUtil.getBasedir(), "/target/test-classes/" + TEST_REPO_1 + "/.indexer" ).exists() );
88
89         FileUtils.deleteDirectory(
90             new File( FileUtil.getBasedir(), "/target/test-classes/" + TEST_REPO_2 + "/.indexer" ) );
91         assertFalse( new File( FileUtil.getBasedir(), "/target/test-classes/" + TEST_REPO_2 + "/.indexer" ).exists() );
92
93         archivaConfigControl = MockControl.createControl( ArchivaConfiguration.class );
94
95         archivaConfig = (ArchivaConfiguration) archivaConfigControl.getMock();
96
97         search = new NexusRepositorySearch( plexusSisuBridge, archivaConfig, mavenIndexerUtils );
98
99         nexusIndexer = plexusSisuBridge.lookup( NexusIndexer.class );
100
101         artifactContextProducer = plexusSisuBridge.lookup( ArtifactContextProducer.class );
102
103         config = new Configuration();
104         config.addManagedRepository( createRepositoryConfig( TEST_REPO_1 ) );
105         config.addManagedRepository( createRepositoryConfig( TEST_REPO_2 ) );
106     }
107
108     @After
109     public void tearDown()
110         throws Exception
111     {
112
113         for ( IndexingContext indexingContext : nexusIndexer.getIndexingContexts().values() )
114         {
115             nexusIndexer.removeIndexingContext( indexingContext, true );
116         }
117
118         FileUtils.deleteDirectory(
119             new File( FileUtil.getBasedir(), "/target/test-classes/" + TEST_REPO_1 + "/.indexer" ) );
120         assertFalse( new File( FileUtil.getBasedir(), "/target/test-classes/" + TEST_REPO_1 + "/.indexer" ).exists() );
121
122         FileUtils.deleteDirectory(
123             new File( FileUtil.getBasedir(), "/target/test-classes/" + TEST_REPO_2 + "/.indexer" ) );
124         assertFalse( new File( FileUtil.getBasedir(), "/target/test-classes/" + TEST_REPO_2 + "/.indexer" ).exists() );
125
126         super.tearDown();
127     }
128
129     protected ManagedRepositoryConfiguration createRepositoryConfig( String repository )
130     {
131         ManagedRepositoryConfiguration repositoryConfig = new ManagedRepositoryConfiguration();
132         repositoryConfig.setId( repository );
133         repositoryConfig.setLocation( FileUtil.getBasedir() + "/target/test-classes/" + repository );
134         repositoryConfig.setLayout( "default" );
135         repositoryConfig.setName( repository );
136         repositoryConfig.setScanned( true );
137         repositoryConfig.setSnapshots( false );
138         repositoryConfig.setReleases( true );
139
140         return repositoryConfig;
141     }
142
143     protected void createIndex( String repository, List<File> filesToBeIndexed, boolean scan )
144         throws IOException, UnsupportedExistingLuceneIndexException
145     {
146
147         File indexerDirectory = new File( FileUtil.getBasedir(), "/target/test-classes/" + repository + "/.indexer" );
148
149         if ( indexerDirectory.exists() )
150         {
151             FileUtils.deleteDirectory( indexerDirectory );
152         }
153
154         assertFalse( indexerDirectory.exists() );
155
156         File lockFile =
157             new File( FileUtil.getBasedir(), "/target/test-classes/" + repository + "/.indexer/write.lock" );
158         if ( lockFile.exists() )
159         {
160             lockFile.delete();
161         }
162
163         assertFalse( lockFile.exists() );
164
165         File repo = new File( FileUtil.getBasedir(), "/target/test-classes/" + repository );
166         File indexDirectory = new File( FileUtil.getBasedir(), "/target/test-classes/" + repository + "/.indexer" );
167
168         IndexingContext context = nexusIndexer.addIndexingContext( repository, repository, repo, indexDirectory,
169                                                                    repo.toURI().toURL().toExternalForm(),
170                                                                    indexDirectory.toURI().toURL().toString(),
171                                                                    search.getAllIndexCreators() );
172
173         List<ArtifactContext> artifactContexts = new ArrayList<ArtifactContext>( filesToBeIndexed.size() );
174         for ( File artifactFile : filesToBeIndexed )
175         {
176             ArtifactContext ac = artifactContextProducer.getArtifactContext( context, artifactFile );
177             artifactContexts.add( ac );
178         }
179
180         context.setSearchable( true );
181
182         if ( filesToBeIndexed != null && !filesToBeIndexed.isEmpty() )
183         {
184             nexusIndexer.addArtifactsToIndex( artifactContexts, context );
185         }
186         if ( scan )
187         {
188             nexusIndexer.scan( context, false );
189         }
190         assertTrue( new File( FileUtil.getBasedir(), "/target/test-classes/" + repository + "/.indexer" ).exists() );
191     }
192 }