public void ReturnsFalseWhenPreviousTransmissionExceedsCapacity() { StubPlatformFolder folder = CreateFolder(); var provider = new StubApplicationFolderProvider { OnGetApplicationFolder = () => folder }; var storage = new TransmissionStorage { Capacity = 10 }; storage.Initialize(provider); bool firstTransmissionSaved = storage.Enqueue(() => new Transmission(new Uri("any://address"), new byte[42], string.Empty, string.Empty)); bool secondTransmissionSaved = storage.Enqueue(() => new Transmission(new Uri("any://address"), new byte[42], string.Empty, string.Empty)); Assert.True(firstTransmissionSaved); Assert.False(secondTransmissionSaved); }
public void HandlesFileNotFoundExceptionThrownWhenCalculatingSizeBecauseTransmissionHasAlreadyBeenDequeued() { var file = new StubPlatformFile(); file.OnGetName = () => "Dequeued" + TransmissionStorage.TransmissionFileExtension; file.OnGetLength = () => { throw new FileNotFoundException(); }; StubPlatformFolder folder = CreateFolder(file); var provider = new StubApplicationFolderProvider { OnGetApplicationFolder = () => folder }; var storage = new TransmissionStorage(); storage.Initialize(provider); bool transmissionEnqueued = storage.Enqueue(() => new StubTransmission()); Assert.True(transmissionEnqueued); }
public void ChangesTransmissionFileExtensionToTemporaryToPreventConflictsWithOtherThreads() { string temporaryFileName = null; StubPlatformFile file = CreateTransmissionFile(); file.OnRename = desiredName => temporaryFileName = desiredName; StubPlatformFolder folder = CreateFolder(file); var provider = new StubApplicationFolderProvider { OnGetApplicationFolder = () => folder }; var storage = new TransmissionStorage(); storage.Initialize(provider); storage.Dequeue(); Assert.True(temporaryFileName.EndsWith(TransmissionStorage.TemporaryFileExtension, StringComparison.OrdinalIgnoreCase)); }
public void DeletesTemporaryFileAfterLoadingToFreeDiskSpace() { bool fileDeleted = false; StubPlatformFile file = CreateTransmissionFile(); file.OnDelete = () => fileDeleted = true; StubPlatformFolder folder = CreateFolder(file); var provider = new StubApplicationFolderProvider { OnGetApplicationFolder = () => folder }; var storage = new TransmissionStorage(); storage.Initialize(provider); storage.Dequeue(); Assert.True(fileDeleted); }
public void ChangesTemporaryExtensionToPermanentToMakeFileAvailableForDequeueAsync() { string permanentFileName = null; StubPlatformFile file = CreateFile("TemporaryFile"); file.OnRename = desiredName => permanentFileName = desiredName; var folder = new StubPlatformFolder { OnCreateFile = fileName => file }; var provider = new StubApplicationFolderProvider { OnGetApplicationFolder = () => folder }; var storage = new TransmissionStorage(provider); storage.Enqueue(() => new StubTransmission()); Assert.True(permanentFileName.EndsWith(TransmissionStorage.TransmissionFileExtension, StringComparison.OrdinalIgnoreCase)); }
public void ReturnsFalseDoesNotEnqueueIfProcessHasNoRightToListFilesInApplicationFolder() { var folder = new StubPlatformFolder { OnGetFiles = () => { throw new UnauthorizedAccessException(); } }; var provider = new StubApplicationFolderProvider { OnGetApplicationFolder = () => folder }; var storage = new TransmissionStorage(); storage.Initialize(provider); storage.Enqueue(() => new StubTransmission()); bool result = storage.Enqueue(() => new StubTransmission()); Assert.False(result); }
public void ReturnsFalseIfProcessHasNoRightToWriteToFilesInApplicationFolder() { var file = new StubPlatformFile { OnOpen = () => { throw new UnauthorizedAccessException(); } }; var folder = new StubPlatformFolder { OnCreateFile = name => file }; var provider = new StubApplicationFolderProvider { OnGetApplicationFolder = () => folder }; var storage = new TransmissionStorage(); storage.Initialize(provider); bool result = storage.Enqueue(() => new StubTransmission()); Assert.IsFalse(result); }
public void GetsMultipleFilesFromFolderOnceAndCachesThemToReduceDiskAccess() { int numberOfGetFilesAsyncCalls = 0; var files = new StubPlatformFile[] { CreateTransmissionFile(), CreateTransmissionFile() }; var folder = new StubPlatformFolder(); folder.OnGetFiles = () => { numberOfGetFilesAsyncCalls += 1; return(files); }; var provider = new StubApplicationFolderProvider { OnGetApplicationFolder = () => folder }; var storage = new TransmissionStorage(provider); Assert.NotNull(storage.Dequeue()); Assert.NotNull(storage.Dequeue()); Assert.Equal(2, numberOfGetFilesAsyncCalls); // 1 for initializing size and 1 for 1 dequeue }
public void CreatesNewFileWithTemporaryExtensionToPreventConflictsWithDequeueAsync() { string temporaryFileName = null; var folder = new StubPlatformFolder { OnCreateFile = fileName => { temporaryFileName = fileName; return(new StubPlatformFile()); } }; var provider = new StubApplicationFolderProvider { OnGetApplicationFolder = () => folder }; var storage = new TransmissionStorage(provider); storage.Enqueue(() => new StubTransmission()); Assert.True(temporaryFileName.EndsWith(TransmissionStorage.TemporaryFileExtension, StringComparison.OrdinalIgnoreCase)); }
public void ClosesFileStreamToEnsureFileCanBeDeleted() { bool fileStreamDisposed = false; var fileStream = new StubStream { OnDispose = disposing => fileStreamDisposed = true }; StubPlatformFile file = CreateFile("TestFile" + TransmissionStorage.TransmissionFileExtension, fileStream); bool fileStreamDisposedBeforeDeletion = false; file.OnDelete = () => fileStreamDisposedBeforeDeletion = fileStreamDisposed; StubPlatformFolder folder = CreateFolder(file); var provider = new StubApplicationFolderProvider { OnGetApplicationFolder = () => folder }; var storage = new TransmissionStorage(provider); storage.Dequeue(); Assert.True(fileStreamDisposedBeforeDeletion); }
public void ClosesFileStreamToEnsureChangesAreCommittedToDisk() { bool fileStreamDisposed = false; var fileStream = new StubStream { OnDispose = disposing => fileStreamDisposed = true }; var file = new StubPlatformFile { OnOpen = () => fileStream }; var folder = new StubPlatformFolder { OnCreateFile = fileName => file }; var provider = new StubApplicationFolderProvider { OnGetApplicationFolder = () => folder }; var storage = new TransmissionStorage(provider); storage.Enqueue(() => new StubTransmission()); Assert.True(fileStreamDisposed); }
public void CreatesFilesWithUniqueNamesToPreventConflictsWithOtherThreads() { var actualFileNames = new List <string>(); var folder = new StubPlatformFolder { OnCreateFile = fileName => { actualFileNames.Add(fileName); return(new StubPlatformFile()); } }; var provider = new StubApplicationFolderProvider { OnGetApplicationFolder = () => folder }; var storage = new TransmissionStorage(provider); storage.Enqueue(() => new StubTransmission()); storage.Enqueue(() => new StubTransmission()); Assert.NotEqual(actualFileNames[0], actualFileNames[1]); }
public void DeletesStoredFilesOlderThanTwoDays() { var files = new List <IPlatformFile>(); StubPlatformFile oldFile = CreateTransmissionFile(); oldFile.OnGetDateCreated = () => DateTimeOffset.Now.AddHours(-49); oldFile.OnDelete = () => files.Remove(oldFile); files.Add(oldFile); var folder = new StubPlatformFolder { OnGetFiles = () => files }; var provider = new StubApplicationFolderProvider { OnGetApplicationFolder = () => folder }; var storage = new TransmissionStorage(); storage.Initialize(provider); Transmission dequeued = storage.Dequeue(); Assert.IsNull(dequeued); }