private static void TestSerializeCore( int id, object returnValue, bool isVoid, RpcException error ) { if ( isVoid ) { Assert.IsNull( returnValue, "Return value should not be specified in void." ); } if ( error != null ) { Assert.IsNull( returnValue, "Return value shoud not be specified in error." ); Assert.IsFalse( isVoid, "isVoid should be false in error test." ); } // TODO: Mock filters var objectTracingFilter = new SerializingResponseTracingFilterProvider(); var binaryTracingFilter = new SerializedResponseTracingFilterProvider(); var target = SerializerFactory.CreateResponseMessageSerializerWithTracer( objectTracingFilter, binaryTracingFilter, null, null ); try { var buffer = new RpcOutputBuffer( ChunkBuffer.CreateDefault() ); Assert.IsTrue( target.Serialize( id, returnValue, isVoid, error, buffer ).IsSuccess ); byte[] serialized = buffer.ReadBytes().ToArray(); var mpo = new MessagePackObject( new MessagePackObject[] { new MessagePackObject( ( int )MessageType.Response ), new MessagePackObject( ( uint )id ), error == null ? MessagePackObject.Nil : error.RpcError.Identifier, returnValue == null ? ( error == null ? MessagePackObject.Nil : error.GetExceptionMessage( false ) ) : MessagePackObject.FromObject( returnValue ) } ); var stream = new MemoryStream(); Packer.Create( stream ).Pack( mpo ); CollectionAssert.AreEqual( stream.ToArray(), serialized, "Expected:{0}{1}{0}Actual:{0}{2}", Environment.NewLine, mpo, new Unpacker( serialized ).UnpackObject() ); } finally { Console.WriteLine( "OBJECT TRACE:{0}", objectTracingFilter.GetTrace() ); Console.WriteLine( "BINARY TRACE:{0}", binaryTracingFilter.GetTrace() ); } }
/// <summary> /// Create <see cref="ResponseMessageSerializer"/> with specified tracer(s). /// </summary> /// <param name="serializingResponseTracer">Tracer for serializing response.</param> /// <param name="serializedResponseTracer">Tracer for serialized response binary stream.</param> /// <param name="deserializingResponseTracer">Tracer for deserializing response binary stream.</param> /// <param name="deserializedResponseTracer">Tracer for deserialized response.</param> /// <returns><see cref="ResponseMessageSerializer"/> with specified tracer(s).</returns> public static ResponseMessageSerializer CreateResponseMessageSerializerWithTracer( SerializingResponseTracingFilterProvider serializingResponseTracer, SerializedResponseTracingFilterProvider serializedResponseTracer, DeserializingResponseTracingFilterProvider deserializingResponseTracer, DeserializedResponseTracingFilterProvider deserializedResponseTracer ) { return new ResponseMessageSerializer( serializingResponseTracer == null ? new IFilterProvider<ResponseMessageSerializationFilter>[] { serializingResponseTracer } : null, serializedResponseTracer == null ? new IFilterProvider<SerializedMessageFilter<MessageSerializationContext>>[] { serializedResponseTracer } : null, deserializingResponseTracer == null ? new IFilterProvider<SerializedMessageFilter<MessageDeserializationContext>>[] { deserializingResponseTracer } : null, deserializedResponseTracer == null ? new IFilterProvider<ResponseMessageDeserializationFilter>[] { deserializedResponseTracer } : null, null ); }