Skip to content

Commit

Permalink
Merge branch 'develop'
Browse files Browse the repository at this point in the history
bezzad committed Jan 29, 2023
2 parents 96de63f + e10c31c commit bbc8e9b
Showing 2 changed files with 108 additions and 2 deletions.
104 changes: 104 additions & 0 deletions src/Downloader.Test/IntegrationTests/DownloadServiceTest.cs
Original file line number Diff line number Diff line change
@@ -482,6 +482,110 @@ public async Task TestPackageStatusAfterCompletionWithSuccess()
Assert.AreEqual(DownloadStatus.Completed, completedStatus);
}

[TestMethod]
public async Task TestSerializePackageAfterCancelOnMemory()
{
await TestSerializePackageAfterCancel(true);
}

[TestMethod]
public async Task TestSerializePackageAfterCancelOnFile()
{
await TestSerializePackageAfterCancel(false);
}

public async Task TestSerializePackageAfterCancel(bool onMemory)
{
// arrange
var path = Path.GetTempFileName();
DownloadPackage package = null;
var packageText = string.Empty;
var url = DummyFileHelper.GetFileUrl(DummyFileHelper.FileSize16Kb);
Options = GetDefaultConfig();
ChunkDownloadProgressChanged += (s, e) => CancelAsync();
DownloadFileCompleted += (s, e) => {
package = e.UserState as DownloadPackage;
if (package!.Status != DownloadStatus.Completed)
packageText = System.Text.Json.JsonSerializer.Serialize(package!);
};

// act
if (onMemory)
{
await DownloadFileTaskAsync(url).ConfigureAwait(false);
}
else
{
await DownloadFileTaskAsync(url, path).ConfigureAwait(false);
}

// assert
Assert.IsTrue(IsCancelled);
Assert.IsNotNull(package);
Assert.IsFalse(string.IsNullOrWhiteSpace(packageText));

Cleanup();
}


[TestMethod]
public async Task TestResumeFromSerializedPackageOnMemory()
{
await TestResumeFromSerializedPackage(true);
}

[TestMethod]
public async Task TestResumeFromSerializedPackageOnFile()
{
await TestResumeFromSerializedPackage(false);
}

public async Task TestResumeFromSerializedPackage(bool onMemory)
{
// arrange
var isCancelOccurred = false;
var path = Path.GetTempFileName();
DownloadPackage package = null;
var packageText = string.Empty;
var url = DummyFileHelper.GetFileUrl(DummyFileHelper.FileSize16Kb);
Options = GetDefaultConfig();
ChunkDownloadProgressChanged += (s, e) => {
if (isCancelOccurred == false)
{
isCancelOccurred = true;
CancelAsync();
}
};
DownloadFileCompleted += (s, e) => {
package = e.UserState as DownloadPackage;
if (package!.Status != DownloadStatus.Completed)
packageText = System.Text.Json.JsonSerializer.Serialize(package!);
};

// act
if (onMemory)
{
await DownloadFileTaskAsync(url).ConfigureAwait(false);
}
else
{
await DownloadFileTaskAsync(url, path).ConfigureAwait(false);
}

// resume act
var reversedPackage = System.Text.Json.JsonSerializer.Deserialize<DownloadPackage>(packageText);
await DownloadFileTaskAsync(reversedPackage).ConfigureAwait(false);

// assert
Assert.IsFalse(IsCancelled);
Assert.IsNotNull(package);
Assert.IsNotNull(reversedPackage);
Assert.IsTrue(reversedPackage.IsSaveComplete);
Assert.IsFalse(string.IsNullOrWhiteSpace(packageText));

Cleanup();
}

[TestMethod]
public async Task TestPackageStatusAfterCancellation()
{
6 changes: 4 additions & 2 deletions src/Downloader/DownloadService.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using System;
using System;
using System.ComponentModel;
using System.IO;
using System.Linq;
@@ -334,12 +334,13 @@ private void OnDownloadFileCompleted(AsyncCompletedEventArgs e)
if (e.Cancelled)
{
Status = DownloadStatus.Stopped;
}
}
else if (e.Error != null)
{
if (Options.ClearPackageOnCompletionWithFailure)
{
Package.Storage?.Dispose();
Package.Storage = null;
Package.Clear();
if (Package.InMemoryStream == false)
File.Delete(Package.FileName);
@@ -353,6 +354,7 @@ private void OnDownloadFileCompleted(AsyncCompletedEventArgs e)
if (Package.InMemoryStream == false)
{
Package.Storage?.Dispose();
Package.Storage = null;
}

DownloadFileCompleted?.Invoke(this, e);

0 comments on commit bbc8e9b

Please sign in to comment.