Fix download exceptions when ignoring errors (#853)

pull/856/head v3.0.0-alpha.10
Next Turn 2021-08-09 13:35:37 +08:00 committed by GitHub
parent b774ee1ca5
commit 71f08e5e73
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 11 additions and 31 deletions

View File

@ -193,10 +193,14 @@ namespace WinSW
if (supportsIfModifiedSince && ((HttpWebResponse?)e.Response)?.StatusCode == HttpStatusCode.NotModified)
{
Logger.Info($"Skipped downloading unmodified resource '{this.From}'");
return;
}
else
string errorMessage = $"Failed to download {this.From} to {this.To}";
Logger.Error(errorMessage, e);
if (this.FailOnError)
{
throw;
throw new IOException(errorMessage, e);
}
}
}

View File

@ -272,32 +272,7 @@ namespace WinSW
tasks[i] = download.PerformAsync();
}
try
{
Task.WaitAll(tasks);
}
catch (AggregateException e)
{
var exceptions = new List<Exception>(e.InnerExceptions.Count);
for (int i = 0; i < tasks.Length; i++)
{
if (tasks[i].IsFaulted)
{
var download = downloads[i];
string errorMessage = $"Failed to download {download.From} to {download.To}";
var exception = tasks[i].Exception!;
Log.Error(errorMessage, exception);
// TODO: move this code into the download logic
if (download.FailOnError)
{
exceptions.Add(new IOException(errorMessage, exception));
}
}
}
throw new AggregateException(exceptions);
}
Task.WaitAll(tasks);
var sharedDirectories = this.config.SharedDirectories;
if (sharedDirectories.Count > 0)

View File

@ -210,10 +210,11 @@ namespace WinSW.Tests
await this.TestClientServerAsync(
async (source, dest) =>
{
var exception = await Assert.ThrowsAsync<WebException>(
async () => await new Download(source, dest).PerformAsync());
var exception = await Assert.ThrowsAsync<IOException>(
async () => await new Download(source, dest, true).PerformAsync());
Assert.Equal(WebExceptionStatus.ProtocolError, exception.Status);
var inner = Assert.IsType<WebException>(exception.InnerException);
Assert.Equal(WebExceptionStatus.ProtocolError, inner.Status);
},
context =>
{