mirror of
https://github.com/rmcrackan/Libation.git
synced 2026-06-25 07:59:41 -04:00
130 lines
4.4 KiB
C#
130 lines
4.4 KiB
C#
using LibationFileManager;
|
|
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
|
using System;
|
|
using System.IO;
|
|
|
|
namespace LibationFileManager.Tests;
|
|
|
|
[TestClass]
|
|
public class DiskSpaceHelperTests
|
|
{
|
|
[TestMethod]
|
|
public void IsDiskFullException_detects_message()
|
|
{
|
|
var ex = new IOException("There is not enough space on the disk. : 'C:\\temp\\x.aaxc'.");
|
|
Assert.IsTrue(DiskSpaceHelper.IsDiskFullException(ex));
|
|
}
|
|
|
|
[TestMethod]
|
|
public void IsDiskFullException_detects_message_in_aggregate()
|
|
{
|
|
var inner = new IOException("Failed to create file because the disk was full.");
|
|
var ex = new AggregateException(inner);
|
|
Assert.IsTrue(DiskSpaceHelper.IsDiskFullException(ex));
|
|
}
|
|
|
|
[TestMethod]
|
|
public void ErrorMessageIndicatesDiskFull_matches_common_phrases()
|
|
{
|
|
Assert.IsTrue(DiskSpaceHelper.ErrorMessageIndicatesDiskFull("There is not enough space on the disk. : 'C:\\temp\\x.aaxc'."));
|
|
Assert.IsTrue(DiskSpaceHelper.ErrorMessageIndicatesDiskFull("Write failed: disk quota has been exceeded."));
|
|
Assert.IsTrue(DiskSpaceHelper.ErrorMessageIndicatesDiskFull("No space left on device"));
|
|
Assert.IsFalse(DiskSpaceHelper.ErrorMessageIndicatesDiskFull("Unable to read beyond the end of the stream."));
|
|
}
|
|
|
|
[TestMethod]
|
|
[OSCondition(OperatingSystems.Windows)]
|
|
public void Windows_NormalizePathForDriveQuery_strips_extended_prefix()
|
|
{
|
|
Assert.AreEqual(@"C:\Audiobooks\Books", DiskSpaceHelper.NormalizePathForDriveQuery(@"\\?\C:\Audiobooks\Books"));
|
|
Assert.AreEqual(@"\\server\share\Books", DiskSpaceHelper.NormalizePathForDriveQuery(@"\\?\UNC\server\share\Books"));
|
|
}
|
|
|
|
[TestMethod]
|
|
[OSCondition(OperatingSystems.Windows)]
|
|
public void Windows_GetPathRootForDiskSpaceCheck_strips_extended_prefix()
|
|
{
|
|
Assert.AreEqual(@"C:\", DiskSpaceHelper.GetPathRootForDiskSpaceCheck(@"\\?\C:\Audiobooks\Books"));
|
|
}
|
|
|
|
[TestMethod]
|
|
public void GetPathRootForDiskSpaceCheck_unix_absolute_path()
|
|
{
|
|
if (OperatingSystem.IsWindows())
|
|
Assert.Inconclusive("Skipped because OS is Windows.");
|
|
|
|
Assert.AreEqual("/", DiskSpaceHelper.GetPathRootForDiskSpaceCheck("/home/user/Libation/Books"));
|
|
}
|
|
|
|
[TestMethod]
|
|
public void GetRequiredBytesForDriveUsage_uses_batch_for_books_only()
|
|
{
|
|
const int bookCount = 500;
|
|
var expected = bookCount * DiskSpaceHelper.EstimatedBytesPerAudiobookBackup;
|
|
|
|
Assert.AreEqual(expected, DiskSpaceHelper.GetRequiredBytesForDriveUsage(DiskSpaceHelper.BackupDriveUsage.Books, bookCount));
|
|
Assert.AreEqual(
|
|
expected,
|
|
DiskSpaceHelper.GetRequiredBytesForDriveUsage(DiskSpaceHelper.BackupDriveUsage.Books | DiskSpaceHelper.BackupDriveUsage.InProgress, bookCount));
|
|
}
|
|
|
|
[TestMethod]
|
|
public void GetRequiredBytesForDriveUsage_uses_single_title_for_in_progress_only()
|
|
{
|
|
Assert.AreEqual(
|
|
DiskSpaceHelper.EstimatedBytesPerAudiobookBackup,
|
|
DiskSpaceHelper.GetRequiredBytesForDriveUsage(DiskSpaceHelper.BackupDriveUsage.InProgress, 500));
|
|
}
|
|
|
|
[TestMethod]
|
|
public void GetCriticalFreeBytesForDriveUsage_in_progress_requires_one_title_plus_margin()
|
|
{
|
|
Assert.AreEqual(
|
|
DiskSpaceHelper.EstimatedBytesPerAudiobookBackup + DiskSpaceHelper.InProgressPreflightMarginBytes,
|
|
DiskSpaceHelper.GetCriticalFreeBytesForDriveUsage(DiskSpaceHelper.BackupDriveUsage.InProgress));
|
|
|
|
Assert.AreEqual(
|
|
DiskSpaceHelper.CriticalFreeBytes,
|
|
DiskSpaceHelper.GetCriticalFreeBytesForDriveUsage(DiskSpaceHelper.BackupDriveUsage.Books));
|
|
}
|
|
|
|
[TestMethod]
|
|
public void HasSufficientSpaceForBulkBackup_in_progress_not_judged_by_batch_estimate()
|
|
{
|
|
var drives = new[]
|
|
{
|
|
new DiskSpaceHelper.BackupDriveSpace(
|
|
@"D:\",
|
|
[@"D:\Books"],
|
|
500L * 1024 * 1024 * 1024,
|
|
500L * DiskSpaceHelper.EstimatedBytesPerAudiobookBackup,
|
|
DiskSpaceHelper.BackupDriveUsage.Books),
|
|
new DiskSpaceHelper.BackupDriveSpace(
|
|
@"C:\",
|
|
[@"C:\Temp\Libation-user"],
|
|
600L * 1024 * 1024,
|
|
DiskSpaceHelper.EstimatedBytesPerAudiobookBackup,
|
|
DiskSpaceHelper.BackupDriveUsage.InProgress),
|
|
};
|
|
|
|
Assert.IsTrue(DiskSpaceHelper.HasSufficientSpaceForBulkBackup(drives));
|
|
}
|
|
|
|
[TestMethod]
|
|
public void AnyDriveCriticallyLow_in_progress_uses_single_title_threshold()
|
|
{
|
|
var drives = new[]
|
|
{
|
|
new DiskSpaceHelper.BackupDriveSpace(
|
|
@"C:\",
|
|
[@"C:\Temp\Libation-user"],
|
|
200L * 1024 * 1024,
|
|
DiskSpaceHelper.EstimatedBytesPerAudiobookBackup,
|
|
DiskSpaceHelper.BackupDriveUsage.InProgress),
|
|
};
|
|
|
|
Assert.IsTrue(DiskSpaceHelper.AnyDriveCriticallyLow(drives));
|
|
Assert.IsFalse(DiskSpaceHelper.HasSufficientSpaceForBulkBackup(drives));
|
|
}
|
|
}
|