diff --git a/src/NzbDrone.Integration.Test/IntegrationTestCleanup.cs b/src/NzbDrone.Integration.Test/IntegrationTestCleanup.cs new file mode 100644 index 000000000..9163957a7 --- /dev/null +++ b/src/NzbDrone.Integration.Test/IntegrationTestCleanup.cs @@ -0,0 +1,20 @@ +using System.IO; +using NUnit.Framework; + +namespace NzbDrone.Integration.Test +{ + [SetUpFixture] + public class IntegrationTestSetup + { + [OneTimeSetUp] + [OneTimeTearDown] + public void CleanUp() + { + var dir = Path.Combine(TestContext.CurrentContext.TestDirectory, "CachedAppData"); + if (Directory.Exists(dir)) + { + Directory.Delete(dir, true); + } + } + } +} diff --git a/src/NzbDrone.Test.Common/NzbDroneRunner.cs b/src/NzbDrone.Test.Common/NzbDroneRunner.cs index 2fc0f4cfb..13fbf0627 100644 --- a/src/NzbDrone.Test.Common/NzbDroneRunner.cs +++ b/src/NzbDrone.Test.Common/NzbDroneRunner.cs @@ -27,13 +27,43 @@ public NzbDroneRunner(Logger logger, int port = 7878) _restClient = new RestClient("http://localhost:7878/api/v3"); } + private void CopyDirectory(string source, string target) + { + foreach (var dirPath in Directory.GetDirectories(source, "*", SearchOption.AllDirectories)) + { + Directory.CreateDirectory(dirPath.Replace(source, target)); + } + + foreach (var newPath in Directory.GetFiles(source, "*.*", SearchOption.AllDirectories)) + { + File.Copy(newPath, newPath.Replace(source, target), true); + } + } + public void Start() { AppData = Path.Combine(TestContext.CurrentContext.TestDirectory, "_intg_" + TestBase.GetUID()); - Directory.CreateDirectory(AppData); - GenerateConfigFile(); + if (!Directory.Exists(Path.Combine(TestContext.CurrentContext.TestDirectory, "CachedAppData"))) + { + Directory.CreateDirectory(AppData); + GenerateConfigFile(); + StartInternal(); + KillAll(false); + CopyDirectory(AppData, Path.Combine(TestContext.CurrentContext.TestDirectory, "CachedAppData")); + } + else + { + CopyDirectory(Path.Combine(TestContext.CurrentContext.TestDirectory, "CachedAppData"), AppData); + GenerateConfigFile(); + } + + StartInternal(); + } + + private void StartInternal() + { string consoleExe; if (OsInfo.IsWindows) { @@ -85,7 +115,7 @@ public void Start() } } - public void KillAll() + public void KillAll(bool delete = true) { try { @@ -102,7 +132,10 @@ public void KillAll() // May happen if the process closes while being closed } - TestBase.DeleteTempFolder(AppData); + if (delete) + { + TestBase.DeleteTempFolder(AppData); + } } private void Start(string outputRadarrConsoleExe)