POC for spaces strategy

This commit is contained in:
René Pfeuffer
2018-06-29 16:59:35 +02:00
parent d29f9ea2d8
commit 5b5c30f054
8 changed files with 118 additions and 81 deletions

View File

@@ -39,24 +39,22 @@ import com.github.sdorra.ssp.PermissionObject;
import com.github.sdorra.ssp.StaticPermissions; import com.github.sdorra.ssp.StaticPermissions;
import com.google.common.base.Objects; import com.google.common.base.Objects;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import sonia.scm.BasicPropertiesAware; import sonia.scm.BasicPropertiesAware;
import sonia.scm.ModelObject; import sonia.scm.ModelObject;
import sonia.scm.util.HttpUtil; import sonia.scm.util.HttpUtil;
import sonia.scm.util.Util; import sonia.scm.util.Util;
import sonia.scm.util.ValidationUtil; import sonia.scm.util.ValidationUtil;
//~--- JDK imports ------------------------------------------------------------
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper; import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlRootElement;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
//~--- JDK imports ------------------------------------------------------------
/** /**
* Source code repository. * Source code repository.
@@ -443,6 +441,10 @@ public class Repository extends BasicPropertiesAware implements ModelObject, Per
|| ValidationUtil.isMailAddressValid(contact)); || ValidationUtil.isMailAddressValid(contact));
} }
public String getSpace() {
return space;
}
//~--- set methods ---------------------------------------------------------- //~--- set methods ----------------------------------------------------------
/** /**
@@ -570,6 +572,9 @@ public class Repository extends BasicPropertiesAware implements ModelObject, Per
this.healthCheckFailures = healthCheckFailures; this.healthCheckFailures = healthCheckFailures;
} }
public void setSpace(String space) {
this.space = space;
}
//~--- fields --------------------------------------------------------------- //~--- fields ---------------------------------------------------------------
/** Field description */ /** Field description */
@@ -609,4 +614,6 @@ public class Repository extends BasicPropertiesAware implements ModelObject, Per
/** Field description */ /** Field description */
private String type; private String type;
private String space;
} }

View File

@@ -0,0 +1,8 @@
package sonia.scm.repository;
import sonia.scm.plugin.ExtensionPoint;
@ExtensionPoint(multi = true)
public interface SpacesStrategy {
String getCurrentSpace();
}

View File

@@ -0,0 +1,11 @@
package sonia.scm.repository;
import sonia.scm.plugin.Extension;
@Extension
public class StaticSpacesStrategy implements SpacesStrategy {
@Override
public String getCurrentSpace() {
return "test";
}
}

View File

