diff --git a/gradle/dependencies.gradle b/gradle/dependencies.gradle index 9162b388ec..3114e02a1a 100644 --- a/gradle/dependencies.gradle +++ b/gradle/dependencies.gradle @@ -16,7 +16,7 @@ ext { jettyVersion = '9.4.44.v20210927' luceneVersion = '8.9.0' - junitJupiterVersion = '5.7.0' + junitJupiterVersion = '5.9.2' hamcrestVersion = '2.1' mockitoVersion = '3.6.28' jerseyClientVersion = '1.19.4' @@ -167,7 +167,7 @@ ext { junit: 'junit:junit:4.13.1', // junit 5 extensions - junitPioneer: 'org.junit-pioneer:junit-pioneer:1.6.2', + junitPioneer: 'org.junit-pioneer:junit-pioneer:2.0.0', // assertions hamcrestCore: "org.hamcrest:hamcrest-core:${hamcrestVersion}", diff --git a/scm-dao-xml/src/test/java/sonia/scm/store/JAXBPropertyFileAccessTest.java b/scm-dao-xml/src/test/java/sonia/scm/store/JAXBPropertyFileAccessTest.java index 0c6f4ac982..6eafabdd95 100644 --- a/scm-dao-xml/src/test/java/sonia/scm/store/JAXBPropertyFileAccessTest.java +++ b/scm-dao-xml/src/test/java/sonia/scm/store/JAXBPropertyFileAccessTest.java @@ -61,8 +61,11 @@ class JAXBPropertyFileAccessTest { JAXBPropertyFileAccess fileAccess; + @TempDir + private Path tempDir; + @BeforeEach - void initTempDir(@TempDir Path tempDir) { + void initTempDir() { lenient().when(contextProvider.getBaseDirectory()).thenReturn(tempDir.toFile()); lenient().when(contextProvider.resolve(any())).thenAnswer(invocation -> tempDir.resolve(invocation.getArgument(0).toString())); @@ -98,8 +101,8 @@ class JAXBPropertyFileAccessTest { } @Test - void shouldMoveStoreFileToRepositoryBasedLocation(@TempDir Path tempDir) throws IOException { - createV1StoreFile(tempDir, "myStore.xml"); + void shouldMoveStoreFileToRepositoryBasedLocation() throws IOException { + createV1StoreFile("myStore.xml"); fileAccess.forStoreName(STORE_NAME).moveAsRepositoryStore(Paths.get("myStore.xml"), REPOSITORY_ID); @@ -107,11 +110,11 @@ class JAXBPropertyFileAccessTest { } @Test - void shouldMoveAllStoreFilesToRepositoryBasedLocations(@TempDir Path tempDir) throws IOException { + void shouldMoveAllStoreFilesToRepositoryBasedLocations() throws IOException { locationResolver.forClass(Path.class).createLocation("repoId2"); - createV1StoreFile(tempDir, REPOSITORY_ID + ".xml"); - createV1StoreFile(tempDir, "repoId2.xml"); + createV1StoreFile(REPOSITORY_ID + ".xml"); + createV1StoreFile("repoId2.xml"); PropertyFileAccess.StoreFileTools statisticStoreAccess = fileAccess.forStoreName(STORE_NAME); statisticStoreAccess.forStoreFiles(statisticStoreAccess::moveAsRepositoryStore); @@ -121,7 +124,7 @@ class JAXBPropertyFileAccessTest { } } - private void createV1StoreFile(@TempDir Path tempDir, String name) throws IOException { + private void createV1StoreFile(String name) throws IOException { Path v1Dir = tempDir.resolve("var").resolve("data").resolve(STORE_NAME); IOUtil.mkdirs(v1Dir.toFile()); Files.createFile(v1Dir.resolve(name)); @@ -131,8 +134,8 @@ class JAXBPropertyFileAccessTest { class ForMissingRepository { @Test - void shouldIgnoreStoreFile(@TempDir Path tempDir) throws IOException { - createV1StoreFile(tempDir, "myStore.xml"); + void shouldIgnoreStoreFile() throws IOException { + createV1StoreFile("myStore.xml"); fileAccess.forStoreName(STORE_NAME).moveAsRepositoryStore(Paths.get("myStore.xml"), REPOSITORY_ID); diff --git a/scm-it/build.gradle b/scm-it/build.gradle index bab2478f94..2195109c94 100644 --- a/scm-it/build.gradle +++ b/scm-it/build.gradle @@ -58,6 +58,8 @@ dependencies { testImplementation libraries.jerseyClientRuntime testImplementation libraries.jacksonJaxbAnnotations + testImplementation libraries.junitPioneer + itWebApp project(path: ':scm-webapp', configuration: 'webapp') itPlugin project(path: ':scm-plugins:scm-integration-test-plugin', configuration: 'smp') } diff --git a/scm-it/src/test/java/sonia/scm/it/DiffITCase.java b/scm-it/src/test/java/sonia/scm/it/DiffITCase.java index ae92284386..d16ba089d6 100644 --- a/scm-it/src/test/java/sonia/scm/it/DiffITCase.java +++ b/scm-it/src/test/java/sonia/scm/it/DiffITCase.java @@ -21,17 +21,16 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ - + package sonia.scm.it; import org.apache.http.HttpStatus; -import org.assertj.core.api.AbstractCharSequenceAssert; import org.assertj.core.util.Lists; -import org.junit.Before; -import org.junit.Ignore; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.TemporaryFolder; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; +import org.junitpioneer.jupiter.RetryingTest; import sonia.scm.it.utils.RepositoryUtil; import sonia.scm.it.utils.ScmRequests; import sonia.scm.it.utils.TestData; @@ -52,27 +51,23 @@ import java.util.Map; import java.util.stream.Collectors; import java.util.stream.Stream; +import static java.nio.file.Files.createDirectories; import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatThrownBy; import static sonia.scm.it.utils.RestUtil.ADMIN_PASSWORD; import static sonia.scm.it.utils.RestUtil.ADMIN_USERNAME; -public class DiffITCase { +class DiffITCase { - @Rule - public TemporaryFolder tempFolder = new TemporaryFolder(); + @TempDir public Path tempFolder; private RepositoryClient svnRepositoryClient; private RepositoryClient gitRepositoryClient; private RepositoryClient hgRepositoryClient; private ScmRequests.RepositoryResponse svnRepositoryResponse; private ScmRequests.RepositoryResponse hgRepositoryResponse; private ScmRequests.RepositoryResponse gitRepositoryResponse; - private File svnFolder; - private File gitFolder; - private File hgFolder; - @Before - public void init() throws IOException { + @BeforeEach + void init() throws IOException { TestData.createDefault(); String namespace = ADMIN_USERNAME; String repo = TestData.getDefaultRepoName("svn"); @@ -81,7 +76,7 @@ public class DiffITCase { .requestIndexResource(ADMIN_USERNAME, ADMIN_PASSWORD) .requestRepository(namespace, repo) .assertStatusCode(HttpStatus.SC_OK); - svnFolder = tempFolder.newFolder("svn"); + File svnFolder = createDirectories(tempFolder.resolve("svn")).toFile(); svnRepositoryClient = RepositoryUtil.createRepositoryClient("svn", svnFolder); repo = TestData.getDefaultRepoName("git"); @@ -90,7 +85,7 @@ public class DiffITCase { .requestIndexResource(ADMIN_USERNAME, ADMIN_PASSWORD) .requestRepository(namespace, repo) .assertStatusCode(HttpStatus.SC_OK); - gitFolder = tempFolder.newFolder("git"); + File gitFolder = createDirectories(tempFolder.resolve("git")).toFile(); gitRepositoryClient = RepositoryUtil.createRepositoryClient("git", gitFolder); repo = TestData.getDefaultRepoName("hg"); @@ -99,12 +94,12 @@ public class DiffITCase { .requestIndexResource(ADMIN_USERNAME, ADMIN_PASSWORD) .requestRepository(namespace, repo) .assertStatusCode(HttpStatus.SC_OK); - hgFolder = tempFolder.newFolder("hg"); + File hgFolder = createDirectories(tempFolder.resolve("hg")).toFile(); hgRepositoryClient = RepositoryUtil.createRepositoryClient("hg", hgFolder); } @Test - public void shouldFindDiffsInGitFormat() throws IOException { + void shouldFindDiffsInGitFormat() throws IOException { String svnDiff = getDiff(RepositoryUtil.createAndCommitFile(svnRepositoryClient, ADMIN_USERNAME, "a.txt", "content of a"), svnRepositoryResponse); String gitDiff = getDiff(RepositoryUtil.createAndCommitFile(gitRepositoryClient, ADMIN_USERNAME, "a.txt", "content of a"), gitRepositoryResponse); String hgDiff = getDiff(RepositoryUtil.createAndCommitFile(hgRepositoryClient, ADMIN_USERNAME, "a.txt", "content of a"), hgRepositoryResponse); @@ -115,7 +110,7 @@ public class DiffITCase { } @Test - public void svnAddFileDiffShouldBeConvertedToGitDiff() throws IOException { + void svnAddFileDiffShouldBeConvertedToGitDiff() throws IOException { String svnDiff = getDiff(RepositoryUtil.createAndCommitFile(svnRepositoryClient, ADMIN_USERNAME, "a.txt", "content of a"), svnRepositoryResponse); String gitDiff = getDiff(RepositoryUtil.createAndCommitFile(gitRepositoryClient, ADMIN_USERNAME, "a.txt", "content of a"), gitRepositoryResponse); @@ -123,8 +118,8 @@ public class DiffITCase { assertDiffsAreEqual(svnDiff, expected); } - @Test - public void svnDeleteFileDiffShouldBeConvertedToGitDiff() throws IOException { + @RetryingTest(3) + void svnDeleteFileDiffShouldBeConvertedToGitDiff() throws IOException { RepositoryUtil.createAndCommitFile(svnRepositoryClient, ADMIN_USERNAME, "a.txt", "content of a"); RepositoryUtil.createAndCommitFile(gitRepositoryClient, ADMIN_USERNAME, "a.txt", "content of a"); @@ -136,7 +131,7 @@ public class DiffITCase { } @Test - public void svnUpdateFileDiffShouldBeConvertedToGitDiff() throws IOException { + void svnUpdateFileDiffShouldBeConvertedToGitDiff() throws IOException { RepositoryUtil.createAndCommitFile(svnRepositoryClient, ADMIN_USERNAME, "a.txt", "content of a"); RepositoryUtil.createAndCommitFile(gitRepositoryClient, ADMIN_USERNAME, "a.txt", "content of a"); @@ -147,8 +142,8 @@ public class DiffITCase { assertDiffsAreEqual(svnDiff, expected); } - @Test - public void svnMultipleChangesDiffShouldBeConvertedToGitDiff() throws IOException { + @RetryingTest(3) + void svnMultipleChangesDiffShouldBeConvertedToGitDiff() throws IOException { String svnDiff = getDiff(applyMultipleChanges(svnRepositoryClient, "fileToBeDeleted.txt", "fileToBeUpdated.txt", "addedFile.txt"), svnRepositoryResponse); String gitDiff = getDiff(applyMultipleChanges(gitRepositoryClient, "fileToBeDeleted.txt", "fileToBeUpdated.txt", "addedFile.txt"), gitRepositoryResponse); @@ -162,7 +157,7 @@ public class DiffITCase { } @Test - public void svnMultipleSubFolderChangesDiffShouldBeConvertedToGitDiff() throws IOException { + void svnMultipleSubFolderChangesDiffShouldBeConvertedToGitDiff() throws IOException { String svnDiff = getDiff(applyMultipleChanges(svnRepositoryClient, "a/b/fileToBeDeleted.txt", "a/c/fileToBeUpdated.txt", "a/d/addedFile.txt"), svnRepositoryResponse); String gitDiff = getDiff(applyMultipleChanges(gitRepositoryClient, "a/b/fileToBeDeleted.txt", "a/c/fileToBeUpdated.txt", "a/d/addedFile.txt"), gitRepositoryResponse); @@ -176,7 +171,7 @@ public class DiffITCase { } @Test - public void svnLargeChangesDiffShouldBeConvertedToGitDiff() throws IOException, URISyntaxException { + void svnLargeChangesDiffShouldBeConvertedToGitDiff() throws IOException, URISyntaxException { String fileName = "SvnDiffGenerator_forTest"; RepositoryUtil.createAndCommitFile(svnRepositoryClient, ADMIN_USERNAME, fileName, ""); RepositoryUtil.createAndCommitFile(gitRepositoryClient, ADMIN_USERNAME, fileName, ""); @@ -201,9 +196,9 @@ public class DiffITCase { * FIXME: the binary Git Diff output is not GIT conform */ @Test - @Ignore + @Disabled @SuppressWarnings("squid:S1607") - public void svnBinaryChangesDiffShouldBeConvertedToGitDiff() throws IOException, URISyntaxException { + void svnBinaryChangesDiffShouldBeConvertedToGitDiff() throws IOException, URISyntaxException { String fileName = "binary"; File file = new File(svnRepositoryClient.getWorkingCopy(), fileName); Files.copy(Paths.get(getClass().getResource("/diff/binaryfile/echo").toURI()), Paths.get(file.toURI())); @@ -220,7 +215,7 @@ public class DiffITCase { } @Test - public void svnRenameChangesDiffShouldBeConvertedToGitDiff() throws IOException, URISyntaxException { + void svnRenameChangesDiffShouldBeConvertedToGitDiff() throws IOException, URISyntaxException { String fileName = "a.txt"; RepositoryUtil.createAndCommitFile(svnRepositoryClient, ADMIN_USERNAME, fileName, "content of a"); RepositoryUtil.createAndCommitFile(gitRepositoryClient, ADMIN_USERNAME, fileName, "content of a"); diff --git a/scm-it/src/test/java/sonia/scm/it/GitNonFastForwardITCase.java b/scm-it/src/test/java/sonia/scm/it/GitNonFastForwardITCase.java index 38b5dbc6ee..832f2d8606 100644 --- a/scm-it/src/test/java/sonia/scm/it/GitNonFastForwardITCase.java +++ b/scm-it/src/test/java/sonia/scm/it/GitNonFastForwardITCase.java @@ -34,12 +34,12 @@ import org.eclipse.jgit.transport.PushResult; import org.eclipse.jgit.transport.RemoteRefUpdate; import org.eclipse.jgit.transport.RemoteRefUpdate.Status; import org.eclipse.jgit.transport.UsernamePasswordCredentialsProvider; -import org.junit.After; -import org.junit.AfterClass; -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.TemporaryFolder; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; +import org.junitpioneer.jupiter.RetryingTest; import sonia.scm.it.utils.RestUtil; import sonia.scm.it.utils.TestData; import sonia.scm.web.VndMediaType; @@ -47,44 +47,45 @@ import sonia.scm.web.VndMediaType; import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.IOException; +import java.nio.file.Path; -import static org.junit.Assert.assertEquals; +import static org.assertj.core.api.Assertions.assertThat; import static sonia.scm.it.utils.RestUtil.given; /** * Integration Tests for Git with non fast-forward pushes. */ -public class GitNonFastForwardITCase { +class GitNonFastForwardITCase { private File workingCopy; private Git git; - @Rule - public TemporaryFolder tempFolder = new TemporaryFolder(); + @TempDir + private Path tempFolder; - @Before - public void createAndCloneTestRepository() throws IOException, GitAPIException { + @BeforeEach + void createAndCloneTestRepository() throws GitAPIException { TestData.createDefault(); - this.workingCopy = tempFolder.newFolder(); + this.workingCopy = tempFolder.toFile(); this.git = clone(RestUtil.BASE_URL.toASCIIString() + "repo/scmadmin/HeartOfGold-git"); } - @After - public void cleanup() { + @AfterEach + void cleanup() { TestData.cleanup(); } /** * Ensures that the normal behaviour (non fast-forward is allowed), is restored after the tests are executed. */ - @AfterClass + @AfterAll public static void allowNonFastForward() { setNonFastForwardDisallowed(false); } @Test - public void testGitPushAmendWithoutForce() throws IOException, GitAPIException { + void testGitPushAmendWithoutForce() throws IOException, GitAPIException { setNonFastForwardDisallowed(false); addTestFileToWorkingCopyAndCommit("a"); @@ -95,7 +96,7 @@ public class GitNonFastForwardITCase { } @Test - public void testGitPushAmendWithForce() throws IOException, GitAPIException { + void testGitPushAmendWithForce() throws IOException, GitAPIException { setNonFastForwardDisallowed(false); addTestFileToWorkingCopyAndCommit("a"); @@ -105,8 +106,8 @@ public class GitNonFastForwardITCase { pushAndAssert(true, Status.OK); } - @Test - public void testGitPushAmendForceWithDisallowNonFastForward() throws GitAPIException, IOException { + @RetryingTest(3) + void testGitPushAmendForceWithDisallowNonFastForward() throws GitAPIException, IOException { setNonFastForwardDisallowed(true); addTestFileToWorkingCopyAndCommit("a"); @@ -172,7 +173,7 @@ public class GitNonFastForwardITCase { private void assertStatus(PushResult pushResult, Status expectedStatus) { for ( RemoteRefUpdate remoteRefUpdate : pushResult.getRemoteUpdates() ) { - assertEquals(expectedStatus, remoteRefUpdate.getStatus()); + assertThat(remoteRefUpdate.getStatus()).isEqualTo(expectedStatus); } } diff --git a/scm-it/src/test/java/sonia/scm/it/MergeDetectionITCase.java b/scm-it/src/test/java/sonia/scm/it/MergeDetectionITCase.java index 2e3e810608..0764a4b640 100644 --- a/scm-it/src/test/java/sonia/scm/it/MergeDetectionITCase.java +++ b/scm-it/src/test/java/sonia/scm/it/MergeDetectionITCase.java @@ -29,7 +29,9 @@ import org.assertj.core.api.Assertions; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; import org.junit.jupiter.api.io.TempDir; +import org.junitpioneer.jupiter.RetryingTest; import sonia.scm.it.utils.RepositoryUtil; import sonia.scm.it.utils.RestUtil; import sonia.scm.it.utils.TestData; @@ -126,7 +128,7 @@ class MergeDetectionITCase { Assertions.assertThat(getMergeDetectionResult("postMergeDetection", 0)).isTrue(); } - @Test + @RetryingTest(3) void shouldDetectNormalPushAsNotMerged(@TempDir Path tempDir) throws IOException { client.getCheckoutCommand().checkout("develop"); writeFile(tempDir, developFile, "other content"); diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/protocolcommand/git/GitRepositoryContextResolverTest.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/protocolcommand/git/GitRepositoryContextResolverTest.java index e7e07e39ec..07083bcf1a 100644 --- a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/protocolcommand/git/GitRepositoryContextResolverTest.java +++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/protocolcommand/git/GitRepositoryContextResolverTest.java @@ -41,7 +41,6 @@ import sonia.scm.repository.Repository; import sonia.scm.repository.RepositoryLocationResolver; import sonia.scm.repository.RepositoryManager; -import java.io.IOException; import java.nio.file.Path; import static org.assertj.core.api.Assertions.assertThat; @@ -72,15 +71,18 @@ class GitRepositoryContextResolverTest { @Nested class WithRepository { + @TempDir + Path repositoryPath; + @BeforeEach - void mockRepository(@TempDir Path repositoryPath) throws IOException { + void mockRepository() { when(scmConfiguration.getBaseUrl()).thenReturn("https://hog.hitchhiker.com/scm"); when(repositoryManager.get(new NamespaceAndName("space", "X"))).thenReturn(REPOSITORY); when(locationResolver.forClass(any()).getLocation("id")).thenReturn(repositoryPath); } @Test - void shouldResolveCorrectRepository(@TempDir Path repositoryPath) { + void shouldResolveCorrectRepository() { RepositoryContext context = resolver.resolve(new String[]{"git", "repo/space/X/something/else"}); assertThat(context.getRepository()).isSameAs(REPOSITORY); @@ -88,7 +90,7 @@ class GitRepositoryContextResolverTest { } @Test - void shouldResolveCorrectRepositoryWithContextPath(@TempDir Path repositoryPath) throws IOException { + void shouldResolveCorrectRepositoryWithContextPath() { RepositoryContext context = resolver.resolve(new String[]{"git", "scm/repo/space/X/something/else"}); assertThat(context.getRepository()).isSameAs(REPOSITORY); diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/update/GitV2UpdateStepTest.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/update/GitV2UpdateStepTest.java index c207a4bf54..03a53315b5 100644 --- a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/update/GitV2UpdateStepTest.java +++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/update/GitV2UpdateStepTest.java @@ -58,13 +58,16 @@ class GitV2UpdateStepTest { @InjectMocks GitV2UpdateStep updateStep; + @TempDir + Path temp; + @BeforeEach - void createDataDirectory(@TempDir Path temp) throws IOException { + void createDataDirectory() throws IOException { Files.createDirectories(temp.resolve("data")); } @BeforeEach - void initRepositoryFolder(@TempDir Path temp) { + void initRepositoryFolder() { when(locationResolver.forClass(Path.class)).thenReturn(locationResolverInstance); when(repositoryMetadataAccess.read(temp)).thenReturn(new Repository("123", "git", "space", "X")); doAnswer(invocation -> { @@ -74,14 +77,14 @@ class GitV2UpdateStepTest { } @Test - void shouldWriteConfigFileForBareRepositories(@TempDir Path temp) { + void shouldWriteConfigFileForBareRepositories() { updateStep.doUpdate(); assertThat(temp.resolve("data").resolve("config")).exists(); } @Test - void shouldWriteConfigFileForNonBareRepositories(@TempDir Path temp) throws IOException { + void shouldWriteConfigFileForNonBareRepositories() throws IOException { Files.createDirectories(temp.resolve("data").resolve(".git")); updateStep.doUpdate(); diff --git a/scm-server/build.gradle b/scm-server/build.gradle index 445ac68913..1bec43b8e1 100644 --- a/scm-server/build.gradle +++ b/scm-server/build.gradle @@ -29,7 +29,7 @@ plugins { dependencies { api platform(project(':')) - + implementation libraries.commonsDaemon implementation libraries.jettyServer implementation libraries.jettyWebapp diff --git a/scm-server/src/test/java/sonia/scm/server/HealthCheckTest.java b/scm-server/src/test/java/sonia/scm/server/HealthCheckTest.java index 0dea0f689f..e4d810d68a 100644 --- a/scm-server/src/test/java/sonia/scm/server/HealthCheckTest.java +++ b/scm-server/src/test/java/sonia/scm/server/HealthCheckTest.java @@ -165,12 +165,12 @@ class HealthCheckTest { } @BeforeEach - private void setUp() { + void setUp() { servers = new ArrayList<>(); } @AfterEach - private void shutdown() { + void shutdown() { for (Server server : servers) { try { server.stop(); diff --git a/scm-webapp/src/test/java/sonia/scm/update/repository/CopyMigrationStrategyTest.java b/scm-webapp/src/test/java/sonia/scm/update/repository/CopyMigrationStrategyTest.java index d0d72f967e..f63d9f5551 100644 --- a/scm-webapp/src/test/java/sonia/scm/update/repository/CopyMigrationStrategyTest.java +++ b/scm-webapp/src/test/java/sonia/scm/update/repository/CopyMigrationStrategyTest.java @@ -51,32 +51,34 @@ class CopyMigrationStrategyTest { SCMContextProvider contextProvider; @Mock RepositoryLocationResolver locationResolver; + @TempDir + private Path tempDir; @BeforeEach - void mockContextProvider(@TempDir Path tempDir) { + void mockContextProvider() { when(contextProvider.getBaseDirectory()).thenReturn(tempDir.toFile()); } @BeforeEach - void createV1Home(@TempDir Path tempDir) throws IOException { + void createV1Home() throws IOException { V1RepositoryFileSystem.createV1Home(tempDir); } @BeforeEach - void mockLocationResolver(@TempDir Path tempDir) { + void mockLocationResolver() { RepositoryLocationResolver.RepositoryLocationResolverInstance instanceMock = mock(RepositoryLocationResolver.RepositoryLocationResolverInstance.class); when(locationResolver.forClass(Path.class)).thenReturn(instanceMock); when(instanceMock.createLocation(anyString())).thenAnswer(invocation -> tempDir.resolve((String) invocation.getArgument(0))); } @Test - void shouldUseStandardDirectory(@TempDir Path tempDir) { + void shouldUseStandardDirectory() { Path target = new CopyMigrationStrategy(contextProvider, locationResolver).migrate("b4f-a9f0-49f7-ad1f-37d3aae1c55f", "some/more/directories/than/one", "git").get(); assertThat(target).isEqualTo(tempDir.resolve("b4f-a9f0-49f7-ad1f-37d3aae1c55f")); } @Test - void shouldCopyDataDirectory(@TempDir Path tempDir) { + void shouldCopyDataDirectory() { Path target = new CopyMigrationStrategy(contextProvider, locationResolver).migrate("b4f-a9f0-49f7-ad1f-37d3aae1c55f", "some/more/directories/than/one", "git").get(); assertThat(target.resolve("data")).exists(); Path originalDataDir = tempDir diff --git a/scm-webapp/src/test/java/sonia/scm/update/repository/InlineMigrationStrategyTest.java b/scm-webapp/src/test/java/sonia/scm/update/repository/InlineMigrationStrategyTest.java index d236859af9..51fd9ff5e9 100644 --- a/scm-webapp/src/test/java/sonia/scm/update/repository/InlineMigrationStrategyTest.java +++ b/scm-webapp/src/test/java/sonia/scm/update/repository/InlineMigrationStrategyTest.java @@ -50,27 +50,29 @@ class InlineMigrationStrategyTest { PathBasedRepositoryLocationResolver locationResolver; @Mock RepositoryLocationResolver.RepositoryLocationResolverInstance locationResolverInstance; + @TempDir + Path tempDir; @BeforeEach - void mockContextProvider(@TempDir Path tempDir) { + void mockContextProvider() { when(locationResolver.forClass(Path.class)).thenReturn(locationResolverInstance); when(contextProvider.getBaseDirectory()).thenReturn(tempDir.toFile()); } @BeforeEach - void createV1Home(@TempDir Path tempDir) throws IOException { + void createV1Home() throws IOException { V1RepositoryFileSystem.createV1Home(tempDir); } @Test - void shouldUseExistingDirectory(@TempDir Path tempDir) { + void shouldUseExistingDirectory() { Path target = new InlineMigrationStrategy(contextProvider, locationResolver).migrate("b4f-a9f0-49f7-ad1f-37d3aae1c55f", "some/more/directories/than/one", "git").get(); assertThat(target).isEqualTo(resolveOldDirectory(tempDir)); verify(locationResolverInstance).setLocation("b4f-a9f0-49f7-ad1f-37d3aae1c55f", target); } @Test - void shouldMoveDataDirectory(@TempDir Path tempDir) { + void shouldMoveDataDirectory() { new InlineMigrationStrategy(contextProvider, locationResolver).migrate("b4f-a9f0-49f7-ad1f-37d3aae1c55f", "some/more/directories/than/one", "git"); assertThat(resolveOldDirectory(tempDir).resolve("data")).exists(); } diff --git a/scm-webapp/src/test/java/sonia/scm/update/repository/MigrateVerbsToPermissionRolesTest.java b/scm-webapp/src/test/java/sonia/scm/update/repository/MigrateVerbsToPermissionRolesTest.java index 72cabf5d8b..df4468d1b8 100644 --- a/scm-webapp/src/test/java/sonia/scm/update/repository/MigrateVerbsToPermissionRolesTest.java +++ b/scm-webapp/src/test/java/sonia/scm/update/repository/MigrateVerbsToPermissionRolesTest.java @@ -63,8 +63,11 @@ class MigrateVerbsToPermissionRolesTest { @InjectMocks private MigrateVerbsToPermissionRoles migration; + @TempDir + private Path tempDir; + @BeforeEach - void init(@TempDir Path tempDir) throws IOException { + void init() throws IOException { URL metadataUrl = Resources.getResource("sonia/scm/update/repository/metadataWithoutRoles.xml"); Files.copy(metadataUrl.openStream(), tempDir.resolve("metadata.xml")); doAnswer(invocation -> { @@ -75,7 +78,7 @@ class MigrateVerbsToPermissionRolesTest { } @Test - void shouldUpdateToRolesIfPossible(@TempDir Path tempDir) throws IOException { + void shouldUpdateToRolesIfPossible() throws IOException { migration.doUpdate(); List newMetadata = Files.readAllLines(tempDir.resolve("metadata.xml")); diff --git a/scm-webapp/src/test/java/sonia/scm/update/repository/MoveMigrationStrategyTest.java b/scm-webapp/src/test/java/sonia/scm/update/repository/MoveMigrationStrategyTest.java index 658360d234..314c0ee26d 100644 --- a/scm-webapp/src/test/java/sonia/scm/update/repository/MoveMigrationStrategyTest.java +++ b/scm-webapp/src/test/java/sonia/scm/update/repository/MoveMigrationStrategyTest.java @@ -48,32 +48,34 @@ class MoveMigrationStrategyTest { SCMContextProvider contextProvider; @Mock RepositoryLocationResolver locationResolver; + @TempDir + Path tempDir; @BeforeEach - void mockContextProvider(@TempDir Path tempDir) { + void mockContextProvider() { when(contextProvider.getBaseDirectory()).thenReturn(tempDir.toFile()); } @BeforeEach - void createV1Home(@TempDir Path tempDir) throws IOException { + void createV1Home() throws IOException { V1RepositoryFileSystem.createV1Home(tempDir); } @BeforeEach - void mockLocationResolver(@TempDir Path tempDir) { + void mockLocationResolver() { RepositoryLocationResolver.RepositoryLocationResolverInstance instanceMock = mock(RepositoryLocationResolver.RepositoryLocationResolverInstance.class); when(locationResolver.forClass(Path.class)).thenReturn(instanceMock); when(instanceMock.createLocation(anyString())).thenAnswer(invocation -> tempDir.resolve((String) invocation.getArgument(0))); } @Test - void shouldUseStandardDirectory(@TempDir Path tempDir) { + void shouldUseStandardDirectory() { Path target = new MoveMigrationStrategy(contextProvider, locationResolver).migrate("b4f-a9f0-49f7-ad1f-37d3aae1c55f", "some/more/directories/than/one", "git").get(); assertThat(target).isEqualTo(tempDir.resolve("b4f-a9f0-49f7-ad1f-37d3aae1c55f")); } @Test - void shouldMoveDataDirectory(@TempDir Path tempDir) { + void shouldMoveDataDirectory() { Path target = new MoveMigrationStrategy(contextProvider, locationResolver).migrate("b4f-a9f0-49f7-ad1f-37d3aae1c55f", "some/more/directories/than/one", "git").get(); assertThat(target.resolve("data")).exists(); Path originalDataDir = tempDir diff --git a/scm-webapp/src/test/java/sonia/scm/update/repository/XmlRepositoryFileNameUpdateStepTest.java b/scm-webapp/src/test/java/sonia/scm/update/repository/XmlRepositoryFileNameUpdateStepTest.java index 3475fffac0..e0f386efb7 100644 --- a/scm-webapp/src/test/java/sonia/scm/update/repository/XmlRepositoryFileNameUpdateStepTest.java +++ b/scm-webapp/src/test/java/sonia/scm/update/repository/XmlRepositoryFileNameUpdateStepTest.java @@ -47,13 +47,16 @@ class XmlRepositoryFileNameUpdateStepTest { SCMContextProvider contextProvider = mock(SCMContextProvider.class); XmlRepositoryDAO repositoryDAO = mock(XmlRepositoryDAO.class); + @TempDir + Path tempDir; + @BeforeEach - void mockScmHome(@TempDir Path tempDir) { + void mockScmHome() { when(contextProvider.getBaseDirectory()).thenReturn(tempDir.toFile()); } @Test - void shouldCopyRepositoriesFileToRepositoryPathsFile(@TempDir Path tempDir) throws IOException { + void shouldCopyRepositoriesFileToRepositoryPathsFile() throws IOException { XmlRepositoryFileNameUpdateStep updateStep = new XmlRepositoryFileNameUpdateStep(contextProvider, repositoryDAO); URL url = Resources.getResource("sonia/scm/update/repository/formerV2RepositoryFile.xml"); Path configDir = tempDir.resolve("config"); diff --git a/scm-webapp/src/test/java/sonia/scm/update/repository/XmlRepositoryV1UpdateStepTest.java b/scm-webapp/src/test/java/sonia/scm/update/repository/XmlRepositoryV1UpdateStepTest.java index a212164c5c..595bbb957a 100644 --- a/scm-webapp/src/test/java/sonia/scm/update/repository/XmlRepositoryV1UpdateStepTest.java +++ b/scm-webapp/src/test/java/sonia/scm/update/repository/XmlRepositoryV1UpdateStepTest.java @@ -82,9 +82,11 @@ class XmlRepositoryV1UpdateStepTest { UpdateStepTestUtil testUtil; XmlRepositoryV1UpdateStep updateStep; + @TempDir + Path tempDir; @BeforeEach - void createUpdateStepFromMocks(@TempDir Path tempDir) { + void createUpdateStepFromMocks() { testUtil = new UpdateStepTestUtil(tempDir); updateStep = new XmlRepositoryV1UpdateStep( testUtil.getContextProvider(), @@ -99,7 +101,7 @@ class XmlRepositoryV1UpdateStepTest { class WithExistingDatabase { @BeforeEach - void createV1Home(@TempDir Path tempDir) throws IOException { + void createV1Home() throws IOException { V1RepositoryFileSystem.createV1Home(tempDir); } @@ -176,7 +178,7 @@ class XmlRepositoryV1UpdateStepTest { } @Test - void shouldUseDirectoryFromStrategy(@TempDir Path tempDir) throws JAXBException { + void shouldUseDirectoryFromStrategy() throws JAXBException { Path targetDir = tempDir.resolve("someDir"); MigrationStrategy.Instance strategyMock = injectorMock.getInstance(MoveMigrationStrategy.class); when(strategyMock.migrate("454972da-faf9-4437-b682-dc4a4e0aa8eb", "simple", "git")).thenReturn(of(targetDir)); @@ -206,7 +208,7 @@ class XmlRepositoryV1UpdateStepTest { } @Test - void shouldBackupOldRepositoryDatabaseFile(@TempDir Path tempDir) throws JAXBException { + void shouldBackupOldRepositoryDatabaseFile() throws JAXBException { updateStep.doUpdate(); assertThat(tempDir.resolve("config").resolve("repositories.xml")).doesNotExist(); @@ -220,15 +222,15 @@ class XmlRepositoryV1UpdateStepTest { } @Test - void shouldNotFailIfFormerV2DatabaseExists(@TempDir Path tempDir) throws JAXBException, IOException { - createFormerV2RepositoriesFile(tempDir); + void shouldNotFailIfFormerV2DatabaseExists() throws JAXBException, IOException { + createFormerV2RepositoriesFile(); updateStep.doUpdate(); } @Test - void shouldNotBackupFormerV2DatabaseFile(@TempDir Path tempDir) throws JAXBException, IOException { - createFormerV2RepositoriesFile(tempDir); + void shouldNotBackupFormerV2DatabaseFile() throws JAXBException, IOException { + createFormerV2RepositoriesFile(); updateStep.doUpdate(); @@ -237,14 +239,14 @@ class XmlRepositoryV1UpdateStepTest { } @Test - void shouldGetNoMissingStrategiesWithFormerV2DatabaseFile(@TempDir Path tempDir) throws IOException { - createFormerV2RepositoriesFile(tempDir); + void shouldGetNoMissingStrategiesWithFormerV2DatabaseFile() throws IOException { + createFormerV2RepositoriesFile(); assertThat(updateStep.getRepositoriesWithoutMigrationStrategies()).isEmpty(); } @Test - void shouldFindMissingStrategies(@TempDir Path tempDir) throws IOException { + void shouldFindMissingStrategies() throws IOException { V1RepositoryFileSystem.createV1Home(tempDir); assertThat(updateStep.getRepositoriesWithoutMigrationStrategies()) @@ -255,7 +257,7 @@ class XmlRepositoryV1UpdateStepTest { "454972da-faf9-4437-b682-dc4a4e0aa8eb"); } - private void createFormerV2RepositoriesFile(@TempDir Path tempDir) throws IOException { + private void createFormerV2RepositoriesFile() throws IOException { URL url = Resources.getResource("sonia/scm/update/repository/formerV2RepositoryFile.xml"); Path configDir = tempDir.resolve("config"); Files.createDirectories(configDir); diff --git a/scm-webapp/src/test/java/sonia/scm/update/security/XmlSecurityV1UpdateStepTest.java b/scm-webapp/src/test/java/sonia/scm/update/security/XmlSecurityV1UpdateStepTest.java index 9dc506e919..f5d8c88ccc 100644 --- a/scm-webapp/src/test/java/sonia/scm/update/security/XmlSecurityV1UpdateStepTest.java +++ b/scm-webapp/src/test/java/sonia/scm/update/security/XmlSecurityV1UpdateStepTest.java @@ -59,8 +59,11 @@ class XmlSecurityV1UpdateStepTest { XmlSecurityV1UpdateStep updateStep; ConfigurationEntryStore assignedPermissionStore; + @TempDir + Path tempDir; + @BeforeEach - void mockScmHome(@TempDir Path tempDir) { + void mockScmHome() { when(contextProvider.getBaseDirectory()).thenReturn(tempDir.toFile()); InMemoryConfigurationEntryStoreFactory inMemoryConfigurationEntryStoreFactory = create(); assignedPermissionStore = inMemoryConfigurationEntryStoreFactory.get("security"); @@ -71,7 +74,7 @@ class XmlSecurityV1UpdateStepTest { class WithExistingDatabase { @BeforeEach - void createConfigV1XML(@TempDir Path tempDir) throws IOException { + void createConfigV1XML() throws IOException { Path configDir = tempDir.resolve("config"); Files.createDirectories(configDir); copyTestDatabaseFile(configDir, "config.xml"); @@ -111,7 +114,7 @@ class XmlSecurityV1UpdateStepTest { private Path configDir; @BeforeEach - void createSecurityV1XML(@TempDir Path tempDir) throws IOException { + void createSecurityV1XML() throws IOException { configDir = tempDir.resolve("config"); Files.createDirectories(configDir); }