Detailed errors enabled for functional tests (#1822)
This commit is contained in:
parent
e9d58154ec
commit
6640f14e35
|
|
@ -24,7 +24,10 @@ namespace FunctionalTests
|
||||||
public void ConfigureServices(IServiceCollection services)
|
public void ConfigureServices(IServiceCollection services)
|
||||||
{
|
{
|
||||||
services.AddConnections();
|
services.AddConnections();
|
||||||
services.AddSignalR()
|
services.AddSignalR(options =>
|
||||||
|
{
|
||||||
|
options.EnableDetailedErrors = true;
|
||||||
|
})
|
||||||
.AddJsonProtocol(options =>
|
.AddJsonProtocol(options =>
|
||||||
{
|
{
|
||||||
// we are running the same tests with JSON and MsgPack protocols and having
|
// we are running the same tests with JSON and MsgPack protocols and having
|
||||||
|
|
|
||||||
|
|
@ -125,7 +125,7 @@ describe("hubConnection", () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
it("rethrows an exception from the server when invoking", (done) => {
|
it("rethrows an exception from the server when invoking", (done) => {
|
||||||
const errorMessage = "An unexpected error occurred invoking 'ThrowException' on the server.";
|
const errorMessage = "An unexpected error occurred invoking 'ThrowException' on the server. InvalidOperationException: An error occurred.";
|
||||||
const hubConnection = new HubConnection(TESTHUBENDPOINT_URL, {
|
const hubConnection = new HubConnection(TESTHUBENDPOINT_URL, {
|
||||||
logger: TestLogger.instance,
|
logger: TestLogger.instance,
|
||||||
protocol,
|
protocol,
|
||||||
|
|
@ -198,7 +198,7 @@ describe("hubConnection", () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
it("rethrows an exception from the server when streaming", (done) => {
|
it("rethrows an exception from the server when streaming", (done) => {
|
||||||
const errorMessage = "An unexpected error occurred invoking 'StreamThrowException' on the server.";
|
const errorMessage = "An unexpected error occurred invoking 'StreamThrowException' on the server. InvalidOperationException: An error occurred.";
|
||||||
const hubConnection = new HubConnection(TESTHUBENDPOINT_URL, {
|
const hubConnection = new HubConnection(TESTHUBENDPOINT_URL, {
|
||||||
logger: TestLogger.instance,
|
logger: TestLogger.instance,
|
||||||
protocol,
|
protocol,
|
||||||
|
|
@ -353,7 +353,7 @@ describe("hubConnection", () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
hubConnection.onclose((error) => {
|
hubConnection.onclose((error) => {
|
||||||
expect(error.message).toEqual("Server returned an error on close: Connection closed with an error.");
|
expect(error.message).toEqual("Server returned an error on close: Connection closed with an error. InvalidOperationException: Unable to resolve service for type 'System.Object' while attempting to activate 'FunctionalTests.UncreatableHub'.");
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
hubConnection.start();
|
hubConnection.start();
|
||||||
|
|
|
||||||
|
|
@ -184,7 +184,7 @@ namespace Microsoft.AspNetCore.SignalR.Internal.Protocol
|
||||||
hasResult = false;
|
hasResult = false;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
throw new FormatException("Invalid invocation result kind.");
|
throw new InvalidDataException("Invalid invocation result kind.");
|
||||||
}
|
}
|
||||||
|
|
||||||
return ApplyHeaders(headers, new CompletionMessage(invocationId, error, result, hasResult));
|
return ApplyHeaders(headers, new CompletionMessage(invocationId, error, result, hasResult));
|
||||||
|
|
@ -231,7 +231,7 @@ namespace Microsoft.AspNetCore.SignalR.Internal.Protocol
|
||||||
|
|
||||||
if (parameterTypes.Count != argumentCount)
|
if (parameterTypes.Count != argumentCount)
|
||||||
{
|
{
|
||||||
throw new FormatException(
|
throw new InvalidDataException(
|
||||||
$"Invocation provides {argumentCount} argument(s) but target expects {parameterTypes.Count}.");
|
$"Invocation provides {argumentCount} argument(s) but target expects {parameterTypes.Count}.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -247,7 +247,7 @@ namespace Microsoft.AspNetCore.SignalR.Internal.Protocol
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
throw new FormatException("Error binding arguments. Make sure that the types of the provided values match the types of the hub method being invoked.", ex);
|
throw new InvalidDataException("Error binding arguments. Make sure that the types of the provided values match the types of the hub method being invoked.", ex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -304,7 +304,7 @@ namespace Microsoft.AspNetCore.SignalR.Internal.Protocol
|
||||||
WriteCloseMessage(closeMessage, packer);
|
WriteCloseMessage(closeMessage, packer);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
throw new FormatException($"Unexpected message type: {message.GetType().Name}");
|
throw new InvalidDataException($"Unexpected message type: {message.GetType().Name}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -435,7 +435,7 @@ namespace Microsoft.AspNetCore.SignalR.Internal.Protocol
|
||||||
msgPackException = e;
|
msgPackException = e;
|
||||||
}
|
}
|
||||||
|
|
||||||
throw new FormatException($"Reading '{field}' as Int32 failed.", msgPackException);
|
throw new InvalidDataException($"Reading '{field}' as Int32 failed.", msgPackException);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static string ReadString(Unpacker unpacker, string field)
|
private static string ReadString(Unpacker unpacker, string field)
|
||||||
|
|
@ -460,7 +460,7 @@ namespace Microsoft.AspNetCore.SignalR.Internal.Protocol
|
||||||
msgPackException = e;
|
msgPackException = e;
|
||||||
}
|
}
|
||||||
|
|
||||||
throw new FormatException($"Reading '{field}' as String failed.", msgPackException);
|
throw new InvalidDataException($"Reading '{field}' as String failed.", msgPackException);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static bool ReadBoolean(Unpacker unpacker, string field)
|
private static bool ReadBoolean(Unpacker unpacker, string field)
|
||||||
|
|
@ -478,7 +478,7 @@ namespace Microsoft.AspNetCore.SignalR.Internal.Protocol
|
||||||
msgPackException = e;
|
msgPackException = e;
|
||||||
}
|
}
|
||||||
|
|
||||||
throw new FormatException($"Reading '{field}' as Boolean failed.", msgPackException);
|
throw new InvalidDataException($"Reading '{field}' as Boolean failed.", msgPackException);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static long ReadMapLength(Unpacker unpacker, string field)
|
private static long ReadMapLength(Unpacker unpacker, string field)
|
||||||
|
|
@ -496,7 +496,7 @@ namespace Microsoft.AspNetCore.SignalR.Internal.Protocol
|
||||||
msgPackException = e;
|
msgPackException = e;
|
||||||
}
|
}
|
||||||
|
|
||||||
throw new FormatException($"Reading map length for '{field}' failed.", msgPackException);
|
throw new InvalidDataException($"Reading map length for '{field}' failed.", msgPackException);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static long ReadArrayLength(Unpacker unpacker, string field)
|
private static long ReadArrayLength(Unpacker unpacker, string field)
|
||||||
|
|
@ -514,7 +514,7 @@ namespace Microsoft.AspNetCore.SignalR.Internal.Protocol
|
||||||
msgPackException = e;
|
msgPackException = e;
|
||||||
}
|
}
|
||||||
|
|
||||||
throw new FormatException($"Reading array length for '{field}' failed.", msgPackException);
|
throw new InvalidDataException($"Reading array length for '{field}' failed.", msgPackException);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static object DeserializeObject(Unpacker unpacker, Type type, string field)
|
private static object DeserializeObject(Unpacker unpacker, Type type, string field)
|
||||||
|
|
@ -533,7 +533,7 @@ namespace Microsoft.AspNetCore.SignalR.Internal.Protocol
|
||||||
msgPackException = ex;
|
msgPackException = ex;
|
||||||
}
|
}
|
||||||
|
|
||||||
throw new FormatException($"Deserializing object of the `{type.Name}` type for '{field}' failed.", msgPackException);
|
throw new InvalidDataException($"Deserializing object of the `{type.Name}` type for '{field}' failed.", msgPackException);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static SerializationContext CreateDefaultSerializationContext()
|
internal static SerializationContext CreateDefaultSerializationContext()
|
||||||
|
|
|
||||||
|
|
@ -415,7 +415,7 @@ namespace Microsoft.AspNetCore.SignalR.Client.FunctionalTests
|
||||||
var channel = await connection.StreamAsChannelAsync<int>("StreamException").OrTimeout();
|
var channel = await connection.StreamAsChannelAsync<int>("StreamException").OrTimeout();
|
||||||
|
|
||||||
var ex = await Assert.ThrowsAsync<HubException>(() => channel.ReadAllAsync().OrTimeout());
|
var ex = await Assert.ThrowsAsync<HubException>(() => channel.ReadAllAsync().OrTimeout());
|
||||||
Assert.Equal("An unexpected error occurred invoking 'StreamException' on the server.", ex.Message);
|
Assert.Equal("An unexpected error occurred invoking 'StreamException' on the server. InvalidOperationException: Error occurred while streaming.", ex.Message);
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
|
|
@ -469,7 +469,7 @@ namespace Microsoft.AspNetCore.SignalR.Client.FunctionalTests
|
||||||
await connection.StartAsync().OrTimeout();
|
await connection.StartAsync().OrTimeout();
|
||||||
|
|
||||||
var ex = await Assert.ThrowsAsync<HubException>(() => connection.InvokeAsync("Echo", "p1", 42)).OrTimeout();
|
var ex = await Assert.ThrowsAsync<HubException>(() => connection.InvokeAsync("Echo", "p1", 42)).OrTimeout();
|
||||||
Assert.Equal("Failed to invoke 'Echo' due to an error on the server.", ex.Message);
|
Assert.Equal("Failed to invoke 'Echo' due to an error on the server. InvalidDataException: Invocation provides 2 argument(s) but target expects 1.", ex.Message);
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
|
|
@ -553,7 +553,7 @@ namespace Microsoft.AspNetCore.SignalR.Client.FunctionalTests
|
||||||
|
|
||||||
var channel = await connection.StreamAsChannelAsync<int>("Stream", 42, 42);
|
var channel = await connection.StreamAsChannelAsync<int>("Stream", 42, 42);
|
||||||
var ex = await Assert.ThrowsAsync<HubException>(() => channel.ReadAllAsync().OrTimeout());
|
var ex = await Assert.ThrowsAsync<HubException>(() => channel.ReadAllAsync().OrTimeout());
|
||||||
Assert.Equal("Failed to invoke 'Stream' due to an error on the server.", ex.Message);
|
Assert.Equal("Failed to invoke 'Stream' due to an error on the server. InvalidDataException: Invocation provides 2 argument(s) but target expects 1.", ex.Message);
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
|
|
@ -581,7 +581,7 @@ namespace Microsoft.AspNetCore.SignalR.Client.FunctionalTests
|
||||||
|
|
||||||
var channel = await connection.StreamAsChannelAsync<int>("Stream", "xyz");
|
var channel = await connection.StreamAsChannelAsync<int>("Stream", "xyz");
|
||||||
var ex = await Assert.ThrowsAsync<HubException>(() => channel.ReadAllAsync().OrTimeout());
|
var ex = await Assert.ThrowsAsync<HubException>(() => channel.ReadAllAsync().OrTimeout());
|
||||||
Assert.Equal("Failed to invoke 'Stream' due to an error on the server.", ex.Message);
|
Assert.Equal("Failed to invoke 'Stream' due to an error on the server. InvalidDataException: Error binding arguments. Make sure that the types of the provided values match the types of the hub method being invoked.", ex.Message);
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,10 @@ namespace Microsoft.AspNetCore.SignalR.Client.FunctionalTests
|
||||||
|
|
||||||
public void ConfigureServices(IServiceCollection services)
|
public void ConfigureServices(IServiceCollection services)
|
||||||
{
|
{
|
||||||
services.AddSignalR()
|
services.AddSignalR(options =>
|
||||||
|
{
|
||||||
|
options.EnableDetailedErrors = true;
|
||||||
|
})
|
||||||
.AddMessagePackProtocol();
|
.AddMessagePackProtocol();
|
||||||
services.AddAuthorization(options =>
|
services.AddAuthorization(options =>
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -383,7 +383,7 @@ namespace Microsoft.AspNetCore.SignalR.Common.Tests.Internal.Protocol
|
||||||
var buffer = Frame(Pack(testData.Encoded));
|
var buffer = Frame(Pack(testData.Encoded));
|
||||||
var binder = new TestBinder(new[] { typeof(string) }, typeof(string));
|
var binder = new TestBinder(new[] { typeof(string) }, typeof(string));
|
||||||
var data = new ReadOnlySequence<byte>(buffer);
|
var data = new ReadOnlySequence<byte>(buffer);
|
||||||
var exception = Assert.Throws<FormatException>(() => _hubProtocol.TryParseMessage(ref data, binder, out _));
|
var exception = Assert.Throws<InvalidDataException>(() => _hubProtocol.TryParseMessage(ref data, binder, out _));
|
||||||
|
|
||||||
Assert.Equal(testData.ErrorMessage, exception.Message);
|
Assert.Equal(testData.ErrorMessage, exception.Message);
|
||||||
}
|
}
|
||||||
|
|
@ -413,7 +413,7 @@ namespace Microsoft.AspNetCore.SignalR.Common.Tests.Internal.Protocol
|
||||||
var binder = new TestBinder(new[] { typeof(string) }, typeof(string));
|
var binder = new TestBinder(new[] { typeof(string) }, typeof(string));
|
||||||
var data = new ReadOnlySequence<byte>(buffer);
|
var data = new ReadOnlySequence<byte>(buffer);
|
||||||
_hubProtocol.TryParseMessage(ref data, binder, out var message);
|
_hubProtocol.TryParseMessage(ref data, binder, out var message);
|
||||||
var exception = Assert.Throws<FormatException>(() => ((HubMethodInvocationMessage)message).Arguments);
|
var exception = Assert.Throws<InvalidDataException>(() => ((HubMethodInvocationMessage)message).Arguments);
|
||||||
|
|
||||||
Assert.Equal(testData.ErrorMessage, exception.Message);
|
Assert.Equal(testData.ErrorMessage, exception.Message);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,10 @@ namespace Microsoft.AspNetCore.SignalR.Tests
|
||||||
public void ConfigureServices(IServiceCollection services)
|
public void ConfigureServices(IServiceCollection services)
|
||||||
{
|
{
|
||||||
services.AddConnections();
|
services.AddConnections();
|
||||||
services.AddSignalR();
|
services.AddSignalR(options =>
|
||||||
|
{
|
||||||
|
options.EnableDetailedErrors = true;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
|
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue