blob: 26d2c369dac21eb8944fb6d29db37d096b36021d [file] [log] [blame]
package org.apache.archiva.rest.services;
/*
* 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 org.apache.archiva.admin.model.beans.UiConfiguration;
import org.apache.archiva.maven2.model.Artifact;
import org.apache.archiva.rest.api.model.ChecksumSearch;
import org.apache.archiva.rest.api.model.SearchRequest;
import org.apache.archiva.rest.api.services.SearchService;
import org.assertj.core.api.Assertions;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import static org.assertj.core.api.Assertions.assertThat;
/**
* @author Olivier Lamy
*/
public class SearchServiceTest
extends AbstractArchivaRestTest
{
private static final String TEST_REPO = "test-repo";
@Test
public void quickSearchOnArtifactId()
throws Exception
{
SearchService searchService = getSearchService( authorizationHeader );
// START SNIPPET: quick-search
List<Artifact> artifacts = searchService.quickSearch( "commons-logging" );
// return all artifacts with groupId OR artifactId OR version OR packaging OR className
// NOTE : only artifacts with classifier empty are returned
// END SNIPPET: quick-search
assertNotNull( artifacts );
assertTrue( " not 6 results for commons-logging search but " + artifacts.size() + ":" + artifacts,
artifacts.size() == 6 );
log.info( "artifacts for commons-logging size {} search {}", artifacts.size(), artifacts );
}
/**
* same search but with Guest user
*
* @throws Exception
*/
@Test
public void quickSearchOnArtifactIdGuest()
throws Exception
{
SearchService searchService = getSearchService( null );
// START SNIPPET: quick-search
List<Artifact> artifacts = searchService.quickSearch( "commons-logging" );
// return all artifacts with groupId OR artifactId OR version OR packaging OR className
// NOTE : only artifacts with classifier empty are returned
// END SNIPPET: quick-search
assertNotNull( artifacts );
assertTrue( " not 6 results for commons-logging search but " + artifacts.size() + ":" + artifacts,
artifacts.size() == 6 );
log.info( "artifacts for commons-logging size {} search {}", artifacts.size(), artifacts );
}
@Test
public void searchArtifactVersions()
throws Exception
{
// START SNIPPET: searchservice-artifact-versions
SearchService searchService = getSearchService( authorizationHeader );
List<Artifact> artifacts = searchService.getArtifactVersions( "commons-logging", "commons-logging", "jar" );
// END SNIPPET: searchservice-artifact-versions
assertNotNull( artifacts );
assertTrue( " not 13 results for commons-logging search but " + artifacts.size() + ":" + artifacts,
artifacts.size() == 13 );
log.info( "artifacts for commons-logging size {} search {}", artifacts.size(), artifacts );
for ( Artifact artifact : artifacts )
{
log.info( "url: {}", artifact.getUrl() );
String version = artifact.getVersion();
assertTrue( artifact.getUrl().contains( version ) );
}
}
@Test
public void searchWithSearchRequestGroupIdAndArtifactIdAndClassifier()
throws Exception
{
SearchService searchService = getSearchService( authorizationHeader );
// START SNIPPET: searchservice-with-classifier
SearchRequest searchRequest = new SearchRequest();
searchRequest.setGroupId( "commons-logging" );
searchRequest.setArtifactId( "commons-logging" );
searchRequest.setClassifier( "sources" );
List<Artifact> artifacts = searchService.searchArtifacts( searchRequest );
// END SNIPPET: searchservice-with-classifier
assertNotNull( artifacts );
assertTrue( " not 2 results for commons-logging search but " + artifacts.size() + ":" + artifacts,
artifacts.size() == 2 );
log.info( "artifacts for commons-logging size {} search {}", artifacts.size(), artifacts );
}
@Test
public void searchWithSearchRequestBundleSymbolicNameOneVersion()
throws Exception
{
SearchService searchService = getSearchService( authorizationHeader );
// START SNIPPET: searchservice-with-osgi
SearchRequest searchRequest = new SearchRequest();
searchRequest.setBundleSymbolicName( "org.apache.karaf.features.command" );
// END SNIPPET: searchservice-with-osgi
List<Artifact> artifacts = searchService.searchArtifacts( searchRequest );
assertNotNull( artifacts );
assertTrue(
" not 1 results for Bundle Symbolic Name org.apache.karaf.features.command but " + artifacts.size() + ":"
+ artifacts, artifacts.size() == 1 );
}
@Test
public void searchWithSearchRequestBundleSymbolicNameTwoVersion()
throws Exception
{
UiConfiguration uiConfiguration = new UiConfiguration();
uiConfiguration.setApplicationUrl( null );
getArchivaAdministrationService().setUiConfiguration( uiConfiguration );
SearchService searchService = getSearchService( authorizationHeader );
SearchRequest searchRequest = new SearchRequest();
searchRequest.setBundleSymbolicName( "org.apache.karaf.features.core" );
List<Artifact> artifacts = searchService.searchArtifacts( searchRequest );
assertThat( artifacts ).isNotNull().hasSize( 2 );
for ( Artifact artifact : artifacts )
{
log.info( "url: {}", artifact.getUrl() );
String version = artifact.getVersion();
Assertions.assertThat( artifact.getUrl() ) //
.isEqualTo( "http://localhost:" + getServerPort()
+ "/repository/test-repo/org/apache/karaf/features/org.apache.karaf.features.core/"
+ version + "/org.apache.karaf.features.core-" + version + ".jar" );
}
}
@Test
public void searchWithSearchRequestExportPackageOneVersion()
throws Exception
{
SearchService searchService = getSearchService( authorizationHeader );
SearchRequest searchRequest = new SearchRequest();
searchRequest.setBundleExportPackage( "org.apache.karaf.features.command.completers" );
searchRequest.setRepositories( Arrays.asList( TEST_REPO ) );
List<Artifact> artifacts = searchService.searchArtifacts( searchRequest );
assertNotNull( artifacts );
assertTrue( " not 1 results for Bundle ExportPackage org.apache.karaf.features.command.completers but "
+ artifacts.size() + ":" + artifacts, artifacts.size() == 1 );
log.info( "artifact url {}", artifacts.get( 0 ).getUrl() );
}
@Test
/**
* ensure we don't return response for an unknown repo
*/ public void searchWithSearchUnknwownRepoId()
throws Exception
{
SearchService searchService = getSearchService( authorizationHeader );
SearchRequest searchRequest = new SearchRequest();
searchRequest.setBundleExportPackage( "org.apache.karaf.features.command.completers" );
searchRequest.setRepositories( Arrays.asList( "tototititata" ) );
List<Artifact> artifacts = searchService.searchArtifacts( searchRequest );
assertNotNull( artifacts );
assertTrue( " not 0 results for Bundle ExportPackage org.apache.karaf.features.command.completers but " +
artifacts.size() + ":" + artifacts, artifacts.size() == 0 );
}
@Test
/**
* ensure we revert to all observable repos in case of no repo in the request
*/ public void searchWithSearchNoRepos()
throws Exception
{
SearchService searchService = getSearchService( authorizationHeader );
SearchRequest searchRequest = new SearchRequest();
searchRequest.setBundleExportPackage( "org.apache.karaf.features.command.completers" );
List<Artifact> artifacts = searchService.searchArtifacts( searchRequest );
assertNotNull( artifacts );
assertTrue( " not 0 results for Bundle ExportPackage org.apache.karaf.features.command.completers but "
+ artifacts.size() + ":" + artifacts, artifacts.size() == 1 );
log.info( "artifact url {}", artifacts.get( 0 ).getUrl() );
}
@Test
public void getAllGroupIds()
throws Exception
{
SearchService searchService = getSearchService( authorizationHeader );
Collection<String> groupIds = searchService.getAllGroupIds( Arrays.asList( TEST_REPO ) ).getGroupIds();
log.info( "groupIds {}", groupIds );
assertFalse( groupIds.isEmpty() );
assertTrue( groupIds.contains( "commons-cli" ) );
assertTrue( groupIds.contains( "org.apache.felix" ) );
}
@Test
/**
* test we don't return 2 artifacts pom + zip one
*/ public void getSearchArtifactsWithOnlyClassifier()
throws Exception
{
// force guest user creation if not exists
if ( getUserService( authorizationHeader ).getGuestUser() == null )
{
assertNotNull( getUserService( authorizationHeader ).createGuestUser() );
}
createAndIndexRepo( TEST_REPO, getProjectDirectory().resolve("src/test/repo-with-classifier-only") );
SearchService searchService = getSearchService( authorizationHeader );
SearchRequest searchRequest =
new SearchRequest( "org.foo", "studio-all-update-site", null, null, null, Arrays.asList( TEST_REPO ) );
List<Artifact> artifacts = searchService.searchArtifacts( searchRequest );
log.info( "artifacts: {}", artifacts );
assertEquals( 1, artifacts.size() );
}
/**
* sha1 commons-logging 1.1 ba24d5de831911b684c92cd289ed5ff826271824
*/
@Test
public void search_with_sha1()
throws Exception
{
SearchService searchService = getSearchService( authorizationHeader );
List<Artifact> artifacts = searchService.getArtifactByChecksum(
new ChecksumSearch( null, "ba24d5de831911b684c92cd289ed5ff826271824" ) );
Assertions.assertThat( artifacts ).isNotNull().isNotEmpty().hasSize( 1 );
}
/**
* md5 commons-logging 1.1 6b62417e77b000a87de66ee3935edbf5
*/
@Test
public void search_with_md5()
throws Exception
{
SearchService searchService = getSearchService( authorizationHeader );
List<Artifact> artifacts = searchService.getArtifactByChecksum(
new ChecksumSearch( null, "6b62417e77b000a87de66ee3935edbf5" ) );
Assertions.assertThat( artifacts ).isNotNull().isNotEmpty().hasSize( 1 );
}
@Before
public void createRepo()
throws Exception
{
// force guest user creation if not exists
if ( getUserService( authorizationHeader ).getGuestUser() == null )
{
assertNotNull( getUserService( authorizationHeader ).createGuestUser() );
}
createAndIndexRepo( TEST_REPO, getProjectDirectory( ).resolve( "src/test/repo-with-osgi" ) );
waitForScanToComplete( TEST_REPO );
}
@After
public void deleteRepo()
throws Exception
{
deleteTestRepo( TEST_REPO );
}
}