]> source.dussan.org Git - archiva.git/blob
c722ae901d614dc4dc737a03a16241b16312e6b2
[archiva.git] /
1 package org.apache.archiva.web.xmlrpc.services;
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
23 import java.util.ArrayList;
24 import java.util.Date;
25 import java.util.List;
26
27 import org.apache.archiva.indexer.search.RepositorySearch;
28 import org.apache.archiva.indexer.util.SearchUtil;
29 import org.apache.archiva.web.xmlrpc.api.SearchService;
30 import org.apache.archiva.web.xmlrpc.api.beans.Artifact;
31 import org.apache.archiva.web.xmlrpc.api.beans.Dependency;
32 import org.apache.archiva.web.xmlrpc.security.XmlRpcUserRepositories;
33 import org.apache.maven.archiva.database.ArchivaDAO;
34 import org.apache.maven.archiva.database.ArtifactDAO;
35 import org.apache.maven.archiva.database.ObjectNotFoundException;
36 import org.apache.maven.archiva.database.browsing.BrowsingResults;
37 import org.apache.maven.archiva.database.browsing.RepositoryBrowsing;
38 import org.apache.maven.archiva.database.constraints.ArtifactsByChecksumConstraint;
39 import org.apache.maven.archiva.indexer.search.SearchResultHit;
40 import org.apache.maven.archiva.indexer.search.SearchResultLimits;
41 import org.apache.maven.archiva.indexer.search.SearchResults;
42 import org.apache.maven.archiva.model.ArchivaArtifact;
43 import org.apache.maven.archiva.model.ArchivaProjectModel;
44 import org.codehaus.plexus.spring.PlexusInSpringTestCase;
45 import org.easymock.MockControl;
46 import org.easymock.classextension.MockClassControl;
47
48 /**
49  * SearchServiceImplTest
50  * 
51  * @version $Id: SearchServiceImplTest.java
52  */
53 public class SearchServiceImplTest
54     extends PlexusInSpringTestCase
55 {
56     private SearchService searchService;
57     
58     private MockControl userReposControl;
59     
60     private XmlRpcUserRepositories userRepos;
61     
62     private MockControl searchControl;
63     
64     private RepositorySearch search;
65         
66     private MockControl archivaDAOControl;
67     
68     private ArchivaDAO archivaDAO;
69     
70     private MockControl artifactDAOControl;
71     
72     private ArtifactDAO artifactDAO;
73     
74     private MockControl repoBrowsingControl;
75     
76     private RepositoryBrowsing repoBrowsing;
77         
78     @Override
79     public void setUp()
80         throws Exception
81     {
82         userReposControl = MockClassControl.createControl( XmlRpcUserRepositories.class );
83         userRepos = ( XmlRpcUserRepositories ) userReposControl.getMock();
84                 
85         archivaDAOControl = MockControl.createControl( ArchivaDAO.class );
86         archivaDAO = ( ArchivaDAO ) archivaDAOControl.getMock();
87         
88         repoBrowsingControl = MockControl.createControl( RepositoryBrowsing.class );
89         repoBrowsing = ( RepositoryBrowsing ) repoBrowsingControl.getMock();
90         
91         searchControl = MockControl.createControl( RepositorySearch.class );
92         search = ( RepositorySearch ) searchControl.getMock();
93         
94         searchService = new SearchServiceImpl( userRepos, archivaDAO, repoBrowsing, search );
95         
96         artifactDAOControl = MockControl.createControl( ArtifactDAO.class );
97         artifactDAO = ( ArtifactDAO ) artifactDAOControl.getMock();
98     }
99     
100     /*
101      * quick/general text search which returns a list of artifacts
102      * query for an artifact based on a checksum
103      * query for all available versions of an artifact, sorted in version significance order
104      * query for all available versions of an artifact since a given date
105      * query for an artifact's direct dependencies
106      * query for an artifact's dependency tree (as with mvn dependency:tree - no duplicates should be included)
107      * query for all artifacts that depend on a given artifact
108      */
109  
110  /* quick search */
111     
112 //    public void testQuickSearchArtifactBytecodeSearch()
113 //        throws Exception
114 //    {
115 //        // 1. check whether bytecode search or ordinary search
116 //        // 2. get observable repos
117 //        // 3. convert results to a list of Artifact objects
118 //
119 //        List<String> observableRepoIds = new ArrayList<String>();
120 //        observableRepoIds.add( "repo1.mirror" );
121 //        observableRepoIds.add( "public.releases" );
122 //
123 //        userReposControl.expectAndReturn( userRepos.getObservableRepositories(), observableRepoIds );
124 //
125 //        Date whenGathered = new Date();
126 //        SearchResults results = new SearchResults();
127 //        ArchivaArtifact artifact = new ArchivaArtifact( "org.apache.archiva", "archiva-test", "1.0", "", "jar", "public.releases" );
128 //        artifact.getModel().setWhenGathered( whenGathered );
129 //
130 //        SearchResultHit resultHit = new SearchResultHit();
131 //        resultHit.setArtifact(artifact);
132 //        resultHit.setRepositoryId("repo1.mirror");
133 //
134 //        results.addHit(SearchUtil.getHitId(artifact.getGroupId(), artifact.getArtifactId()), resultHit);
135 //
136 //        SearchResultLimits limits = new SearchResultLimits( SearchResultLimits.ALL_PAGES );
137 //
138 //        searchControl.expectAndDefaultReturn( search.search( "", observableRepoIds, "MyClassName", limits, null ), results );
139 //
140 //        archivaDAOControl.expectAndReturn( archivaDAO.getArtifactDAO(), artifactDAO );
141 //        artifactDAOControl.expectAndReturn( artifactDAO.getArtifact( "org.apache.archiva", "archiva-test", "1.0", "", "pom", "public.releases" ), artifact );
142 //
143 //        userReposControl.replay();
144 //        searchControl.replay();
145 //        archivaDAOControl.replay();
146 //        artifactDAOControl.replay();
147 //
148 //        List<Artifact> artifacts = searchService.quickSearch( "bytecode:MyClassName" );
149 //
150 //        userReposControl.verify();
151 //        searchControl.verify();
152 //        archivaDAOControl.verify();
153 //        artifactDAOControl.verify();
154 //
155 //        assertNotNull( artifacts );
156 //        assertEquals( 1, artifacts.size() );
157 //    }
158 //
159 //    public void testQuickSearchArtifactRegularSearch()
160 //        throws Exception
161 //    {
162 //        List<String> observableRepoIds = new ArrayList<String>();
163 //        observableRepoIds.add( "repo1.mirror" );
164 //        observableRepoIds.add( "public.releases" );
165 //
166 //        userReposControl.expectAndReturn( userRepos.getObservableRepositories(), observableRepoIds );
167 //
168 //        Date whenGathered = new Date();
169 //        SearchResults results = new SearchResults();
170 //        ArchivaArtifact artifact = new ArchivaArtifact( "org.apache.archiva", "archiva-test", "1.0", "", "jar", "public.releases" );
171 //        artifact.getModel().setWhenGathered( whenGathered );
172 //
173 //
174 //        SearchResultHit resultHit = new SearchResultHit();
175 //        resultHit.setArtifact(artifact);
176 //        resultHit.setRepositoryId("repo1.mirror");
177 //        results.addHit(SearchUtil.getHitId(artifact.getGroupId(), artifact.getArtifactId()), resultHit);
178 //
179 //        SearchResultLimits limits = new SearchResultLimits( SearchResultLimits.ALL_PAGES );
180 //
181 //        searchControl.expectAndDefaultReturn( search.search( "", observableRepoIds, "archiva", limits, null ), results );
182 //
183 //        archivaDAOControl.expectAndReturn( archivaDAO.getArtifactDAO(), artifactDAO );
184 //        artifactDAOControl.expectAndReturn( artifactDAO.getArtifact( "org.apache.archiva", "archiva-test", "1.0", "", "pom", "public.releases" ), artifact );
185 //
186 //        userReposControl.replay();
187 //        searchControl.replay();
188 //        archivaDAOControl.replay();
189 //        artifactDAOControl.replay();
190 //
191 //        List<Artifact> artifacts = searchService.quickSearch( "archiva" );
192 //
193 //        userReposControl.verify();
194 //        searchControl.verify();
195 //        archivaDAOControl.verify();
196 //        artifactDAOControl.verify();
197 //
198 //        assertNotNull( artifacts );
199 //        assertEquals( 1, artifacts.size() );
200 //    }
201     
202 /* query artifact by checksum */
203     
204     public void testGetArtifactByChecksum()
205         throws Exception
206     {
207         Date whenGathered = new Date();
208         
209         ArtifactsByChecksumConstraint constraint = new ArtifactsByChecksumConstraint( "a1b2c3aksjhdasfkdasasd" );
210         List<ArchivaArtifact> artifacts = new ArrayList<ArchivaArtifact>();
211         ArchivaArtifact artifact = new ArchivaArtifact( "org.apache.archiva", "archiva-test", "1.0", "", "jar", "test-repo"  );
212         artifact.getModel().setWhenGathered( whenGathered );
213         artifacts.add( artifact );
214         
215         archivaDAOControl.expectAndReturn( archivaDAO.getArtifactDAO(), artifactDAO );
216         artifactDAO.queryArtifacts( constraint );
217         artifactDAOControl.setMatcher( MockControl.ALWAYS_MATCHER );
218         artifactDAOControl.setReturnValue( artifacts );
219         
220         archivaDAOControl.replay();
221         artifactDAOControl.replay();
222         
223         List<Artifact> results = searchService.getArtifactByChecksum( "a1b2c3aksjhdasfkdasasd" );
224         
225         archivaDAOControl.verify();
226         artifactDAOControl.verify();
227         
228         assertNotNull( results );
229         assertEquals( 1, results.size() );
230     }
231     
232 /* query artifact versions */
233     
234     public void testGetArtifactVersionsArtifactExists()
235         throws Exception
236     {
237         Date whenGathered = new Date();
238         
239         List<String> observableRepoIds = new ArrayList<String>();
240         observableRepoIds.add( "repo1.mirror" );
241         observableRepoIds.add( "public.releases" );
242         
243         List<String> versions = new ArrayList<String>();
244         versions.add( "1.0" );
245         versions.add( "1.1-beta-1" );
246         versions.add( "1.1-beta-2" );
247         versions.add( "1.1" );
248         versions.add( "1.2" );
249         versions.add( "1.2.1-SNAPSHOT" );
250         
251         BrowsingResults results = new BrowsingResults( "org.apache.archiva", "archiva-test" );
252         results.setSelectedRepositoryIds( observableRepoIds );
253         results.setVersions( versions );
254         
255         List<ArchivaArtifact> archivaArtifacts = new ArrayList<ArchivaArtifact>();
256         ArchivaArtifact archivaArtifact = new ArchivaArtifact( "org.apache.archiva", "archiva-test", versions.get( 0 ), "", "pom", "repo1.mirror" );
257         archivaArtifact.getModel().setWhenGathered( whenGathered );
258         archivaArtifacts.add( archivaArtifact );
259         
260         archivaArtifact = new ArchivaArtifact( "org.apache.archiva", "archiva-test", versions.get( 1 ), "", "pom", "public.releases" );
261         archivaArtifact.getModel().setWhenGathered( whenGathered );
262         archivaArtifacts.add( archivaArtifact );
263         
264         archivaArtifact = new ArchivaArtifact( "org.apache.archiva", "archiva-test", versions.get( 2 ), "", "pom", "repo1.mirror" );
265         archivaArtifact.getModel().setWhenGathered( whenGathered );
266         archivaArtifacts.add( archivaArtifact );
267         
268         archivaArtifact = new ArchivaArtifact( "org.apache.archiva", "archiva-test", versions.get( 3 ), "", "pom", "public.releases" );
269         archivaArtifact.getModel().setWhenGathered( whenGathered );
270         archivaArtifacts.add( archivaArtifact );
271         
272         archivaArtifact = new ArchivaArtifact( "org.apache.archiva", "archiva-test", versions.get( 4 ), "", "pom", "repo1.mirror" );
273         archivaArtifact.getModel().setWhenGathered( whenGathered );
274         archivaArtifacts.add( archivaArtifact );
275         
276         archivaArtifact = new ArchivaArtifact( "org.apache.archiva", "archiva-test", versions.get( 5 ), "", "pom", "public.releases" );
277         archivaArtifact.getModel().setWhenGathered( whenGathered );
278         archivaArtifacts.add( archivaArtifact );
279         
280         userReposControl.expectAndReturn( userRepos.getObservableRepositories(), observableRepoIds );
281         repoBrowsingControl.expectAndReturn( repoBrowsing.selectArtifactId( "", observableRepoIds, "org.apache.archiva", "archiva-test" ), results );
282         archivaDAOControl.expectAndReturn( archivaDAO.getArtifactDAO(), artifactDAO );
283         
284         artifactDAOControl.expectAndDefaultReturn( artifactDAO.getArtifact( "org.apache.archiva", "archiva-test", versions.get( 0 ), "", "pom", "repo1.mirror" ),  archivaArtifacts.get( 0 ) );
285         artifactDAOControl.expectAndDefaultReturn( artifactDAO.getArtifact( "org.apache.archiva", "archiva-test", versions.get( 1 ), "", "pom", "public.releases" ),  archivaArtifacts.get( 1 ) );
286         artifactDAOControl.expectAndDefaultReturn( artifactDAO.getArtifact( "org.apache.archiva", "archiva-test", versions.get( 2 ), "", "pom", "repo1.mirror" ),  archivaArtifacts.get( 2 ) );
287         artifactDAOControl.expectAndDefaultReturn( artifactDAO.getArtifact( "org.apache.archiva", "archiva-test", versions.get( 3 ), "", "pom", "public.releases" ),  archivaArtifacts.get( 3 ) );
288         artifactDAOControl.expectAndDefaultReturn( artifactDAO.getArtifact( "org.apache.archiva", "archiva-test", versions.get( 4 ), "", "pom", "repo1.mirror" ),  archivaArtifacts.get( 4 ) );
289         artifactDAOControl.expectAndDefaultReturn( artifactDAO.getArtifact( "org.apache.archiva", "archiva-test", versions.get( 5 ), "", "pom", "public.releases" ),  archivaArtifacts.get( 5 ) );
290         
291         userReposControl.replay();
292         repoBrowsingControl.replay();
293         archivaDAOControl.replay();
294         artifactDAOControl.replay();
295         
296         List<Artifact> artifacts = searchService.getArtifactVersions( "org.apache.archiva", "archiva-test" );
297         
298         userReposControl.verify();
299         repoBrowsingControl.verify();
300         archivaDAOControl.verify();
301         artifactDAOControl.verify();
302         
303         assertNotNull( artifacts );
304         assertEquals( 6, artifacts.size() );
305     }
306     
307 /* query artifact versions since a given date */
308     
309     public void testGetArtifactVersionsByDateArtifactExists()
310         throws Exception
311     {
312     
313     }
314     
315     public void testGetArtifactVersionsByDateArtifactDoesNotExist()
316         throws Exception
317     {
318     
319     }
320     
321 /* query artifact dependencies */
322     
323     public void testGetDependenciesArtifactExists()
324         throws Exception
325     {   
326         List<String> observableRepoIds = new ArrayList<String>();
327         observableRepoIds.add( "repo1.mirror" );
328         observableRepoIds.add( "public.releases" );
329         
330         ArchivaProjectModel model = new ArchivaProjectModel();
331         model.setGroupId( "org.apache.archiva" );
332         model.setArtifactId( "archiva-test" );
333         model.setVersion( "1.0" );
334         
335         org.apache.maven.archiva.model.Dependency dependency = new org.apache.maven.archiva.model.Dependency();
336         dependency.setGroupId( "commons-logging" );
337         dependency.setArtifactId( "commons-logging" );
338         dependency.setVersion( "2.0" );
339         
340         model.addDependency( dependency );
341         
342         dependency = new org.apache.maven.archiva.model.Dependency();
343         dependency.setGroupId( "junit" );
344         dependency.setArtifactId( "junit" );
345         dependency.setVersion( "2.4" );
346         dependency.setScope( "test" );
347         
348         model.addDependency( dependency );
349         
350         userReposControl.expectAndReturn( userRepos.getObservableRepositories(), observableRepoIds );        
351         repoBrowsingControl.expectAndReturn( 
352                  repoBrowsing.selectVersion( "", observableRepoIds, "org.apache.archiva", "archiva-test", "1.0" ), model );
353         
354         repoBrowsingControl.replay(); 
355         userReposControl.replay();
356         
357         List<Dependency> dependencies = searchService.getDependencies( "org.apache.archiva", "archiva-test", "1.0" );
358         
359         repoBrowsingControl.verify();
360         userReposControl.verify();
361         
362         assertNotNull( dependencies );
363         assertEquals( 2, dependencies.size() );
364     }
365     
366     public void testGetDependenciesArtifactDoesNotExist()
367         throws Exception
368     {
369         List<String> observableRepoIds = new ArrayList<String>();
370         observableRepoIds.add( "repo1.mirror" );
371         observableRepoIds.add( "public.releases" );
372         
373         userReposControl.expectAndReturn( userRepos.getObservableRepositories(), observableRepoIds );
374         repoBrowsingControl.expectAndThrow( 
375                repoBrowsing.selectVersion( "", observableRepoIds, "org.apache.archiva", "archiva-test", "1.0" ), new ObjectNotFoundException( "Artifact does not exist." ) );
376         
377         userReposControl.replay();
378         repoBrowsingControl.replay();
379         
380         try
381         {
382             List<Dependency> dependencies = searchService.getDependencies( "org.apache.archiva", "archiva-test", "1.0" );
383             fail( "An exception should have been thrown." );
384         }
385         catch ( Exception e )
386         {
387             assertEquals( "Artifact does not exist.", e.getMessage() );
388         }
389         
390         userReposControl.verify();
391         repoBrowsingControl.verify();
392     }
393     
394 /* get dependency tree */
395     
396     public void testGetDependencyTreeArtifactExists()
397         throws Exception
398     {
399         
400     }
401     
402     public void testGetDependencyTreeArtifactDoesNotExist()
403         throws Exception
404     {
405     
406     }
407     
408 /* get dependees */
409     
410     public void testGetDependees()
411         throws Exception
412     {
413         Date date = new Date();
414         List<String> observableRepoIds = new ArrayList<String>();
415         observableRepoIds.add( "repo1.mirror" );
416         observableRepoIds.add( "public.releases" );
417         
418         List dependeeModels = new ArrayList();
419         ArchivaProjectModel dependeeModel = new ArchivaProjectModel();
420         dependeeModel.setGroupId( "org.apache.archiva" );
421         dependeeModel.setArtifactId( "archiva-dependee-one" );
422         dependeeModel.setVersion( "1.0" );
423         dependeeModel.setWhenIndexed( date );
424         dependeeModels.add( dependeeModel );
425         
426         dependeeModel = new ArchivaProjectModel();
427         dependeeModel.setGroupId( "org.apache.archiva" );
428         dependeeModel.setArtifactId( "archiva-dependee-two" );
429         dependeeModel.setVersion( "1.0" );
430         dependeeModel.setWhenIndexed( date );
431         dependeeModels.add( dependeeModel );
432         
433         userReposControl.expectAndReturn( userRepos.getObservableRepositories(), observableRepoIds );
434         repoBrowsingControl.expectAndReturn( repoBrowsing.getUsedBy( "", observableRepoIds, "org.apache.archiva", "archiva-test", "1.0" ), dependeeModels );
435         
436         repoBrowsingControl.replay(); 
437         userReposControl.replay();
438
439         List<Artifact> dependees = searchService.getDependees( "org.apache.archiva", "archiva-test", "1.0" );
440         
441         repoBrowsingControl.verify();
442         userReposControl.verify();
443         
444         assertNotNull( dependees );
445         assertEquals( 2, dependees.size() );
446     }
447     
448     /*public void testGetDependeesArtifactDoesNotExist()
449         throws Exception
450     {
451         Date date = new Date();
452         List<String> observableRepoIds = new ArrayList<String>();
453         observableRepoIds.add( "repo1.mirror" );
454         observableRepoIds.add( "public.releases" );
455         
456         List dependeeModels = new ArrayList();
457         ArchivaProjectModel dependeeModel = new ArchivaProjectModel();
458         dependeeModel.setGroupId( "org.apache.archiva" );
459         dependeeModel.setArtifactId( "archiva-dependee-one" );
460         dependeeModel.setVersion( "1.0" );
461         dependeeModel.setWhenIndexed( date );
462         dependeeModels.add( dependeeModel );
463         
464         dependeeModel = new ArchivaProjectModel();
465         dependeeModel.setGroupId( "org.apache.archiva" );
466         dependeeModel.setArtifactId( "archiva-dependee-two" );
467         dependeeModel.setVersion( "1.0" );
468         dependeeModel.setWhenIndexed( date );
469         dependeeModels.add( dependeeModel );
470         
471         userReposControl.expectAndReturn( userRepos.getObservableRepositories(), observableRepoIds );
472         repoBrowsingControl.expectAndReturn( repoBrowsing.getUsedBy( "", observableRepoIds, "org.apache.archiva", "archiva-test", "1.0" ), dependeeModels );
473         
474         repoBrowsingControl.replay(); 
475         userReposControl.replay();
476
477         try
478         {
479             List<Artifact> dependees = searchService.getDependees( "org.apache.archiva", "archiva-test", "1.0" );
480             fail( "An exception should have been thrown." );
481         }
482         catch ( Exception e )
483         {
484             assertEquals( "Artifact does not exist." )
485         }
486         
487         repoBrowsingControl.verify();
488         userReposControl.verify();
489         
490         assertNotNull( dependees );
491         assertEquals( 2, dependees.size() );
492     }*/
493 }