Add "enable file search" flag on global config.

Make the repository file search deactivatable
via the global config. This feature could
overwhelm the server on repositories with
millions of file therefore it now can be turned off.

Committed-by: Rene Pfeuffer <rene.pfeuffer@cloudogu.com>
Co-authored-by: Konstantin Schaper <konstantin.schaper@cloudogu.com>
This commit is contained in:
Eduard Heimbuch
2023-07-06 08:47:51 +02:00
parent 84fbe7ea35
commit c1d7230fbd
25 changed files with 246 additions and 82 deletions

View File

@@ -46,6 +46,7 @@ import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import sonia.scm.NotFoundException;
import sonia.scm.PageResult;
import sonia.scm.admin.ScmConfigurationStore;
import sonia.scm.config.ScmConfiguration;
import sonia.scm.event.ScmEventBus;
import sonia.scm.importexport.ExportFileExtensionResolver;
@@ -146,6 +147,8 @@ public class RepositoryRootResourceTest extends RepositoryTestBase {
@Mock
private RepositoryInitializer repositoryInitializer;
@Mock
private ScmConfigurationStore configurationStore;
@Mock
private ScmConfiguration configuration;
@Mock
private Set<NamespaceStrategy> strategies;
@@ -189,6 +192,7 @@ public class RepositoryRootResourceTest extends RepositoryTestBase {
@Before
public void prepareEnvironment() throws IOException {
when(configurationStore.get()).thenReturn(configuration);
super.repositoryToDtoMapper = repositoryToDtoMapper;
super.dtoToRepositoryMapper = dtoToRepositoryMapper;
super.manager = repositoryManager;

View File

@@ -35,6 +35,7 @@ import org.junit.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import sonia.scm.SCMContextProvider;
import sonia.scm.admin.ScmConfigurationStore;
import sonia.scm.config.ScmConfiguration;
import sonia.scm.repository.CustomNamespaceStrategy;
import sonia.scm.repository.HealthCheckFailure;
@@ -87,6 +88,8 @@ public class RepositoryToRepositoryDtoMapperTest {
@Mock
private ScmPathInfo uriInfo;
@Mock
private ScmConfigurationStore scmConfigurationStore;
@Mock
private ScmConfiguration configuration;
@Mock
private Set<NamespaceStrategy> strategies;
@@ -110,6 +113,7 @@ public class RepositoryToRepositoryDtoMapperTest {
when(configuration.getNamespaceStrategy()).thenReturn("CustomNamespaceStrategy");
when(uriInfo.getApiRestUri()).thenReturn(URI.create("/x/y"));
doReturn(ImmutableSet.of(new CustomNamespaceStrategy()).iterator()).when(strategies).iterator();
when(scmConfigurationStore.get()).thenReturn(configuration);
}
@After
@@ -321,8 +325,16 @@ public class RepositoryToRepositoryDtoMapperTest {
dto.getLinks().getLinkBy("exportInfo").get().getHref());
}
@Test
public void shouldNotCreatePathsLink() {
when(configuration.isEnabledFileSearch()).thenReturn(false);
RepositoryDto dto = mapper.map(createTestRepository());
assertThat(dto.getLinks().getLinkBy("paths")).isNotPresent();
}
@Test
public void shouldCreatePathsLink() {
when(configuration.isEnabledFileSearch()).thenReturn(true);
RepositoryDto dto = mapper.map(createTestRepository());
assertThat(dto.getLinks().getLinkBy("paths"))
.isPresent()

View File

@@ -34,13 +34,16 @@ import org.jboss.resteasy.mock.MockHttpResponse;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Captor;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import sonia.scm.ContextEntry;
import sonia.scm.NotFoundException;
import sonia.scm.PageResult;
import sonia.scm.admin.ScmConfigurationStore;
import sonia.scm.config.ScmConfiguration;
import sonia.scm.group.GroupManager;
import sonia.scm.security.ApiKeyService;
@@ -84,6 +87,7 @@ import static org.mockito.MockitoAnnotations.initMocks;
password = "secret",
configuration = "classpath:sonia/scm/repository/shiro.ini"
)
@ExtendWith(MockitoExtension.class)
public class UserRootResourceTest {
@Rule
@@ -112,6 +116,8 @@ public class UserRootResourceTest {
@Mock
private GroupToGroupDtoMapper groupToGroupDtoMapper;
@Mock
private ScmConfigurationStore scmConfigurationStore;
@Mock
private ScmConfiguration scmConfiguration;
@InjectMocks
private UserDtoToUserMapperImpl dtoToUserMapper;
@@ -135,6 +141,7 @@ public class UserRootResourceTest {
@Before
public void prepareEnvironment() {
initMocks(this);
when(scmConfigurationStore.get()).thenReturn(scmConfiguration);
originalUser = createDummyUser("Neo");
when(userManager.create(userCaptor.capture())).thenAnswer(invocation -> invocation.getArguments()[0]);
when(userManager.isTypeDefault(userCaptor.capture())).thenCallRealMethod();

View File

@@ -33,6 +33,7 @@ import org.junit.Before;
import org.junit.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import sonia.scm.admin.ScmConfigurationStore;
import sonia.scm.config.ScmConfiguration;
import sonia.scm.user.User;
import sonia.scm.user.UserManager;
@@ -57,6 +58,8 @@ public class UserToUserDtoMapperTest {
@Mock
private UserManager userManager;
@Mock
private ScmConfigurationStore scmConfigurationStore;
@Mock
private ScmConfiguration scmConfiguration;
@InjectMocks
@@ -74,6 +77,8 @@ public class UserToUserDtoMapperTest {
expectedBaseUri = baseUri.resolve(UserRootResource.USERS_PATH_V2 + "/");
subjectThreadState.bind();
ThreadContext.bind(subject);
when(scmConfigurationStore.get()).thenReturn(scmConfiguration);
}
@After