In-memory implementations of the store api using JaxB

The new implementations are ment to be used in test
classes replacing the older implementations like
`InMemoryConfigurationStoreFactory`. The benefit
of these new classes is that the serialization using JaxB
is testet implicitly avoiding mistakes made with XML
annotations on the data classes.

Committed-by: Eduard Heimbuch <eduard.heimbuch@cloudogu.com>
Co-authored-by: René Pfeuffer <rene.pfeuffer@cloudogu.com>
This commit is contained in:
Rene Pfeuffer
2023-06-07 10:04:50 +02:00
parent b0eebc7a2e
commit 86b8be9f17
21 changed files with 379 additions and 49 deletions

View File

@@ -34,7 +34,7 @@ import org.junit.rules.ExpectedException;
import sonia.scm.NotFoundException;
import sonia.scm.auditlog.Auditor;
import sonia.scm.plugin.PluginLoader;
import sonia.scm.store.InMemoryConfigurationEntryStoreFactory;
import sonia.scm.store.InMemoryByteConfigurationEntryStoreFactory;
import sonia.scm.util.ClassLoaders;
import java.util.Arrays;
@@ -70,7 +70,7 @@ public class PermissionAssignerTest {
PluginLoader pluginLoader = mock(PluginLoader.class);
when(pluginLoader.getUberClassLoader()).thenReturn(ClassLoaders.getContextClassLoader(DefaultSecuritySystem.class));
securitySystem = new DefaultSecuritySystem(new InMemoryConfigurationEntryStoreFactory(), pluginLoader, Set.of(auditor)) {
securitySystem = new DefaultSecuritySystem(new InMemoryByteConfigurationEntryStoreFactory(), pluginLoader, Set.of(auditor)) {
@Override
public Collection<PermissionDescriptor> getAvailablePermissions() {
return Arrays.stream(new String[]{"perm:read:1", "perm:read:2", "perm:read:3", "perm:read:4"})

View File

@@ -30,7 +30,7 @@ import sonia.scm.migration.RepositoryUpdateContext;
import sonia.scm.migration.RepositoryUpdateStep;
import sonia.scm.migration.UpdateStep;
import sonia.scm.store.ConfigurationEntryStoreFactory;
import sonia.scm.store.InMemoryConfigurationEntryStoreFactory;
import sonia.scm.store.InMemoryByteConfigurationEntryStoreFactory;
import sonia.scm.version.Version;
import java.util.ArrayList;
@@ -50,7 +50,7 @@ import static sonia.scm.version.Version.parse;
class UpdateEngineTest {
ConfigurationEntryStoreFactory storeFactory = new InMemoryConfigurationEntryStoreFactory();
ConfigurationEntryStoreFactory storeFactory = new InMemoryByteConfigurationEntryStoreFactory();
RepositoryUpdateIterator repositoryUpdateIterator = mock(RepositoryUpdateIterator.class, CALLS_REAL_METHODS);
UpdateStepStore updateStepStore = new UpdateStepStore(storeFactory);

View File

@@ -36,7 +36,7 @@ import org.mockito.junit.jupiter.MockitoExtension;
import sonia.scm.group.Group;
import sonia.scm.group.xml.XmlGroupDAO;
import sonia.scm.store.ConfigurationEntryStore;
import sonia.scm.store.InMemoryConfigurationEntryStoreFactory;
import sonia.scm.store.InMemoryByteConfigurationEntryStoreFactory;
import sonia.scm.update.UpdateStepTestUtil;
import sonia.scm.update.V1Properties;
@@ -51,7 +51,7 @@ import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static sonia.scm.store.InMemoryConfigurationEntryStoreFactory.create;
import static sonia.scm.store.InMemoryByteConfigurationEntryStoreFactory.create;
@ExtendWith(MockitoExtension.class)
class XmlGroupV1UpdateStepTest {
@@ -62,7 +62,7 @@ class XmlGroupV1UpdateStepTest {
@Captor
ArgumentCaptor<Group> groupCaptor;
InMemoryConfigurationEntryStoreFactory storeFactory = create();
InMemoryByteConfigurationEntryStoreFactory storeFactory = create();
XmlGroupV1UpdateStep updateStep;
@@ -111,7 +111,7 @@ class XmlGroupV1UpdateStepTest {
@Test
void shouldExtractProperties() throws JAXBException {
updateStep.doUpdate();
ConfigurationEntryStore<V1Properties> propertiesStore = storeFactory.get("group-properties-v1");
ConfigurationEntryStore<V1Properties> propertiesStore = storeFactory.get(V1Properties.class, "group-properties-v1");
V1Properties properties = propertiesStore.get("normals");
assertThat(properties).isNotNull();
assertThat(properties.get("mostly")).isEqualTo("humans");

View File

@@ -40,8 +40,9 @@ import sonia.scm.repository.Repository;
import sonia.scm.repository.RepositoryPermission;
import sonia.scm.repository.xml.XmlRepositoryDAO;
import sonia.scm.store.ConfigurationEntryStore;
import sonia.scm.store.InMemoryConfigurationEntryStoreFactory;
import sonia.scm.store.InMemoryByteConfigurationEntryStoreFactory;
import sonia.scm.update.UpdateStepTestUtil;
import sonia.scm.update.V1Properties;
import javax.xml.bind.JAXBException;
import java.io.IOException;
@@ -72,7 +73,7 @@ class XmlRepositoryV1UpdateStepTest {
@Mock
DefaultMigrationStrategyDAO migrationStrategyDao;
InMemoryConfigurationEntryStoreFactory configurationEntryStoreFactory = new InMemoryConfigurationEntryStoreFactory();
InMemoryByteConfigurationEntryStoreFactory configurationEntryStoreFactory = new InMemoryByteConfigurationEntryStoreFactory();
@Captor
ArgumentCaptor<Repository> storeCaptor;
@@ -172,7 +173,7 @@ class XmlRepositoryV1UpdateStepTest {
void shouldExtractPropertiesFromRepositories() throws JAXBException {
updateStep.doUpdate();
ConfigurationEntryStore store = configurationEntryStoreFactory.get("repository-properties-v1");
ConfigurationEntryStore store = configurationEntryStoreFactory.get(V1Properties.class,"repository-properties-v1");
assertThat(store.getAll())
.hasSize(3);
}

View File

@@ -35,7 +35,7 @@ import org.mockito.junit.jupiter.MockitoExtension;
import sonia.scm.SCMContextProvider;
import sonia.scm.security.AssignedPermission;
import sonia.scm.store.ConfigurationEntryStore;
import sonia.scm.store.InMemoryConfigurationEntryStoreFactory;
import sonia.scm.store.InMemoryByteConfigurationEntryStoreFactory;
import javax.xml.bind.JAXBException;
import java.io.IOException;
@@ -43,12 +43,11 @@ import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.List;
import java.util.Map;
import static java.util.stream.Collectors.toList;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.when;
import static sonia.scm.store.InMemoryConfigurationEntryStoreFactory.create;
import static sonia.scm.store.InMemoryByteConfigurationEntryStoreFactory.create;
@ExtendWith(MockitoExtension.class)
class XmlSecurityV1UpdateStepTest {
@@ -65,8 +64,8 @@ class XmlSecurityV1UpdateStepTest {
@BeforeEach
void mockScmHome() {
when(contextProvider.getBaseDirectory()).thenReturn(tempDir.toFile());
InMemoryConfigurationEntryStoreFactory inMemoryConfigurationEntryStoreFactory = create();
assignedPermissionStore = inMemoryConfigurationEntryStoreFactory.get("security");
InMemoryByteConfigurationEntryStoreFactory inMemoryConfigurationEntryStoreFactory = create();
assignedPermissionStore = inMemoryConfigurationEntryStoreFactory.get(AssignedPermission.class, "security");
updateStep = new XmlSecurityV1UpdateStep(contextProvider, inMemoryConfigurationEntryStoreFactory);
}
@@ -129,8 +128,9 @@ class XmlSecurityV1UpdateStepTest {
.filter(a -> a.getPermission().getValue().contains("repository:"))
.map(AssignedPermission::getName)
.collect(toList());
assertThat(assignedPermission).contains("scmadmin");
assertThat(assignedPermission).contains("test");
assertThat(assignedPermission)
.contains("scmadmin")
.contains("test");
}
@Test

View File

@@ -35,7 +35,7 @@ import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import sonia.scm.security.AssignedPermission;
import sonia.scm.store.ConfigurationEntryStore;
import sonia.scm.store.InMemoryConfigurationEntryStoreFactory;
import sonia.scm.store.InMemoryByteConfigurationEntryStoreFactory;
import sonia.scm.update.UpdateStepTestUtil;
import sonia.scm.update.V1Properties;
import sonia.scm.user.User;
@@ -51,7 +51,7 @@ import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static sonia.scm.store.InMemoryConfigurationEntryStoreFactory.create;
import static sonia.scm.store.InMemoryByteConfigurationEntryStoreFactory.create;
@ExtendWith(MockitoExtension.class)
class XmlUserV1UpdateStepTest {
@@ -62,7 +62,7 @@ class XmlUserV1UpdateStepTest {
@Captor
ArgumentCaptor<User> userCaptor;
InMemoryConfigurationEntryStoreFactory storeFactory = create();
InMemoryByteConfigurationEntryStoreFactory storeFactory = create();
XmlUserV1UpdateStep updateStep;
@@ -91,7 +91,7 @@ class XmlUserV1UpdateStepTest {
void shouldCreateNewPermissionsForV1AdminUser() throws JAXBException {
updateStep.doUpdate();
Optional<AssignedPermission> assignedPermission =
storeFactory.<AssignedPermission>get("security")
storeFactory.<AssignedPermission>get(AssignedPermission.class, "security")
.getAll()
.values()
.stream()
@@ -126,7 +126,7 @@ class XmlUserV1UpdateStepTest {
@Test
void shouldExtractProperties() throws JAXBException {
updateStep.doUpdate();
ConfigurationEntryStore<V1Properties> propertiesStore = storeFactory.<V1Properties>get("user-properties-v1");
ConfigurationEntryStore<V1Properties> propertiesStore = storeFactory.<V1Properties>get(V1Properties.class, "user-properties-v1");
V1Properties properties = propertiesStore.get("dent");
assertThat(properties).isNotNull();
assertThat(properties.get("born.on")).isEqualTo("earth");