@@ -39,14 +39,10 @@ import com.google.common.base.Throwables;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.google.inject.Injector; import com.google.inject.Injector;
import com.google.inject.Module; import com.google.inject.Module;
import org.apache.shiro.guice.web.ShiroWebModule; import org.apache.shiro.guice.web.ShiroWebModule;
import org.jboss.resteasy.plugins.guice.GuiceResteasyBootstrapServletContextListener;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.jboss.resteasy.plugins.guice.GuiceResteasyBootstrapServletContextListener;
import sonia.scm.api.v2.resources.MapperModule; import sonia.scm.api.v2.resources.MapperModule;
import sonia.scm.cache.CacheManager; import sonia.scm.cache.CacheManager;
import sonia.scm.debug.DebugModule; import sonia.scm.debug.DebugModule;
@@ -61,14 +57,13 @@ import sonia.scm.upgrade.UpgradeManager;
import sonia.scm.user.UserManager; import sonia.scm.user.UserManager;
import sonia.scm.util.IOUtil; import sonia.scm.util.IOUtil;
//~--- JDK imports ------------------------------------------------------------
import java.util.List;
import java.util.Set;
import java.util.Collections;
import javax.servlet.ServletContext; import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextEvent;
import java.util.Collections;
import java.util.List;
import java.util.Set;
//~--- JDK imports ------------------------------------------------------------
/** /**
* *
@@ -140,7 +135,7 @@ public class ScmContextListener extends GuiceResteasyBootstrapServletContextList
moduleList.add(new EagerSingletonModule()); moduleList.add(new EagerSingletonModule());
moduleList.add(ShiroWebModule.guiceFilterModule()); moduleList.add(ShiroWebModule.guiceFilterModule());
moduleList.add(new WebElementModule(pluginLoader)); moduleList.add(new WebElementModule(pluginLoader));
moduleList.add(new ScmServletModule(context, pluginLoader, overrides)); moduleList.add(new ScmServletModule(context, pluginLoader, overrides, pluginLoader.getExtensionProcessor()));
moduleList.add( moduleList.add(
new ScmSecurityModule(context, pluginLoader.getExtensionProcessor()) new ScmSecurityModule(context, pluginLoader.getExtensionProcessor())
); );

View File

@@ -42,10 +42,8 @@ import com.google.inject.name.Names;
import com.google.inject.servlet.RequestScoped; import com.google.inject.servlet.RequestScoped;
import com.google.inject.servlet.ServletModule; import com.google.inject.servlet.ServletModule;
import com.google.inject.throwingproviders.ThrowingProviderBinder; import com.google.inject.throwingproviders.ThrowingProviderBinder;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import sonia.scm.api.rest.ObjectMapperProvider; import sonia.scm.api.rest.ObjectMapperProvider;
import sonia.scm.cache.CacheManager; import sonia.scm.cache.CacheManager;
import sonia.scm.cache.GuavaCacheManager; import sonia.scm.cache.GuavaCacheManager;
@@ -58,8 +56,15 @@ import sonia.scm.group.GroupManagerProvider;
import sonia.scm.group.xml.XmlGroupDAO; import sonia.scm.group.xml.XmlGroupDAO;
import sonia.scm.io.DefaultFileSystem; import sonia.scm.io.DefaultFileSystem;
import sonia.scm.io.FileSystem; import sonia.scm.io.FileSystem;
import sonia.scm.net.SSLContextProvider;
import sonia.scm.net.ahc.AdvancedHttpClient;
import sonia.scm.net.ahc.ContentTransformer;
import sonia.scm.net.ahc.DefaultAdvancedHttpClient;
import sonia.scm.net.ahc.JsonContentTransformer;
import sonia.scm.net.ahc.XmlContentTransformer;
import sonia.scm.plugin.DefaultPluginLoader; import sonia.scm.plugin.DefaultPluginLoader;
import sonia.scm.plugin.DefaultPluginManager; import sonia.scm.plugin.DefaultPluginManager;
import sonia.scm.plugin.ExtensionProcessor;
import sonia.scm.plugin.PluginLoader; import sonia.scm.plugin.PluginLoader;
import sonia.scm.plugin.PluginManager; import sonia.scm.plugin.PluginManager;
import sonia.scm.repository.DefaultRepositoryManager; import sonia.scm.repository.DefaultRepositoryManager;
@@ -70,6 +75,7 @@ import sonia.scm.repository.RepositoryDAO;
import sonia.scm.repository.RepositoryManager; import sonia.scm.repository.RepositoryManager;
import sonia.scm.repository.RepositoryManagerProvider; import sonia.scm.repository.RepositoryManagerProvider;
import sonia.scm.repository.RepositoryProvider; import sonia.scm.repository.RepositoryProvider;
import sonia.scm.repository.SpacesStrategy;
import sonia.scm.repository.api.HookContextFactory; import sonia.scm.repository.api.HookContextFactory;
import sonia.scm.repository.api.RepositoryServiceFactory; import sonia.scm.repository.api.RepositoryServiceFactory;
import sonia.scm.repository.spi.HookEventFacade; import sonia.scm.repository.spi.HookEventFacade;
@@ -78,19 +84,25 @@ import sonia.scm.resources.DefaultResourceManager;
import sonia.scm.resources.DevelopmentResourceManager; import sonia.scm.resources.DevelopmentResourceManager;
import sonia.scm.resources.ResourceManager; import sonia.scm.resources.ResourceManager;
import sonia.scm.resources.ScriptResourceServlet; import sonia.scm.resources.ScriptResourceServlet;
import sonia.scm.schedule.QuartzScheduler;
import sonia.scm.schedule.Scheduler;
import sonia.scm.security.AuthorizationChangedEventProducer;
import sonia.scm.security.CipherHandler; import sonia.scm.security.CipherHandler;
import sonia.scm.security.CipherUtil; import sonia.scm.security.CipherUtil;
import sonia.scm.security.ConfigurableLoginAttemptHandler;
import sonia.scm.security.DefaultKeyGenerator; import sonia.scm.security.DefaultKeyGenerator;
import sonia.scm.security.DefaultSecuritySystem; import sonia.scm.security.DefaultSecuritySystem;
import sonia.scm.security.KeyGenerator; import sonia.scm.security.KeyGenerator;
import sonia.scm.security.LoginAttemptHandler;
import sonia.scm.security.SecuritySystem; import sonia.scm.security.SecuritySystem;
import sonia.scm.store.BlobStoreFactory; import sonia.scm.store.BlobStoreFactory;
import sonia.scm.store.ConfigurationEntryStoreFactory; import sonia.scm.store.ConfigurationEntryStoreFactory;
import sonia.scm.store.ConfigurationStoreFactory;
import sonia.scm.store.DataStoreFactory; import sonia.scm.store.DataStoreFactory;
import sonia.scm.store.FileBlobStoreFactory; import sonia.scm.store.FileBlobStoreFactory;
import sonia.scm.store.JAXBConfigurationEntryStoreFactory; import sonia.scm.store.JAXBConfigurationEntryStoreFactory;
import sonia.scm.store.JAXBDataStoreFactory;
import sonia.scm.store.JAXBConfigurationStoreFactory; import sonia.scm.store.JAXBConfigurationStoreFactory;
import sonia.scm.store.JAXBDataStoreFactory;
import sonia.scm.template.MustacheTemplateEngine; import sonia.scm.template.MustacheTemplateEngine;
import sonia.scm.template.TemplateEngine; import sonia.scm.template.TemplateEngine;
import sonia.scm.template.TemplateEngineFactory; import sonia.scm.template.TemplateEngineFactory;
@@ -107,31 +119,17 @@ import sonia.scm.user.UserManagerProvider;
import sonia.scm.user.xml.XmlUserDAO; import sonia.scm.user.xml.XmlUserDAO;
import sonia.scm.util.DebugServlet; import sonia.scm.util.DebugServlet;
import sonia.scm.util.ScmConfigurationUtil; import sonia.scm.util.ScmConfigurationUtil;
import sonia.scm.web.UserAgentParser;
import sonia.scm.web.cgi.CGIExecutorFactory; import sonia.scm.web.cgi.CGIExecutorFactory;
import sonia.scm.web.cgi.DefaultCGIExecutorFactory; import sonia.scm.web.cgi.DefaultCGIExecutorFactory;
import sonia.scm.web.filter.LoggingFilter; import sonia.scm.web.filter.LoggingFilter;
import sonia.scm.web.security.AdministrationContext; import sonia.scm.web.security.AdministrationContext;
import sonia.scm.web.security.DefaultAdministrationContext; import sonia.scm.web.security.DefaultAdministrationContext;
//~--- JDK imports ------------------------------------------------------------
import javax.servlet.ServletContext;
import sonia.scm.store.ConfigurationStoreFactory;
import javax.net.ssl.SSLContext; import javax.net.ssl.SSLContext;
import sonia.scm.net.SSLContextProvider; import javax.servlet.ServletContext;
import sonia.scm.net.ahc.AdvancedHttpClient;
import sonia.scm.net.ahc.ContentTransformer; //~--- JDK imports ------------------------------------------------------------
import sonia.scm.net.ahc.DefaultAdvancedHttpClient;
import sonia.scm.net.ahc.JsonContentTransformer;
import sonia.scm.net.ahc.XmlContentTransformer;
import sonia.scm.schedule.QuartzScheduler;
import sonia.scm.schedule.Scheduler;
import sonia.scm.security.ConfigurableLoginAttemptHandler;
import sonia.scm.security.LoginAttemptHandler;
import sonia.scm.security.AuthorizationChangedEventProducer;
import sonia.scm.web.UserAgentParser;
/** /**
* *
@@ -202,17 +200,18 @@ public class ScmServletModule extends ServletModule
* Constructs ... * Constructs ...
* *
* *
*
* @param servletContext * @param servletContext
* @param pluginLoader * @param pluginLoader
* @param overrides * @param overrides
* @param extensionProcessor
*/ */
ScmServletModule(ServletContext servletContext, ScmServletModule(ServletContext servletContext,
DefaultPluginLoader pluginLoader, ClassOverrides overrides) DefaultPluginLoader pluginLoader, ClassOverrides overrides, ExtensionProcessor extensionProcessor)
{ {
this.servletContext = servletContext; this.servletContext = servletContext;
this.pluginLoader = pluginLoader; this.pluginLoader = pluginLoader;
this.overrides = overrides; this.overrides = overrides;
this.extensionProcessor = extensionProcessor;
} }
//~--- methods -------------------------------------------------------------- //~--- methods --------------------------------------------------------------
@@ -284,6 +283,9 @@ public class ScmServletModule extends ServletModule
bind(UserDAO.class, XmlUserDAO.class); bind(UserDAO.class, XmlUserDAO.class);
bind(RepositoryDAO.class, XmlRepositoryDAO.class); bind(RepositoryDAO.class, XmlRepositoryDAO.class);
Class<? extends SpacesStrategy> mySpaceStrategy = extensionProcessor.byExtensionPoint(SpacesStrategy.class).iterator().next();
bind(SpacesStrategy.class, mySpaceStrategy);
bindDecorated(RepositoryManager.class, DefaultRepositoryManager.class, bindDecorated(RepositoryManager.class, DefaultRepositoryManager.class,
RepositoryManagerProvider.class); RepositoryManagerProvider.class);
bindDecorated(UserManager.class, DefaultUserManager.class, bindDecorated(UserManager.class, DefaultUserManager.class,
@@ -476,4 +478,6 @@ public class ScmServletModule extends ServletModule
/** Field description */ /** Field description */
private final ServletContext servletContext; private final ServletContext servletContext;
private final ExtensionProcessor extensionProcessor;
} }

