mirror of
https://github.com/scm-manager/scm-manager.git
synced 2025-11-15 09:46:16 +01:00
Extract common code
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
package sonia.scm.group.update;
|
package sonia.scm.update.group;
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
@@ -11,6 +11,7 @@ import sonia.scm.plugin.Extension;
|
|||||||
import sonia.scm.store.ConfigurationEntryStore;
|
import sonia.scm.store.ConfigurationEntryStore;
|
||||||
import sonia.scm.store.ConfigurationEntryStoreFactory;
|
import sonia.scm.store.ConfigurationEntryStoreFactory;
|
||||||
import sonia.scm.store.StoreConstants;
|
import sonia.scm.store.StoreConstants;
|
||||||
|
import sonia.scm.update.properties.V1Properties;
|
||||||
import sonia.scm.version.Version;
|
import sonia.scm.version.Version;
|
||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
@@ -25,7 +26,6 @@ import java.io.IOException;
|
|||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
import static java.util.Optional.empty;
|
import static java.util.Optional.empty;
|
||||||
@@ -140,19 +140,6 @@ public class XmlGroupV1UpdateStep implements UpdateStep {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@XmlAccessorType(XmlAccessType.FIELD)
|
|
||||||
private static class V1Property {
|
|
||||||
private String key;
|
|
||||||
private String value;
|
|
||||||
}
|
|
||||||
|
|
||||||
@XmlAccessorType(XmlAccessType.FIELD)
|
|
||||||
@XmlRootElement(name = "properties")
|
|
||||||
private static class V1Properties {
|
|
||||||
@XmlElement(name = "item")
|
|
||||||
private List<V1Property> properties;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static class GroupList {
|
private static class GroupList {
|
||||||
@XmlElement(name = "group")
|
@XmlElement(name = "group")
|
||||||
private List<V1Group> groups;
|
private List<V1Group> groups;
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
package sonia.scm.update.properties;
|
||||||
|
|
||||||
|
import javax.xml.bind.annotation.XmlAccessType;
|
||||||
|
import javax.xml.bind.annotation.XmlAccessorType;
|
||||||
|
import javax.xml.bind.annotation.XmlElement;
|
||||||
|
import javax.xml.bind.annotation.XmlRootElement;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@XmlAccessorType(XmlAccessType.FIELD)
|
||||||
|
@XmlRootElement(name = "properties")
|
||||||
|
public class V1Properties {
|
||||||
|
@XmlElement(name = "item")
|
||||||
|
private List<V1Property> properties;
|
||||||
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
package sonia.scm.update.properties;
|
||||||
|
|
||||||
|
import javax.xml.bind.annotation.XmlAccessType;
|
||||||
|
import javax.xml.bind.annotation.XmlAccessorType;
|
||||||
|
|
||||||
|
@XmlAccessorType(XmlAccessType.FIELD)
|
||||||
|
public class V1Property {
|
||||||
|
private String key;
|
||||||
|
private String value;
|
||||||
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package sonia.scm.repository.update;
|
package sonia.scm.update.repository;
|
||||||
|
|
||||||
import sonia.scm.SCMContextProvider;
|
import sonia.scm.SCMContextProvider;
|
||||||
import sonia.scm.migration.UpdateException;
|
import sonia.scm.migration.UpdateException;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package sonia.scm.repository.update;
|
package sonia.scm.update.repository;
|
||||||
|
|
||||||
import sonia.scm.SCMContextProvider;
|
import sonia.scm.SCMContextProvider;
|
||||||
import sonia.scm.repository.RepositoryDirectoryHandler;
|
import sonia.scm.repository.RepositoryDirectoryHandler;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package sonia.scm.repository.update;
|
package sonia.scm.update.repository;
|
||||||
|
|
||||||
import sonia.scm.SCMContextProvider;
|
import sonia.scm.SCMContextProvider;
|
||||||
import sonia.scm.repository.RepositoryDirectoryHandler;
|
import sonia.scm.repository.RepositoryDirectoryHandler;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package sonia.scm.repository.update;
|
package sonia.scm.update.repository;
|
||||||
|
|
||||||
import com.google.inject.Injector;
|
import com.google.inject.Injector;
|
||||||
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package sonia.scm.repository.update;
|
package sonia.scm.update.repository;
|
||||||
|
|
||||||
import sonia.scm.store.ConfigurationStore;
|
import sonia.scm.store.ConfigurationStore;
|
||||||
import sonia.scm.store.ConfigurationStoreFactory;
|
import sonia.scm.store.ConfigurationStoreFactory;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package sonia.scm.repository.update;
|
package sonia.scm.update.repository;
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package sonia.scm.repository.update;
|
package sonia.scm.update.repository;
|
||||||
|
|
||||||
import javax.xml.bind.annotation.XmlAccessType;
|
import javax.xml.bind.annotation.XmlAccessType;
|
||||||
import javax.xml.bind.annotation.XmlAccessorType;
|
import javax.xml.bind.annotation.XmlAccessorType;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package sonia.scm.repository.update;
|
package sonia.scm.update.repository;
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package sonia.scm.repository.update;
|
package sonia.scm.update.repository;
|
||||||
|
|
||||||
import com.google.inject.Injector;
|
import com.google.inject.Injector;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
@@ -13,6 +13,7 @@ import sonia.scm.repository.xml.XmlRepositoryDAO;
|
|||||||
import sonia.scm.store.ConfigurationEntryStore;
|
import sonia.scm.store.ConfigurationEntryStore;
|
||||||
import sonia.scm.store.ConfigurationEntryStoreFactory;
|
import sonia.scm.store.ConfigurationEntryStoreFactory;
|
||||||
import sonia.scm.store.StoreConstants;
|
import sonia.scm.store.StoreConstants;
|
||||||
|
import sonia.scm.update.properties.V1Properties;
|
||||||
import sonia.scm.version.Version;
|
import sonia.scm.version.Version;
|
||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
@@ -199,19 +200,6 @@ public class XmlRepositoryV1UpdateStep implements UpdateStep {
|
|||||||
private String type;
|
private String type;
|
||||||
}
|
}
|
||||||
|
|
||||||
@XmlAccessorType(XmlAccessType.FIELD)
|
|
||||||
private static class V1Property {
|
|
||||||
private String key;
|
|
||||||
private String value;
|
|
||||||
}
|
|
||||||
|
|
||||||
@XmlAccessorType(XmlAccessType.FIELD)
|
|
||||||
@XmlRootElement(name = "properties")
|
|
||||||
private static class V1Properties {
|
|
||||||
@XmlElement(name = "item")
|
|
||||||
private List<V1Property> properties;
|
|
||||||
}
|
|
||||||
|
|
||||||
@XmlAccessorType(XmlAccessType.FIELD)
|
@XmlAccessorType(XmlAccessType.FIELD)
|
||||||
@XmlRootElement(name = "repositories")
|
@XmlRootElement(name = "repositories")
|
||||||
private static class V1Repository {
|
private static class V1Repository {
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package sonia.scm.security.update;
|
package sonia.scm.update.security;
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package sonia.scm.user.update;
|
package sonia.scm.update.user;
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
@@ -10,6 +10,7 @@ import sonia.scm.security.AssignedPermission;
|
|||||||
import sonia.scm.store.ConfigurationEntryStore;
|
import sonia.scm.store.ConfigurationEntryStore;
|
||||||
import sonia.scm.store.ConfigurationEntryStoreFactory;
|
import sonia.scm.store.ConfigurationEntryStoreFactory;
|
||||||
import sonia.scm.store.StoreConstants;
|
import sonia.scm.store.StoreConstants;
|
||||||
|
import sonia.scm.update.properties.V1Properties;
|
||||||
import sonia.scm.user.User;
|
import sonia.scm.user.User;
|
||||||
import sonia.scm.user.xml.XmlUserDAO;
|
import sonia.scm.user.xml.XmlUserDAO;
|
||||||
import sonia.scm.version.Version;
|
import sonia.scm.version.Version;
|
||||||
@@ -125,19 +126,6 @@ public class XmlUserV1UpdateStep implements UpdateStep {
|
|||||||
return new File(contextProvider.getBaseDirectory(), StoreConstants.CONFIG_DIRECTORY_NAME).toPath();
|
return new File(contextProvider.getBaseDirectory(), StoreConstants.CONFIG_DIRECTORY_NAME).toPath();
|
||||||
}
|
}
|
||||||
|
|
||||||
@XmlAccessorType(XmlAccessType.FIELD)
|
|
||||||
private static class V1Property {
|
|
||||||
private String key;
|
|
||||||
private String value;
|
|
||||||
}
|
|
||||||
|
|
||||||
@XmlAccessorType(XmlAccessType.FIELD)
|
|
||||||
@XmlRootElement(name = "properties")
|
|
||||||
private static class V1Properties {
|
|
||||||
@XmlElement(name = "item")
|
|
||||||
private List<V1Property> properties;
|
|
||||||
}
|
|
||||||
|
|
||||||
@XmlAccessorType(XmlAccessType.FIELD)
|
@XmlAccessorType(XmlAccessType.FIELD)
|
||||||
@XmlRootElement(name = "user")
|
@XmlRootElement(name = "user")
|
||||||
private static class V1User {
|
private static class V1User {
|
||||||
@@ -0,0 +1,63 @@
|
|||||||
|
package sonia.scm.update;
|
||||||
|
|
||||||
|
import com.google.common.io.Resources;
|
||||||
|
import org.mockito.Mockito;
|
||||||
|
import sonia.scm.SCMContextProvider;
|
||||||
|
import sonia.scm.security.AssignedPermission;
|
||||||
|
import sonia.scm.security.DefaultKeyGenerator;
|
||||||
|
import sonia.scm.store.ConfigurationEntryStore;
|
||||||
|
import sonia.scm.store.ConfigurationEntryStoreFactory;
|
||||||
|
import sonia.scm.store.JAXBConfigurationEntryStoreFactory;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.nio.file.Path;
|
||||||
|
import java.nio.file.Paths;
|
||||||
|
|
||||||
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
|
public class UpdateStepTestUtil {
|
||||||
|
|
||||||
|
private final SCMContextProvider contextProvider;
|
||||||
|
|
||||||
|
private final Path tempDir;
|
||||||
|
private final ConfigurationEntryStoreFactory storeFactory;
|
||||||
|
|
||||||
|
public UpdateStepTestUtil(Path tempDir) {
|
||||||
|
this.tempDir = tempDir;
|
||||||
|
contextProvider = Mockito.mock(SCMContextProvider.class);
|
||||||
|
storeFactory = new JAXBConfigurationEntryStoreFactory(contextProvider, null, new DefaultKeyGenerator());
|
||||||
|
when(contextProvider.getBaseDirectory()).thenReturn(tempDir.toFile());
|
||||||
|
}
|
||||||
|
|
||||||
|
public SCMContextProvider getContextProvider() {
|
||||||
|
return contextProvider;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ConfigurationEntryStoreFactory getStoreFactory() {
|
||||||
|
return storeFactory;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void copyConfigFile(String fileName) throws IOException {
|
||||||
|
Path configDir = tempDir.resolve("config");
|
||||||
|
Files.createDirectories(configDir);
|
||||||
|
copyTestDatabaseFile(configDir, fileName);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ConfigurationEntryStore<AssignedPermission> getStoreForConfigFile(String name) {
|
||||||
|
return storeFactory
|
||||||
|
.withType(AssignedPermission.class)
|
||||||
|
.withName(name)
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
public Path getFile(String name) {
|
||||||
|
return tempDir.resolve("config").resolve(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void copyTestDatabaseFile(Path configDir, String fileName) throws IOException {
|
||||||
|
URL url = Resources.getResource(fileName);
|
||||||
|
Files.copy(url.openStream(), configDir.resolve(Paths.get(fileName).getFileName()));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,6 +1,5 @@
|
|||||||
package sonia.scm.group.update;
|
package sonia.scm.update.group;
|
||||||
|
|
||||||
import com.google.common.io.Resources;
|
|
||||||
import org.junit.jupiter.api.BeforeEach;
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
import org.junit.jupiter.api.Nested;
|
import org.junit.jupiter.api.Nested;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
@@ -10,17 +9,12 @@ import org.mockito.ArgumentCaptor;
|
|||||||
import org.mockito.Captor;
|
import org.mockito.Captor;
|
||||||
import org.mockito.Mock;
|
import org.mockito.Mock;
|
||||||
import org.mockito.junit.jupiter.MockitoExtension;
|
import org.mockito.junit.jupiter.MockitoExtension;
|
||||||
import sonia.scm.SCMContextProvider;
|
|
||||||
import sonia.scm.group.Group;
|
import sonia.scm.group.Group;
|
||||||
import sonia.scm.group.xml.XmlGroupDAO;
|
import sonia.scm.group.xml.XmlGroupDAO;
|
||||||
import sonia.scm.security.DefaultKeyGenerator;
|
import sonia.scm.update.UpdateStepTestUtil;
|
||||||
import sonia.scm.store.ConfigurationEntryStoreFactory;
|
|
||||||
import sonia.scm.store.JAXBConfigurationEntryStoreFactory;
|
|
||||||
|
|
||||||
import javax.xml.bind.JAXBException;
|
import javax.xml.bind.JAXBException;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.net.URL;
|
|
||||||
import java.nio.file.Files;
|
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
@@ -31,14 +25,11 @@ import static org.mockito.ArgumentMatchers.any;
|
|||||||
import static org.mockito.Mockito.doNothing;
|
import static org.mockito.Mockito.doNothing;
|
||||||
import static org.mockito.Mockito.times;
|
import static org.mockito.Mockito.times;
|
||||||
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.verify;
|
||||||
import static org.mockito.Mockito.when;
|
|
||||||
|
|
||||||
@ExtendWith(MockitoExtension.class)
|
@ExtendWith(MockitoExtension.class)
|
||||||
@ExtendWith(TempDirectory.class)
|
@ExtendWith(TempDirectory.class)
|
||||||
class XmlGroupV1UpdateStepTest {
|
class XmlGroupV1UpdateStepTest {
|
||||||
|
|
||||||
@Mock
|
|
||||||
SCMContextProvider contextProvider;
|
|
||||||
@Mock
|
@Mock
|
||||||
XmlGroupDAO groupDAO;
|
XmlGroupDAO groupDAO;
|
||||||
|
|
||||||
@@ -47,13 +38,13 @@ class XmlGroupV1UpdateStepTest {
|
|||||||
|
|
||||||
XmlGroupV1UpdateStep updateStep;
|
XmlGroupV1UpdateStep updateStep;
|
||||||
|
|
||||||
ConfigurationEntryStoreFactory storeFactory;
|
private UpdateStepTestUtil testUtil;
|
||||||
|
|
||||||
|
|
||||||
@BeforeEach
|
@BeforeEach
|
||||||
void mockScmHome(@TempDirectory.TempDir Path tempDir) {
|
void mockScmHome(@TempDirectory.TempDir Path tempDir) {
|
||||||
when(contextProvider.getBaseDirectory()).thenReturn(tempDir.toFile());
|
testUtil = new UpdateStepTestUtil(tempDir);
|
||||||
storeFactory = new JAXBConfigurationEntryStoreFactory(contextProvider, null, new DefaultKeyGenerator());
|
updateStep = new XmlGroupV1UpdateStep(testUtil.getContextProvider(), groupDAO, testUtil.getStoreFactory());
|
||||||
updateStep = new XmlGroupV1UpdateStep(contextProvider, groupDAO, storeFactory);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nested
|
@Nested
|
||||||
@@ -65,10 +56,8 @@ class XmlGroupV1UpdateStepTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@BeforeEach
|
@BeforeEach
|
||||||
void createGroupV1XML(@TempDirectory.TempDir Path tempDir) throws IOException {
|
void createGroupV1XML() throws IOException {
|
||||||
Path configDir = tempDir.resolve("config");
|
testUtil.copyConfigFile("sonia/scm/update/group/groups.xml");
|
||||||
Files.createDirectories(configDir);
|
|
||||||
copyTestDatabaseFile(configDir, "groups.xml");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -92,9 +81,9 @@ class XmlGroupV1UpdateStepTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void shouldExtractProperties(@TempDirectory.TempDir Path tempDir) throws JAXBException {
|
void shouldExtractProperties() throws JAXBException {
|
||||||
updateStep.doUpdate();
|
updateStep.doUpdate();
|
||||||
Path propertiesFile = tempDir.resolve("config").resolve("group-properties-v1.xml");
|
Path propertiesFile = testUtil.getFile("group-properties-v1.xml");
|
||||||
assertThat(propertiesFile)
|
assertThat(propertiesFile)
|
||||||
.exists();
|
.exists();
|
||||||
assertThat(linesOf(propertiesFile.toFile()))
|
assertThat(linesOf(propertiesFile.toFile()))
|
||||||
@@ -110,11 +99,6 @@ class XmlGroupV1UpdateStepTest {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void copyTestDatabaseFile(Path configDir, String groupsFileName) throws IOException {
|
|
||||||
URL url = Resources.getResource("sonia/scm/group/update/" + groupsFileName);
|
|
||||||
Files.copy(url.openStream(), configDir.resolve(groupsFileName));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void shouldNotFailForMissingConfigDir() throws JAXBException {
|
void shouldNotFailForMissingConfigDir() throws JAXBException {
|
||||||
updateStep.doUpdate();
|
updateStep.doUpdate();
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package sonia.scm.repository.update;
|
package sonia.scm.update.repository;
|
||||||
|
|
||||||
import org.junit.jupiter.api.BeforeEach;
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package sonia.scm.repository.update;
|
package sonia.scm.update.repository;
|
||||||
|
|
||||||
import org.junit.jupiter.api.BeforeEach;
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package sonia.scm.repository.update;
|
package sonia.scm.update.repository;
|
||||||
|
|
||||||
import org.assertj.core.api.Assertions;
|
import org.assertj.core.api.Assertions;
|
||||||
import org.junit.jupiter.api.BeforeEach;
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
@@ -11,13 +11,15 @@ import org.mockito.junit.jupiter.MockitoExtension;
|
|||||||
import sonia.scm.SCMContextProvider;
|
import sonia.scm.SCMContextProvider;
|
||||||
import sonia.scm.store.ConfigurationStoreFactory;
|
import sonia.scm.store.ConfigurationStoreFactory;
|
||||||
import sonia.scm.store.JAXBConfigurationStoreFactory;
|
import sonia.scm.store.JAXBConfigurationStoreFactory;
|
||||||
|
import sonia.scm.update.repository.MigrationStrategy;
|
||||||
|
import sonia.scm.update.repository.MigrationStrategyDao;
|
||||||
|
|
||||||
import javax.xml.bind.JAXBException;
|
import javax.xml.bind.JAXBException;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
import static sonia.scm.repository.update.MigrationStrategy.INLINE;
|
import static sonia.scm.update.repository.MigrationStrategy.INLINE;
|
||||||
|
|
||||||
@ExtendWith(MockitoExtension.class)
|
@ExtendWith(MockitoExtension.class)
|
||||||
@ExtendWith(TempDirectory.class)
|
@ExtendWith(TempDirectory.class)
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
package sonia.scm.repository.update;
|
package sonia.scm.update.repository;
|
||||||
|
|
||||||
import com.google.inject.Injector;
|
import com.google.inject.Injector;
|
||||||
import sonia.scm.repository.update.MigrationStrategy.Instance;
|
import sonia.scm.update.repository.MigrationStrategy.Instance;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package sonia.scm.repository.update;
|
package sonia.scm.update.repository;
|
||||||
|
|
||||||
import org.junit.jupiter.api.BeforeEach;
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package sonia.scm.repository.update;
|
package sonia.scm.update.repository;
|
||||||
|
|
||||||
import sonia.scm.repository.spi.ZippedRepositoryTestBase;
|
import sonia.scm.repository.spi.ZippedRepositoryTestBase;
|
||||||
|
|
||||||
@@ -62,6 +62,6 @@ class V1RepositoryFileSystem {
|
|||||||
* </pre>
|
* </pre>
|
||||||
*/
|
*/
|
||||||
static void createV1Home(Path tempDir) throws IOException {
|
static void createV1Home(Path tempDir) throws IOException {
|
||||||
ZippedRepositoryTestBase.extract(tempDir.toFile(), "sonia/scm/repository/update/scm-home.v1.zip");
|
ZippedRepositoryTestBase.extract(tempDir.toFile(), "sonia/scm/update/repository/scm-home.v1.zip");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package sonia.scm.repository.update;
|
package sonia.scm.update.repository;
|
||||||
|
|
||||||
import com.google.common.io.Resources;
|
import com.google.common.io.Resources;
|
||||||
import org.junit.jupiter.api.BeforeEach;
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
@@ -31,7 +31,7 @@ class XmlRepositoryFileNameUpdateStepTest {
|
|||||||
@Test
|
@Test
|
||||||
void shouldCopyRepositoriesFileToRepositoryPathsFile(@TempDirectory.TempDir Path tempDir) throws JAXBException, IOException {
|
void shouldCopyRepositoriesFileToRepositoryPathsFile(@TempDirectory.TempDir Path tempDir) throws JAXBException, IOException {
|
||||||
XmlRepositoryFileNameUpdateStep updateStep = new XmlRepositoryFileNameUpdateStep(contextProvider);
|
XmlRepositoryFileNameUpdateStep updateStep = new XmlRepositoryFileNameUpdateStep(contextProvider);
|
||||||
URL url = Resources.getResource("sonia/scm/repository/update/formerV2RepositoryFile.xml");
|
URL url = Resources.getResource("sonia/scm/update/repository/formerV2RepositoryFile.xml");
|
||||||
Path configDir = tempDir.resolve("config");
|
Path configDir = tempDir.resolve("config");
|
||||||
Files.createDirectories(configDir);
|
Files.createDirectories(configDir);
|
||||||
Files.copy(url.openStream(), configDir.resolve("repositories.xml"));
|
Files.copy(url.openStream(), configDir.resolve("repositories.xml"));
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package sonia.scm.repository.update;
|
package sonia.scm.update.repository;
|
||||||
|
|
||||||
import com.google.common.io.Resources;
|
import com.google.common.io.Resources;
|
||||||
import com.google.inject.Injector;
|
import com.google.inject.Injector;
|
||||||
@@ -36,9 +36,9 @@ import static org.mockito.Mockito.lenient;
|
|||||||
import static org.mockito.Mockito.times;
|
import static org.mockito.Mockito.times;
|
||||||
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.verify;
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
import static sonia.scm.repository.update.MigrationStrategy.COPY;
|
import static sonia.scm.update.repository.MigrationStrategy.COPY;
|
||||||
import static sonia.scm.repository.update.MigrationStrategy.INLINE;
|
import static sonia.scm.update.repository.MigrationStrategy.INLINE;
|
||||||
import static sonia.scm.repository.update.MigrationStrategy.MOVE;
|
import static sonia.scm.update.repository.MigrationStrategy.MOVE;
|
||||||
|
|
||||||
@ExtendWith(MockitoExtension.class)
|
@ExtendWith(MockitoExtension.class)
|
||||||
@ExtendWith(TempDirectory.class)
|
@ExtendWith(TempDirectory.class)
|
||||||
@@ -226,7 +226,7 @@ class XmlRepositoryV1UpdateStepTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void createFormerV2RepositoriesFile(@TempDirectory.TempDir Path tempDir) throws IOException {
|
private void createFormerV2RepositoriesFile(@TempDirectory.TempDir Path tempDir) throws IOException {
|
||||||
URL url = Resources.getResource("sonia/scm/repository/update/formerV2RepositoryFile.xml");
|
URL url = Resources.getResource("sonia/scm/update/repository/formerV2RepositoryFile.xml");
|
||||||
Path configDir = tempDir.resolve("config");
|
Path configDir = tempDir.resolve("config");
|
||||||
Files.createDirectories(configDir);
|
Files.createDirectories(configDir);
|
||||||
Files.copy(url.openStream(), configDir.resolve("repositories.xml"));
|
Files.copy(url.openStream(), configDir.resolve("repositories.xml"));
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package sonia.scm.security.update;
|
package sonia.scm.update.security;
|
||||||
|
|
||||||
import com.google.common.io.Resources;
|
import com.google.common.io.Resources;
|
||||||
import org.junit.jupiter.api.BeforeEach;
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
@@ -14,6 +14,7 @@ import sonia.scm.store.ConfigurationEntryStore;
|
|||||||
import sonia.scm.store.ConfigurationEntryStoreFactory;
|
import sonia.scm.store.ConfigurationEntryStoreFactory;
|
||||||
import sonia.scm.store.InMemoryConfigurationEntryStore;
|
import sonia.scm.store.InMemoryConfigurationEntryStore;
|
||||||
import sonia.scm.store.InMemoryConfigurationEntryStoreFactory;
|
import sonia.scm.store.InMemoryConfigurationEntryStoreFactory;
|
||||||
|
import sonia.scm.update.security.XmlSecurityV1UpdateStep;
|
||||||
|
|
||||||
import javax.xml.bind.JAXBException;
|
import javax.xml.bind.JAXBException;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@@ -82,7 +83,7 @@ class XmlSecurityV1UpdateStepTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void copyTestDatabaseFile(Path configDir, String fileName) throws IOException {
|
private void copyTestDatabaseFile(Path configDir, String fileName) throws IOException {
|
||||||
URL url = Resources.getResource("sonia/scm/security/update/" + fileName);
|
URL url = Resources.getResource("sonia/scm/update/security/" + fileName);
|
||||||
Files.copy(url.openStream(), configDir.resolve(fileName));
|
Files.copy(url.openStream(), configDir.resolve(fileName));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1,6 +1,5 @@
|
|||||||
package sonia.scm.user.update;
|
package sonia.scm.update.user;
|
||||||
|
|
||||||
import com.google.common.io.Resources;
|
|
||||||
import org.junit.jupiter.api.BeforeEach;
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
import org.junit.jupiter.api.Nested;
|
import org.junit.jupiter.api.Nested;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
@@ -10,18 +9,13 @@ import org.mockito.ArgumentCaptor;
|
|||||||
import org.mockito.Captor;
|
import org.mockito.Captor;
|
||||||
import org.mockito.Mock;
|
import org.mockito.Mock;
|
||||||
import org.mockito.junit.jupiter.MockitoExtension;
|
import org.mockito.junit.jupiter.MockitoExtension;
|
||||||
import sonia.scm.SCMContextProvider;
|
|
||||||
import sonia.scm.security.AssignedPermission;
|
import sonia.scm.security.AssignedPermission;
|
||||||
import sonia.scm.security.DefaultKeyGenerator;
|
import sonia.scm.update.UpdateStepTestUtil;
|
||||||
import sonia.scm.store.ConfigurationEntryStoreFactory;
|
|
||||||
import sonia.scm.store.JAXBConfigurationEntryStoreFactory;
|
|
||||||
import sonia.scm.user.User;
|
import sonia.scm.user.User;
|
||||||
import sonia.scm.user.xml.XmlUserDAO;
|
import sonia.scm.user.xml.XmlUserDAO;
|
||||||
|
|
||||||
import javax.xml.bind.JAXBException;
|
import javax.xml.bind.JAXBException;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.net.URL;
|
|
||||||
import java.nio.file.Files;
|
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
@@ -31,14 +25,11 @@ import static org.mockito.ArgumentMatchers.any;
|
|||||||
import static org.mockito.Mockito.doNothing;
|
import static org.mockito.Mockito.doNothing;
|
||||||
import static org.mockito.Mockito.times;
|
import static org.mockito.Mockito.times;
|
||||||
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.verify;
|
||||||
import static org.mockito.Mockito.when;
|
|
||||||
|
|
||||||
@ExtendWith(MockitoExtension.class)
|
@ExtendWith(MockitoExtension.class)
|
||||||
@ExtendWith(TempDirectory.class)
|
@ExtendWith(TempDirectory.class)
|
||||||
class XmlUserV1UpdateStepTest {
|
class XmlUserV1UpdateStepTest {
|
||||||
|
|
||||||
@Mock
|
|
||||||
SCMContextProvider contextProvider;
|
|
||||||
@Mock
|
@Mock
|
||||||
XmlUserDAO userDAO;
|
XmlUserDAO userDAO;
|
||||||
|
|
||||||
@@ -47,13 +38,12 @@ class XmlUserV1UpdateStepTest {
|
|||||||
|
|
||||||
XmlUserV1UpdateStep updateStep;
|
XmlUserV1UpdateStep updateStep;
|
||||||
|
|
||||||
ConfigurationEntryStoreFactory storeFactory;
|
private UpdateStepTestUtil testUtil;
|
||||||
|
|
||||||
@BeforeEach
|
@BeforeEach
|
||||||
void mockScmHome(@TempDirectory.TempDir Path tempDir) {
|
void mockScmHome(@TempDirectory.TempDir Path tempDir) {
|
||||||
when(contextProvider.getBaseDirectory()).thenReturn(tempDir.toFile());
|
testUtil = new UpdateStepTestUtil(tempDir);
|
||||||
storeFactory = new JAXBConfigurationEntryStoreFactory(contextProvider, null, new DefaultKeyGenerator());
|
updateStep = new XmlUserV1UpdateStep(testUtil.getContextProvider(), userDAO, testUtil.getStoreFactory());
|
||||||
updateStep = new XmlUserV1UpdateStep(contextProvider, userDAO, storeFactory);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nested
|
@Nested
|
||||||
@@ -65,20 +55,15 @@ class XmlUserV1UpdateStepTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@BeforeEach
|
@BeforeEach
|
||||||
void createUserV1XML(@TempDirectory.TempDir Path tempDir) throws IOException {
|
void createUserV1XML() throws IOException {
|
||||||
Path configDir = tempDir.resolve("config");
|
testUtil.copyConfigFile("sonia/scm/update/user/users.xml");
|
||||||
Files.createDirectories(configDir);
|
|
||||||
copyTestDatabaseFile(configDir, "users.xml");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void shouldCreateNewPermissionsForV1AdminUser() throws JAXBException {
|
void shouldCreateNewPermissionsForV1AdminUser() throws JAXBException {
|
||||||
updateStep.doUpdate();
|
updateStep.doUpdate();
|
||||||
Optional<AssignedPermission> assignedPermission =
|
Optional<AssignedPermission> assignedPermission =
|
||||||
storeFactory
|
testUtil.getStoreForConfigFile("security")
|
||||||
.withType(AssignedPermission.class)
|
|
||||||
.withName("security")
|
|
||||||
.build()
|
|
||||||
.getAll()
|
.getAll()
|
||||||
.values()
|
.values()
|
||||||
.stream()
|
.stream()
|
||||||
@@ -111,9 +96,9 @@ class XmlUserV1UpdateStepTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void shouldExtractProperties(@TempDirectory.TempDir Path tempDir) throws JAXBException {
|
void shouldExtractProperties() throws JAXBException {
|
||||||
updateStep.doUpdate();
|
updateStep.doUpdate();
|
||||||
Path propertiesFile = tempDir.resolve("config").resolve("user-properties-v1.xml");
|
Path propertiesFile = testUtil.getFile("user-properties-v1.xml");
|
||||||
assertThat(propertiesFile)
|
assertThat(propertiesFile)
|
||||||
.exists();
|
.exists();
|
||||||
assertThat(linesOf(propertiesFile.toFile()))
|
assertThat(linesOf(propertiesFile.toFile()))
|
||||||
@@ -133,11 +118,6 @@ class XmlUserV1UpdateStepTest {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void copyTestDatabaseFile(Path configDir, String usersFileName) throws IOException {
|
|
||||||
URL url = Resources.getResource("sonia/scm/user/update/" + usersFileName);
|
|
||||||
Files.copy(url.openStream(), configDir.resolve(usersFileName));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void shouldNotFailForMissingConfigDir() throws JAXBException {
|
void shouldNotFailForMissingConfigDir() throws JAXBException {
|
||||||
updateStep.doUpdate();
|
updateStep.doUpdate();
|
||||||
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user