Files
duplicati/Duplicati/UnitTest/Issue6425.cs
T
Kenneth Skovhede 4a598019a8 Fixed purge size calculation.
This fixes the size calculation on purge to only include blocks once, and not include blocks that are still referenced elsewhere.
2026-01-30 16:08:39 +01:00

51 lines
1.8 KiB
C#

using System;
using System.IO;
using System.Linq;
using NUnit.Framework;
using Assert = NUnit.Framework.Legacy.ClassicAssert;
namespace Duplicati.UnitTest
{
public class Issue6425 : BasicSetupHelper
{
[Test]
[Category("Purge")]
public void TestPurgeFileSizeCalculationWithSharedBlocks()
{
var blocksize = 1024 * 10; // 10KB blocks
var testopts = TestOptions;
testopts["blocksize"] = blocksize + "b";
testopts["no-backend-verification"] = "true";
var sharedContent = new byte[blocksize * 2];
new Random(42).NextBytes(sharedContent);
var file1 = Path.Combine(DATAFOLDER, "file1.dat");
var file2 = Path.Combine(DATAFOLDER, "file2.dat");
File.WriteAllBytes(file1, sharedContent);
File.WriteAllBytes(file2, sharedContent);
using (var c = new Library.Main.Controller("file://" + TARGETFOLDER, testopts, null))
{
var res = c.Backup(new[] { DATAFOLDER });
Assert.AreEqual(0, res.Errors.Count());
}
using (var c = new Library.Main.Controller("file://" + TARGETFOLDER, testopts, null))
{
var purgeResult = c.PurgeFiles(new Duplicati.Library.Utility.FilterExpression(new[] { file1 }));
Assert.AreEqual(0, purgeResult.Errors.Count());
Console.WriteLine($"Reported RemovedFileSize: {purgeResult.RemovedFileSize}");
Console.WriteLine($"File size: {sharedContent.Length}");
Assert.Less(purgeResult.RemovedFileSize, sharedContent.Length,
"RemovedFileSize should not count blocks still referenced by other files");
}
}
}
}