View File

@@ -41,12 +41,9 @@ import com.google.common.collect.Lists;
import com.google.common.util.concurrent.ThreadFactoryBuilder; import com.google.common.util.concurrent.ThreadFactoryBuilder;
import com.google.inject.Inject; import com.google.inject.Inject;
import com.google.inject.Singleton; import com.google.inject.Singleton;
import org.apache.shiro.concurrent.SubjectAwareExecutorService; import org.apache.shiro.concurrent.SubjectAwareExecutorService;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import sonia.scm.ArgumentIsInvalidException; import sonia.scm.ArgumentIsInvalidException;
import sonia.scm.ConfigurationException; import sonia.scm.ConfigurationException;
import sonia.scm.HandlerEventType; import sonia.scm.HandlerEventType;
@@ -60,10 +57,8 @@ import sonia.scm.util.HttpUtil;
import sonia.scm.util.IOUtil; import sonia.scm.util.IOUtil;
import sonia.scm.util.Util; import sonia.scm.util.Util;
//~--- JDK imports ------------------------------------------------------------ import javax.servlet.http.HttpServletRequest;
import java.io.IOException; import java.io.IOException;
import java.util.Collection; import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.Comparator; import java.util.Comparator;
@@ -76,7 +71,7 @@ import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors; import java.util.concurrent.Executors;
import java.util.concurrent.ThreadFactory; import java.util.concurrent.ThreadFactory;
import javax.servlet.http.HttpServletRequest; //~--- JDK imports ------------------------------------------------------------
/** /**
* Default implementation of {@link RepositoryManager}. * Default implementation of {@link RepositoryManager}.
@@ -105,17 +100,19 @@ public class DefaultRepositoryManager extends AbstractRepositoryManager
* @param repositoryDAO * @param repositoryDAO
* @param handlerSet * @param handlerSet
* @param repositoryMatcher * @param repositoryMatcher
* @param spaceStrategy
*/ */
@Inject @Inject
public DefaultRepositoryManager(ScmConfiguration configuration, public DefaultRepositoryManager(ScmConfiguration configuration,
SCMContextProvider contextProvider, KeyGenerator keyGenerator, SCMContextProvider contextProvider, KeyGenerator keyGenerator,
RepositoryDAO repositoryDAO, Set<RepositoryHandler> handlerSet, RepositoryDAO repositoryDAO, Set<RepositoryHandler> handlerSet,
RepositoryMatcher repositoryMatcher) RepositoryMatcher repositoryMatcher, SpacesStrategy spaceStrategy)
{ {
this.configuration = configuration; this.configuration = configuration;
this.keyGenerator = keyGenerator; this.keyGenerator = keyGenerator;
this.repositoryDAO = repositoryDAO; this.repositoryDAO = repositoryDAO;
this.repositoryMatcher = repositoryMatcher; this.repositoryMatcher = repositoryMatcher;
this.spaceStrategy = spaceStrategy;
//J- //J-
ThreadFactory factory = new ThreadFactoryBuilder() ThreadFactory factory = new ThreadFactoryBuilder()
@@ -169,6 +166,8 @@ public class DefaultRepositoryManager extends AbstractRepositoryManager
logger.info("create repository {} of type {}", repository.getName(), logger.info("create repository {} of type {}", repository.getName(),
repository.getType()); repository.getType());
repository.setSpace(spaceStrategy.getCurrentSpace());
RepositoryPermissions.create().check(); RepositoryPermissions.create().check();
AssertUtil.assertIsValid(repository); AssertUtil.assertIsValid(repository);
@@ -740,4 +739,6 @@ public class DefaultRepositoryManager extends AbstractRepositoryManager
/** Field description */ /** Field description */
private RepositoryMatcher repositoryMatcher; private RepositoryMatcher repositoryMatcher;
private final SpacesStrategy spaceStrategy;
} }

