private void Roundtrip <TException>() where TException : JsonServicesException { // source exception var src = Activator.CreateInstance(typeof(TException), nonPublic: true) as TException; src.Details = Guid.NewGuid().ToString(); src.MessageId = Guid.NewGuid().ToString(); // Exception -> JSON-RPC Error var error = new Error { Code = src.Code, Message = src.Message, Data = src.Details, }; // JSON-RPC Error -> Exception var nex = JsonServicesException.Create(error, src.MessageId); Assert.AreSame(src.GetType(), nex.GetType()); Assert.AreEqual(src.Code, nex.Code); Assert.AreEqual(src.Message, nex.Message); Assert.AreEqual(src.MessageId, nex.MessageId); Assert.AreEqual(src.Details, nex.Details); }
private void HandleResponseMessage(ResponseMessage responseMessage, string debugData) { if (!PendingMessages.TryRemove(responseMessage.Id, out var pm)) { // got the unknown answer message // cannot throw here because we're on the worker thread var ex = new InternalErrorException($"Got a response for the unknown message #{responseMessage.Id}: {debugData}"); var eargs = new ThreadExceptionEventArgs(ex); UnhandledException?.Invoke(this, eargs); return; } var tcs = pm.CompletionSource; // signal the remote exception if (responseMessage.Error != null) { var exception = JsonServicesException.Create(responseMessage.Error); tcs.TrySetException(exception); return; } // signal the result tcs.TrySetResult(responseMessage.Result); }
public void GetExceptionTypesReturnsAllExceptionTypes() { var types = JsonServicesException.GetExceptionTypes(); Assert.AreEqual(typeof(AuthFailedException), types[AuthFailedException.ErrorCode]); Assert.AreEqual(typeof(AuthRequiredException), types[AuthRequiredException.ErrorCode]); Assert.AreEqual(typeof(ClientDisconnectedException), types[ClientDisconnectedException.ErrorCode]); Assert.AreEqual(typeof(InternalErrorException), types[InternalErrorException.ErrorCode]); Assert.AreEqual(typeof(InvalidRequestException), types[InvalidRequestException.ErrorCode]); Assert.AreEqual(typeof(MethodNotFoundException), types[MethodNotFoundException.ErrorCode]); Assert.AreEqual(typeof(ParseErrorException), types[ParseErrorException.ErrorCode]); }
public void JsonServicesExceptionHasCodeMessageAndMessageId() { var ex = new JsonServicesException(123, "Hello") { MessageId = "MsgId", Details = "Divide by zero or whatever", }; Assert.AreEqual(123, ex.Code); Assert.AreEqual("Hello", ex.Message); Assert.AreEqual("MsgId", ex.MessageId); Assert.AreEqual("Divide by zero or whatever", ex.Details); }