@@ -20,7 +20,10 @@ package org.apache.archiva.repository; | |||
*/ | |||
import java.util.Collections; | |||
import java.util.HashSet; | |||
import java.util.Locale; | |||
import java.util.Set; | |||
/** | |||
* Simple implementation of a managed repository. | |||
@@ -29,6 +32,8 @@ public abstract class AbstractManagedRepository extends AbstractRepository imple | |||
{ | |||
private boolean blocksRedeployment = false; | |||
private ManagedRepositoryContent content; | |||
private Set<ReleaseScheme> activeReleaseSchemes = new HashSet<>( ); | |||
private Set<ReleaseScheme> uActiveReleaseSchemes = Collections.unmodifiableSet( activeReleaseSchemes ); | |||
public AbstractManagedRepository( RepositoryType type, String id, String name ) | |||
{ | |||
@@ -62,4 +67,28 @@ public abstract class AbstractManagedRepository extends AbstractRepository imple | |||
{ | |||
return blocksRedeployment; | |||
} | |||
@Override | |||
public Set<ReleaseScheme> getActiveReleaseSchemes( ) | |||
{ | |||
return uActiveReleaseSchemes; | |||
} | |||
@Override | |||
public void addActiveReleaseScheme( ReleaseScheme scheme ) | |||
{ | |||
this.activeReleaseSchemes.add(scheme); | |||
} | |||
@Override | |||
public void removeActiveReleaseScheme( ReleaseScheme scheme ) | |||
{ | |||
this.activeReleaseSchemes.remove(scheme); | |||
} | |||
@Override | |||
public void clearActiveReleaseSchemes( ) | |||
{ | |||
this.activeReleaseSchemes.clear(); | |||
} | |||
} |
@@ -26,11 +26,9 @@ import com.cronutils.parser.CronParser; | |||
import org.apache.archiva.repository.features.RepositoryFeature; | |||
import java.net.URI; | |||
import java.util.ArrayList; | |||
import java.util.Collections; | |||
import java.util.HashMap; | |||
import java.util.HashSet; | |||
import java.util.List; | |||
import java.util.Locale; | |||
import java.util.Map; | |||
import java.util.Set; | |||
@@ -54,11 +52,8 @@ public abstract class AbstractRepository implements EditableRepository | |||
private Set<URI> uFailoverLocations = Collections.unmodifiableSet( failoverLocations ); | |||
private boolean scanned = true; | |||
String schedulingDefinition = "0 0 02 * *"; | |||
private boolean index; | |||
private URI indexPath; | |||
private boolean index = true; | |||
private String layout; | |||
private Set<ReleaseScheme> activeReleaseSchemes = new HashSet<>( ); | |||
private Set<ReleaseScheme> uActiveReleaseSchemes = Collections.unmodifiableSet( activeReleaseSchemes ); | |||
public static final CronDefinition CRON_DEFINITION = CronDefinitionBuilder.instanceDefinitionFor(CronType.QUARTZ); | |||
public AbstractRepository(RepositoryType type, String id, String name) { | |||
@@ -144,24 +139,12 @@ public abstract class AbstractRepository implements EditableRepository | |||
return index; | |||
} | |||
@Override | |||
public URI getIndexPath( ) | |||
{ | |||
return indexPath; | |||
} | |||
@Override | |||
public String getLayout( ) | |||
{ | |||
return layout; | |||
} | |||
@Override | |||
public Set<ReleaseScheme> getActiveReleaseSchemes( ) | |||
{ | |||
return uActiveReleaseSchemes; | |||
} | |||
@Override | |||
public abstract RepositoryCapabilities getCapabilities( ); | |||
@@ -231,36 +214,12 @@ public abstract class AbstractRepository implements EditableRepository | |||
this.index = hasIndex; | |||
} | |||
@Override | |||
public void setIndexPath( URI indexPath ) | |||
{ | |||
this.indexPath = indexPath; | |||
} | |||
@Override | |||
public void setLayout( String layout ) | |||
{ | |||
this.layout = layout; | |||
} | |||
@Override | |||
public void addActiveReleaseScheme( ReleaseScheme scheme ) | |||
{ | |||
this.activeReleaseSchemes.add(scheme); | |||
} | |||
@Override | |||
public void removeActiveReleaseScheme( ReleaseScheme scheme ) | |||
{ | |||
this.activeReleaseSchemes.remove(scheme); | |||
} | |||
@Override | |||
public void clearActiveReleaseSchemes( ) | |||
{ | |||
this.activeReleaseSchemes.clear(); | |||
} | |||
@Override | |||
public void setSchedulingDefinition(String cronExpression) { | |||
CronParser parser = new CronParser(CRON_DEFINITION); |
@@ -35,4 +35,22 @@ public interface EditableManagedRepository extends EditableRepository, ManagedRe | |||
* @param content | |||
*/ | |||
void setContent(ManagedRepositoryContent content); | |||
/** | |||
* Adds an active release scheme. Release schemes may be combined. | |||
* @param scheme the scheme to add. | |||
*/ | |||
void addActiveReleaseScheme(ReleaseScheme scheme); | |||
/** | |||
* Removes an active release scheme from the set. | |||
* @param scheme the scheme to remove. | |||
*/ | |||
void removeActiveReleaseScheme(ReleaseScheme scheme); | |||
/** | |||
* Clears all active release schemes. | |||
*/ | |||
void clearActiveReleaseSchemes(); | |||
} |
@@ -113,34 +113,11 @@ public interface EditableRepository extends Repository | |||
*/ | |||
void setIndex(boolean hasIndex); | |||
/** | |||
* Sets the path to the index directory. May be a relative or absolute URI. | |||
* @param indexPath the path | |||
*/ | |||
void setIndexPath(URI indexPath); | |||
/** | |||
* Sets the layout string. | |||
* @param layout | |||
*/ | |||
void setLayout(String layout); | |||
/** | |||
* Adds an active release scheme. Release schemes may be combined. | |||
* @param scheme the scheme to add. | |||
*/ | |||
void addActiveReleaseScheme(ReleaseScheme scheme); | |||
/** | |||
* Removes an active release scheme from the set. | |||
* @param scheme the scheme to remove. | |||
*/ | |||
void removeActiveReleaseScheme(ReleaseScheme scheme); | |||
/** | |||
* Clears all active release schemes. | |||
*/ | |||
void clearActiveReleaseSchemes(); | |||
} |
@@ -20,6 +20,8 @@ package org.apache.archiva.repository; | |||
*/ | |||
import java.util.Set; | |||
/** | |||
* Represents a managed repository, that is readable and writable. | |||
*/ | |||
@@ -37,4 +39,11 @@ public interface ManagedRepository extends Repository { | |||
* @return | |||
*/ | |||
boolean blocksRedeployments(); | |||
/** | |||
* Returns the release schemes that are active by this repository. E.g. for maven repositories | |||
* this may either be a release repository, a snapshot repository or a combined repository. | |||
* @return | |||
*/ | |||
Set<ReleaseScheme> getActiveReleaseSchemes(); | |||
} |
@@ -113,12 +113,6 @@ public interface Repository { | |||
*/ | |||
boolean hasIndex(); | |||
/** | |||
* Returns the path to the index parent folder. May be a HTTP URL or a file path. | |||
* @return | |||
*/ | |||
URI getIndexPath(); | |||
/** | |||
* Returns a layout definition. The returned string may be implementation specific and is not | |||
* standardized. | |||
@@ -127,13 +121,6 @@ public interface Repository { | |||
*/ | |||
String getLayout(); | |||
/** | |||
* Returns the release schemes that are active by this repository. E.g. for maven repositories | |||
* this may either be a release repository, a snapshot repository or a combined repository. | |||
* @return | |||
*/ | |||
Set<ReleaseScheme> getActiveReleaseSchemes(); | |||
/** | |||
* Returns the capabilities of the repository implementation. |
@@ -34,7 +34,7 @@ public interface RepositoryProvider | |||
{ | |||
Set<RepositoryType> provides(); | |||
ManagedRepository createManagedInstance( ManagedRepositoryConfiguration configuration); | |||
ManagedRepository createManagedInstance( ManagedRepositoryConfiguration configuration) throws RepositoryException; | |||
RemoteRepository createRemoteInstance( RemoteRepositoryConfiguration configuration); | |||
RemoteRepository createRemoteInstance( RemoteRepositoryConfiguration configuration) throws RepositoryException; | |||
} |
@@ -100,7 +100,7 @@ public class RepositoryRegistry | |||
ManagedRepository repo = createNewManagedRepository( providerMap.get( repositoryType ), repoConfig ); | |||
managedRepos.put(repo.getId(), repo); | |||
} catch (Exception e) { | |||
log.error("Could not create managed repository "+repoConfig.getId(), e); | |||
log.error("Could not create managed repository {}: {}", repoConfig.getId(), e.getMessage(), e); | |||
} | |||
} | |||
} | |||
@@ -142,7 +142,14 @@ public class RepositoryRegistry | |||
{ | |||
RepositoryType repositoryType = RepositoryType.valueOf( repoConfig.getType( ) ); | |||
if (providerMap.containsKey( repositoryType )) { | |||
remoteRepos.put(repoConfig.getId(), providerMap.get(repositoryType).createRemoteInstance( repoConfig )); | |||
try | |||
{ | |||
remoteRepos.put(repoConfig.getId(), providerMap.get(repositoryType).createRemoteInstance( repoConfig )); | |||
} | |||
catch ( Exception e ) | |||
{ | |||
log.error("Could not create repository {} from config: {}", repoConfig.getId(), e.getMessage(), e); | |||
} | |||
} | |||
} | |||
@@ -20,6 +20,8 @@ package org.apache.archiva.repository.features; | |||
*/ | |||
import java.net.URI; | |||
/** | |||
* | |||
* This feature provides some information about index creation. | |||
@@ -29,6 +31,8 @@ public class IndexCreationFeature implements RepositoryFeature<IndexCreationFeat | |||
private boolean skipPackedIndexCreation = false; | |||
private URI indexPath; | |||
public IndexCreationFeature() { | |||
} | |||
@@ -58,4 +62,24 @@ public class IndexCreationFeature implements RepositoryFeature<IndexCreationFeat | |||
public void setSkipPackedIndexCreation(boolean skipPackedIndexCreation) { | |||
this.skipPackedIndexCreation = skipPackedIndexCreation; | |||
} | |||
/** | |||
* Returns the path that is used to store the index. | |||
* @return the uri (may be relative or absolute) | |||
*/ | |||
public URI getIndexPath( ) | |||
{ | |||
return indexPath; | |||
} | |||
/** | |||
* Sets the path that is used to store the index. | |||
* @param indexPath the uri to the index path (may be relative) | |||
*/ | |||
public void setIndexPath( URI indexPath ) | |||
{ | |||
this.indexPath = indexPath; | |||
} | |||
} |
@@ -289,6 +289,15 @@ | |||
</execution> | |||
</executions> | |||
</plugin> | |||
<plugin> | |||
<groupId>org.apache.maven.plugins</groupId> | |||
<artifactId>maven-surefire-plugin</artifactId> | |||
<configuration> | |||
<systemPropertyVariables> | |||
<appserver.base>${project.build.directory}/test-repository</appserver.base> | |||
</systemPropertyVariables> | |||
</configuration> | |||
</plugin> | |||
</plugins> | |||
<pluginManagement> | |||
<plugins> |
@@ -30,7 +30,10 @@ import org.apache.archiva.repository.features.IndexCreationFeature; | |||
import org.apache.archiva.repository.features.RepositoryFeature; | |||
import org.apache.archiva.repository.features.StagingRepositoryFeature; | |||
import java.util.Collections; | |||
import java.util.HashSet; | |||
import java.util.Locale; | |||
import java.util.Set; | |||
/** | |||
* Maven2 managed repository implementation. | |||
@@ -97,4 +100,8 @@ public class MavenManagedRepository extends AbstractManagedRepository | |||
} | |||
return false; | |||
} | |||
} |
@@ -46,8 +46,7 @@ public class MavenRemoteRepository extends AbstractRemoteRepository | |||
new ReleaseScheme[] { ReleaseScheme.RELEASE, ReleaseScheme.SNAPSHOT }, | |||
new String[] { MavenManagedRepository.DEFAULT_LAYOUT, MavenManagedRepository.LEGACY_LAYOUT}, | |||
new String[] {}, | |||
new String[] {ArtifactCleanupFeature.class.getName(), IndexCreationFeature.class.getName(), | |||
StagingRepositoryFeature.class.getName(), RemoteIndexFeature.class.getName()}, | |||
new String[] {RemoteIndexFeature.class.getName()}, | |||
true, | |||
true, | |||
true, |
@@ -27,7 +27,7 @@ import org.apache.archiva.repository.ManagedRepository; | |||
import org.apache.archiva.repository.PasswordCredentials; | |||
import org.apache.archiva.repository.ReleaseScheme; | |||
import org.apache.archiva.repository.RemoteRepository; | |||
import org.apache.archiva.repository.Repository; | |||
import org.apache.archiva.repository.RepositoryException; | |||
import org.apache.archiva.repository.RepositoryProvider; | |||
import org.apache.archiva.repository.RepositoryType; | |||
import org.apache.archiva.repository.features.ArtifactCleanupFeature; | |||
@@ -46,6 +46,7 @@ import java.time.Period; | |||
import java.util.HashSet; | |||
import java.util.Locale; | |||
import java.util.Set; | |||
import java.util.regex.Pattern; | |||
/** | |||
* Provider for the maven2 repository implementations | |||
@@ -53,6 +54,7 @@ import java.util.Set; | |||
@Service("mavenRepositoryProvider") | |||
public class MavenRepositoryProvider implements RepositoryProvider | |||
{ | |||
private static final Logger log = LoggerFactory.getLogger( MavenRepositoryProvider.class ); | |||
static final Set<RepositoryType> TYPES = new HashSet<>( ); | |||
@@ -66,22 +68,37 @@ public class MavenRepositoryProvider implements RepositoryProvider | |||
return TYPES; | |||
} | |||
private URI getURIFromConfig(String config) throws RepositoryException { | |||
URI uri; | |||
try { | |||
uri = new URI(config); | |||
if (uri.getScheme()==null) { | |||
uri = new URI("file://"+config); | |||
} | |||
if (!"file".equals(uri.getScheme())) { | |||
log.error("Bad URI scheme found: {}, URI={}", uri.getScheme(), uri); | |||
throw new RepositoryException("The uri "+config+" is not valid. Only file:// URI is allowed for maven."); | |||
} | |||
} catch (URISyntaxException e) { | |||
String newCfg = "file://"+config; | |||
try | |||
{ | |||
uri = new URI(newCfg); | |||
} | |||
catch ( URISyntaxException e1 ) | |||
{ | |||
log.error("Could not create URI from {} -> ", config, newCfg); | |||
throw new RepositoryException( "The config entry "+config+" cannot be converted to URI." ); | |||
} | |||
} | |||
return uri; | |||
} | |||
@Override | |||
public ManagedRepository createManagedInstance( ManagedRepositoryConfiguration cfg ) | |||
public ManagedRepository createManagedInstance( ManagedRepositoryConfiguration cfg ) throws RepositoryException | |||
{ | |||
MavenManagedRepository repo = new MavenManagedRepository(cfg.getId() ,cfg.getName()); | |||
try | |||
{ | |||
if (cfg.getLocation().startsWith("file:")) { | |||
repo.setLocation( new URI(cfg.getLocation()) ); | |||
} else { | |||
repo.setLocation( new URI("file://"+cfg.getLocation()) ); | |||
} | |||
} | |||
catch ( URISyntaxException e ) | |||
{ | |||
log.error("Could not set repository uri "+cfg.getLocation()); | |||
} | |||
repo.setLocation( getURIFromConfig( cfg.getLocation() ) ); | |||
setBaseConfig( repo, cfg ); | |||
repo.setSchedulingDefinition(cfg.getRefreshCronExpression()); | |||
repo.setBlocksRedeployment( cfg.isBlockRedeployments() ); | |||
@@ -101,6 +118,7 @@ public class MavenRepositoryProvider implements RepositoryProvider | |||
IndexCreationFeature indexCreationFeature = repo.getFeature( IndexCreationFeature.class ).get( ); | |||
indexCreationFeature.setSkipPackedIndexCreation( cfg.isSkipPackedIndexCreation() ); | |||
indexCreationFeature.setIndexPath( getURIFromConfig( cfg.getIndexDir() ) ); | |||
ArtifactCleanupFeature artifactCleanupFeature = repo.getFeature( ArtifactCleanupFeature.class ).get(); | |||
@@ -111,6 +129,8 @@ public class MavenRepositoryProvider implements RepositoryProvider | |||
return repo; | |||
} | |||
@Override | |||
public RemoteRepository createRemoteInstance( RemoteRepositoryConfiguration cfg ) | |||
{ | |||
@@ -147,9 +167,14 @@ public class MavenRepositoryProvider implements RepositoryProvider | |||
repo.setExtraHeaders( cfg.getExtraHeaders() ); | |||
repo.setExtraParameters( cfg.getExtraParameters() ); | |||
PasswordCredentials credentials = new PasswordCredentials(); | |||
credentials.setPassword( cfg.getPassword().toCharArray() ); | |||
credentials.setUsername( cfg.getUsername() ); | |||
repo.setCredentials( credentials ); | |||
if (cfg.getPassword()!=null && cfg.getUsername()!=null) | |||
{ | |||
credentials.setPassword( cfg.getPassword( ).toCharArray( ) ); | |||
credentials.setUsername( cfg.getUsername() ); | |||
repo.setCredentials( credentials ); | |||
} else { | |||
credentials.setPassword( new char[0] ); | |||
} | |||
return repo; | |||
} | |||
@@ -161,20 +186,19 @@ public class MavenRepositoryProvider implements RepositoryProvider | |||
{ | |||
if ( StringUtils.isEmpty( indexDir )) { | |||
repo.setIndex( false ); | |||
repo.setIndexPath( null ); | |||
} else | |||
{ | |||
if ( indexDir.startsWith( "file://" ) ) | |||
{ | |||
repo.setIndexPath( new URI( indexDir ) ); | |||
//repo.setIndexPath( new URI( indexDir ) ); | |||
} | |||
else | |||
{ | |||
repo.setIndexPath( new URI( "file://" + indexDir ) ); | |||
//repo.setIndexPath( new URI( "file://" + indexDir ) ); | |||
} | |||
} | |||
} | |||
catch ( URISyntaxException e ) | |||
catch ( Exception e ) | |||
{ | |||
log.error("Could not set index path "+cfg.getIndexDir()); | |||
repo.setIndex(false); |
@@ -0,0 +1,149 @@ | |||
package org.apache.archiva.repository.maven2; | |||
/* | |||
* 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.configuration.ArchivaConfiguration; | |||
import org.apache.archiva.configuration.ManagedRepositoryConfiguration; | |||
import org.apache.archiva.configuration.RemoteRepositoryConfiguration; | |||
import org.apache.archiva.repository.ManagedRepository; | |||
import org.apache.archiva.repository.ReleaseScheme; | |||
import org.apache.archiva.repository.RemoteRepository; | |||
import org.apache.archiva.repository.RepositoryType; | |||
import org.apache.archiva.repository.UnsupportedFeatureException; | |||
import org.apache.archiva.repository.features.ArtifactCleanupFeature; | |||
import org.apache.archiva.repository.features.IndexCreationFeature; | |||
import org.apache.archiva.repository.features.RemoteIndexFeature; | |||
import org.apache.archiva.repository.features.StagingRepositoryFeature; | |||
import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner; | |||
import org.junit.Before; | |||
import org.junit.Test; | |||
import org.junit.runner.RunWith; | |||
import org.springframework.test.context.ContextConfiguration; | |||
import javax.inject.Inject; | |||
import javax.inject.Named; | |||
import java.time.Period; | |||
import static org.junit.Assert.*; | |||
/** | |||
* @author Martin Stockhammer <martin_s@apache.org> | |||
*/ | |||
@RunWith( ArchivaSpringJUnit4ClassRunner.class ) | |||
@ContextConfiguration( { "classpath*:/META-INF/spring-context.xml", "classpath:/spring-context-no-mock-conf.xml" } ) | |||
public class MavenRepositoryProviderTest | |||
{ | |||
@Inject | |||
@Named( "archivaConfiguration#default" ) | |||
ArchivaConfiguration archivaConfiguration; | |||
MavenRepositoryProvider provider; | |||
@Before | |||
public void setUp() | |||
throws Exception | |||
{ | |||
provider = new MavenRepositoryProvider(); | |||
} | |||
@Test | |||
public void provides( ) throws Exception | |||
{ | |||
assertEquals(1, provider.provides().size()); | |||
assertEquals( RepositoryType.MAVEN, provider.provides().iterator().next()); | |||
} | |||
@Test | |||
public void createManagedInstance( ) throws Exception | |||
{ | |||
assertNotNull(archivaConfiguration); | |||
assertNotNull(archivaConfiguration.getConfiguration()); | |||
ManagedRepositoryConfiguration repo = archivaConfiguration.getConfiguration().getManagedRepositories().get(0); | |||
ManagedRepository mr = provider.createManagedInstance( repo ); | |||
assertNotNull(mr.getLocation()); | |||
assertTrue(mr.getLocation().toString().endsWith( "/repositories/internal" )); | |||
assertEquals("Archiva Managed Internal Repository", mr.getName()); | |||
assertEquals(1, mr.getActiveReleaseSchemes().size()); | |||
assertEquals( ReleaseScheme.RELEASE, mr.getActiveReleaseSchemes().iterator().next()); | |||
assertEquals("internal", mr.getId()); | |||
assertTrue(mr.blocksRedeployments()); | |||
assertEquals("0 0 * * * ?", mr.getSchedulingDefinition()); | |||
assertTrue(mr.isScanned()); | |||
ArtifactCleanupFeature artifactCleanupFeature = mr.getFeature( ArtifactCleanupFeature.class ).get(); | |||
assertEquals( Period.ofDays( 30), artifactCleanupFeature.getRetentionTime()); | |||
assertFalse(artifactCleanupFeature.isDeleteReleasedSnapshots()); | |||
assertEquals(2, artifactCleanupFeature.getRetentionCount()); | |||
IndexCreationFeature indexCreationFeature = mr.getFeature( IndexCreationFeature.class ).get(); | |||
assertNotNull(indexCreationFeature.getIndexPath()); | |||
assertTrue(indexCreationFeature.getIndexPath().toString().endsWith("/repositories/internal/.indexer")); | |||
assertTrue(indexCreationFeature.getIndexPath().isAbsolute()); | |||
assertFalse(indexCreationFeature.isSkipPackedIndexCreation()); | |||
StagingRepositoryFeature stagingRepositoryFeature = mr.getFeature( StagingRepositoryFeature.class ).get(); | |||
assertFalse(stagingRepositoryFeature.isStageRepoNeeded()); | |||
assertNull(stagingRepositoryFeature.getStagingRepository()); | |||
} | |||
@Test | |||
public void createRemoteInstance( ) throws Exception | |||
{ | |||
assertNotNull(archivaConfiguration); | |||
assertNotNull(archivaConfiguration.getConfiguration()); | |||
RemoteRepositoryConfiguration repo = archivaConfiguration.getConfiguration().getRemoteRepositories().get(0); | |||
RemoteRepository mr = provider.createRemoteInstance( repo ); | |||
assertNotNull(mr.getLocation()); | |||
assertEquals("https://repo.maven.apache.org/maven2", mr.getLocation().toString()); | |||
assertEquals("Central Repository", mr.getName()); | |||
assertEquals("central", mr.getId()); | |||
assertEquals("0 0 08 ? * SUN", mr.getSchedulingDefinition()); | |||
assertTrue(mr.isScanned()); | |||
assertNull(mr.getLoginCredentials()); | |||
try | |||
{ | |||
ArtifactCleanupFeature artifactCleanupFeature = mr.getFeature( ArtifactCleanupFeature.class ).get( ); | |||
throw new Exception("artifactCleanupFeature should not be available"); | |||
} catch ( UnsupportedFeatureException e ) { | |||
// correct | |||
} | |||
try | |||
{ | |||
IndexCreationFeature indexCreationFeature = mr.getFeature( IndexCreationFeature.class ).get( ); | |||
throw new Exception("indexCreationFeature should not be available"); | |||
} catch (UnsupportedFeatureException e) { | |||
// correct | |||
} | |||
try | |||
{ | |||
StagingRepositoryFeature stagingRepositoryFeature = mr.getFeature( StagingRepositoryFeature.class ).get( ); | |||
throw new Exception("stagingRepositoryFeature should not be available"); | |||
} catch (UnsupportedFeatureException e) { | |||
// correct | |||
} | |||
RemoteIndexFeature remoteIndexFeature = mr.getFeature( RemoteIndexFeature.class ).get(); | |||
assertNull(remoteIndexFeature.getProxyId()); | |||
} | |||
} |