View File

@@ -33,13 +33,6 @@ package sonia.scm.repository;
import com.google.common.base.Stopwatch; import com.google.common.base.Stopwatch;
import com.google.common.collect.ImmutableSet; import com.google.common.collect.ImmutableSet;
import com.google.inject.Provider; import com.google.inject.Provider;
import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import org.apache.shiro.SecurityUtils; import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.AuthenticationException; import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.AuthenticationInfo; import org.apache.shiro.authc.AuthenticationInfo;
@@ -58,7 +51,6 @@ import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.mockito.Mock; import org.mockito.Mock;
import static org.mockito.Mockito.*;
import org.mockito.runners.MockitoJUnitRunner; import org.mockito.runners.MockitoJUnitRunner;
import sonia.scm.SCMContextProvider; import sonia.scm.SCMContextProvider;
import sonia.scm.Type; import sonia.scm.Type;
@@ -67,9 +59,19 @@ import sonia.scm.config.ScmConfiguration;
import sonia.scm.security.AuthorizationCollector; import sonia.scm.security.AuthorizationCollector;
import sonia.scm.security.DefaultKeyGenerator; import sonia.scm.security.DefaultKeyGenerator;
import sonia.scm.security.KeyGenerator; import sonia.scm.security.KeyGenerator;
import sonia.scm.security.SecuritySystem;
import sonia.scm.user.UserTestData; import sonia.scm.user.UserTestData;
import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
/** /**
* Performance test for {@link RepositoryManager#getAll()}. * Performance test for {@link RepositoryManager#getAll()}.
* *
@@ -117,8 +119,8 @@ public class DefaultRepositoryManagerPerfTest {
keyGenerator, keyGenerator,
repositoryDAO, repositoryDAO,
handlerSet, handlerSet,
repositoryMatcher repositoryMatcher,
); mock(SpacesStrategy.class));
setUpTestRepositories(); setUpTestRepositories();

View File

@@ -31,45 +31,54 @@
package sonia.scm.repository; package sonia.scm.repository;
//~--- non-JDK imports -------------------------------------------------------- //~--- non-JDK imports --------------------------------------------------------
import com.github.legman.Subscribe; import com.github.legman.Subscribe;
import com.github.sdorra.shiro.ShiroRule; import com.github.sdorra.shiro.ShiroRule;
import com.github.sdorra.shiro.SubjectAware; import com.github.sdorra.shiro.SubjectAware;
import com.google.common.collect.ImmutableSet; import com.google.common.collect.ImmutableSet;
import org.apache.shiro.authz.UnauthorizedException;
import org.junit.Rule;
import org.junit.Test; import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.mockito.invocation.InvocationOnMock;
import sonia.scm.HandlerEventType;
import sonia.scm.Manager;
import sonia.scm.ManagerTestBase;
import sonia.scm.Type; import sonia.scm.Type;
import sonia.scm.config.ScmConfiguration; import sonia.scm.config.ScmConfiguration;
import sonia.scm.event.ScmEventBus;
import sonia.scm.repository.api.HookContext; import sonia.scm.repository.api.HookContext;
import sonia.scm.repository.api.HookContextFactory; import sonia.scm.repository.api.HookContextFactory;
import sonia.scm.repository.api.HookFeature; import sonia.scm.repository.api.HookFeature;
import sonia.scm.repository.spi.HookContextProvider; import sonia.scm.repository.spi.HookContextProvider;
import sonia.scm.repository.xml.XmlRepositoryDAO; import sonia.scm.repository.xml.XmlRepositoryDAO;
import sonia.scm.security.DefaultKeyGenerator; import sonia.scm.security.DefaultKeyGenerator;
import sonia.scm.security.KeyGenerator;
import sonia.scm.store.ConfigurationStoreFactory;
import sonia.scm.store.JAXBConfigurationStoreFactory; import sonia.scm.store.JAXBConfigurationStoreFactory;
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
import static org.hamcrest.Matchers.*;
//~--- JDK imports ------------------------------------------------------------
import java.io.IOException; import java.io.IOException;
import java.util.Collection; import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.HashSet; import java.util.HashSet;
import java.util.Set; import java.util.Set;
import java.util.Stack; import java.util.Stack;
import org.apache.shiro.authz.UnauthorizedException;
import org.junit.Rule; import static org.hamcrest.Matchers.containsInAnyOrder;
import org.junit.rules.ExpectedException; import static org.hamcrest.Matchers.hasProperty;
import org.mockito.invocation.InvocationOnMock; import static org.hamcrest.Matchers.is;
import sonia.scm.HandlerEventType; import static org.junit.Assert.assertEquals;
import sonia.scm.Manager; import static org.junit.Assert.assertFalse;
import sonia.scm.ManagerTestBase; import static org.junit.Assert.assertNotNull;
import sonia.scm.event.ScmEventBus; import static org.junit.Assert.assertNotSame;
import sonia.scm.security.KeyGenerator; import static org.junit.Assert.assertNull;
import sonia.scm.store.ConfigurationStoreFactory; import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
//~--- JDK imports ------------------------------------------------------------
/** /**
* Unit tests for {@link DefaultRepositoryManager}. * Unit tests for {@link DefaultRepositoryManager}.
@@ -542,7 +551,7 @@ public class DefaultRepositoryManagerTest extends ManagerTestBase<Repository, Re
configuration.setEnableRepositoryArchive(archiveEnabled); configuration.setEnableRepositoryArchive(archiveEnabled);
return new DefaultRepositoryManager(configuration, contextProvider, return new DefaultRepositoryManager(configuration, contextProvider,
keyGenerator, repositoryDAO, handlerSet, createRepositoryMatcher()); keyGenerator, repositoryDAO, handlerSet, createRepositoryMatcher(), mock(SpacesStrategy.class));
} }
private void createRepository(RepositoryManager m, Repository repository) private void createRepository(RepositoryManager m, Repository repository)