diff options
Diffstat (limited to 'Duplicati/UnitTest')
-rw-r--r-- | Duplicati/UnitTest/ControllerTests.cs | 95 | ||||
-rw-r--r-- | Duplicati/UnitTest/Duplicati.UnitTest.csproj | 1 |
2 files changed, 96 insertions, 0 deletions
diff --git a/Duplicati/UnitTest/ControllerTests.cs b/Duplicati/UnitTest/ControllerTests.cs new file mode 100644 index 000000000..c50582928 --- /dev/null +++ b/Duplicati/UnitTest/ControllerTests.cs @@ -0,0 +1,95 @@ +using System.Collections.Generic; +using System.IO; +using System.Linq; +using Duplicati.Library.Interface; +using Duplicati.Library.Main; +using NUnit.Framework; + +namespace Duplicati.UnitTest +{ + public class ControllerTests : BasicSetupHelper + { + [Test] + [Category("Controller")] + public void DeleteAllRemoteFiles() + { + string filePath = Path.Combine(this.DATAFOLDER, "file"); + File.WriteAllBytes(filePath, new byte[] {0, 1, 2}); + + Dictionary<string, string> firstOptions = new Dictionary<string, string>(this.TestOptions); + using (Controller c = new Controller("file://" + this.TARGETFOLDER, firstOptions, null)) + { + IBackupResults backupResults = c.Backup(new[] {this.DATAFOLDER}); + Assert.AreEqual(0, backupResults.Errors.Count()); + Assert.AreEqual(0, backupResults.Warnings.Count()); + } + + // Keep track of the backend files from the first backup configuration so that we can + // check that they remain after we remove the backend files from the second backup + // configuration. + string[] firstBackupFiles = Directory.GetFiles(this.TARGETFOLDER); + Assert.Greater(firstBackupFiles.Length, 0); + + Dictionary<string, string> secondOptions = new Dictionary<string, string>(this.TestOptions) + { + ["dbpath"] = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName()) + }; + using (Controller c = new Controller("file://" + this.TARGETFOLDER, secondOptions, null)) + { + // An exception should be thrown due to unrecognized files in the target folder. + // ReSharper disable once AccessToDisposedClosure + Assert.That(() => c.Backup(new[] {this.DATAFOLDER}), Throws.Exception); + } + + // We should be able to safely remove backend files from the second backup by referring + // to the local database. + using (Controller c = new Controller("file://" + this.TARGETFOLDER, secondOptions, null)) + { + IListRemoteResults listResults = c.DeleteAllRemoteFiles(); + Assert.AreEqual(0, listResults.Errors.Count()); + Assert.AreEqual(0, listResults.Warnings.Count()); + } + + // After we delete backend files from the second backup configuration, those from the first + // configuration should remain (see issues #3845, and #4244). + foreach (string file in firstBackupFiles) + { + Assert.IsTrue(File.Exists(file)); + } + + // Configure and run a second backup with a different prefix. This should run without error. + secondOptions["prefix"] = new Options(firstOptions).Prefix + "2"; + using (Controller c = new Controller("file://" + this.TARGETFOLDER, secondOptions, null)) + { + IBackupResults backupResults = c.Backup(new[] {this.DATAFOLDER}); + Assert.AreEqual(0, backupResults.Errors.Count()); + Assert.AreEqual(0, backupResults.Warnings.Count()); + } + + // Even without a local database, we should be able to safely remove backend files from + // the second backup due to the prefix. + File.Delete(secondOptions["dbpath"]); + using (Controller c = new Controller("file://" + this.TARGETFOLDER, secondOptions, null)) + { + IListRemoteResults listResults = c.DeleteAllRemoteFiles(); + Assert.AreEqual(0, listResults.Errors.Count()); + Assert.AreEqual(0, listResults.Warnings.Count()); + } + + // After we delete backend files from the second backup configuration, those from the first + // configuration should remain (see issue #2678). + foreach (string file in firstBackupFiles) + { + Assert.IsTrue(File.Exists(file)); + } + + // The first backup configuration should still run normally. + using (Controller c = new Controller("file://" + this.TARGETFOLDER, firstOptions, null)) + { + IBackupResults backupResults = c.Backup(new[] {this.DATAFOLDER}); + Assert.AreEqual(0, backupResults.Errors.Count()); + Assert.AreEqual(0, backupResults.Warnings.Count()); + } + } + } +}
\ No newline at end of file diff --git a/Duplicati/UnitTest/Duplicati.UnitTest.csproj b/Duplicati/UnitTest/Duplicati.UnitTest.csproj index 699294732..6c9a2a8b2 100644 --- a/Duplicati/UnitTest/Duplicati.UnitTest.csproj +++ b/Duplicati/UnitTest/Duplicati.UnitTest.csproj @@ -44,6 +44,7 @@ <Reference Include="System.IO.Compression.FileSystem" />
</ItemGroup>
<ItemGroup>
+ <Compile Include="ControllerTests.cs" />
<Compile Include="DeleteHandlerTests.cs" />
<Compile Include="DisruptionTests.cs" />
<Compile Include="ProblematicPathTests.cs" />
|