コード例 #1
0
		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() );
			}
		}
コード例 #2
0
        public void TestReadWrite()
        {
            using ( var target = new RpcOutputBuffer( ChunkBuffer.CreateDefault() ) )
            {
                using ( var stream = target.OpenWriteStream() )
                {
                    stream.Write( Enumerable.Range( 1, 10 ).Select( i => ( byte )i ).ToArray(), 0, 10 );
                    stream.Write( Enumerable.Range( 11, 10 ).Select( i => ( byte )i ).ToArray(), 0, 10 );
                }

                using ( var stream = target.OpenWriteStream() )
                {
                    stream.Write( Enumerable.Range( 21, 10 ).Select( i => ( byte )i ).ToArray(), 0, 10 );
                }

                using ( var stream = target.OpenWriteStream() ) { }

                using ( var stream = target.OpenWriteStream() )
                {
                    stream.Write( Enumerable.Range( 31, 10 ).Select( i => ( byte )i ).ToArray(), 0, 10 );
                }

                using ( var stream = target.OpenWriteStream() )
                {
                    stream.Write( new byte[ 0 ], 0, 0 );
                }

                using ( var stream = target.OpenWriteStream() )
                {
                    stream.Write( Enumerable.Range( 41, 10 ).Select( i => ( byte )i ).ToArray(), 0, 10 );
                }

                CollectionAssert.AreEqual(
                    Enumerable.Range( 1, 50 ).Select( i => ( byte )i ).ToArray(),
                    target.ReadBytes()
                );
            }
        }
コード例 #3
0
        protected override sealed void SendCore( RpcServerSession session, MessageType messageType, int messageId, object returnValue, bool isVoid, Exception exception )
        {
            RpcException rpcException = exception as RpcException;
            if ( rpcException == null && exception != null )
            {
                rpcException = new RpcException( RpcError.CallError, "Remote method throws exception.", exception.ToString() );
            }

            // FIXME: Buffer strategy
            RpcOutputBuffer buffer = new RpcOutputBuffer( ChunkBuffer.CreateDefault() );
            var error = this._responseSerializer.Serialize( messageId, returnValue, isVoid, rpcException, buffer );
            if ( !error.IsSuccess )
            {
                this._eventLoop.HandleError( new RpcTransportErrorEventArgs( RpcTransportOperation.Deserialize, messageId, error ) );
                return;
            }

            this._eventLoop.SendAsync( session.Context, buffer.ReadBytes() );
        }
コード例 #4
0
        public void TestSwap()
        {
            using ( var target = new RpcOutputBuffer( ChunkBuffer.CreateDefault() ) )
            {
                using ( var stream = target.OpenWriteStream() )
                {
                    stream.Write( Enumerable.Range( 1, 10 ).Select( i => ( byte )i ).ToArray(), 0, 10 );
                }

                using ( var swapper = target.CreateSwapper() )
                {
                    CollectionAssert.AreEqual(
                        Enumerable.Range( 1, 10 ).Select( i => ( byte )i ).ToArray(),
                        swapper.ReadBytes()
                    );

                    swapper.WriteBytes( Enumerable.Range( 11, 30 ).Select( i => ( byte )i ) );
                }

                CollectionAssert.AreEqual(
                    Enumerable.Range( 11, 30 ).Select( i => ( byte )i ).ToArray(),
                    target.ReadBytes().ToArray()
                );
            }
        }
コード例 #5
0
        public void TestSwap_WriteBytesEmpty()
        {
            using ( var target = new RpcOutputBuffer( ChunkBuffer.CreateDefault() ) )
            {
                using ( var stream = target.OpenWriteStream() )
                {
                    stream.Write( Enumerable.Range( 1, 10 ).Select( i => ( byte )i ).ToArray(), 0, 10 );
                }

                using ( var swapper = target.CreateSwapper() )
                {
                    swapper.WriteBytes( Enumerable.Empty<byte>() );
                }

                Assert.AreEqual( 0, target.ReadBytes().Count() );
            }
        }
コード例 #6
0
 public void TestSerialize_Request()
 {
     // TODO: Mock filters
     var objectTracingFilter = new SerializingRequestTracingFilterProvider();
     var binaryTracingFilter = new SerializedRequestTracingFilterProvider();
     var target =
         SerializerFactory.CreateRequestMessageSerializerWithTracer(
             objectTracingFilter,
             binaryTracingFilter,
             null,
             null
         );
     try
     {
         var id = Environment.TickCount;
         var method = Guid.NewGuid().ToString();
         var args = new object[] { 1, "String", null, true };
         var buffer = new RpcOutputBuffer( ChunkBuffer.CreateDefault() );
         Assert.IsTrue( target.Serialize( id, method, args, buffer ).IsSuccess );
         byte[] serialized = buffer.ReadBytes().ToArray();
         var mpo =
             new MessagePackObject(
                 new MessagePackObject[]
                 {
                     new MessagePackObject( ( int )MessageType.Request ),
                     new MessagePackObject( ( uint )id ),
                     new MessagePackObject( method ),
                     new MessagePackObject[]
                     {
                         new MessagePackObject( 1 ),
                         new MessagePackObject( "String" ),
                         MessagePackObject.Nil,
                         new MessagePackObject( true )
                     }
                 }
             );
         var stream = new MemoryStream();
         Packer.Create( stream ).Pack( mpo );
         CollectionAssert.AreEqual( stream.ToArray(), serialized );
     }
     finally
     {
         Console.WriteLine( "OBJECT TRACE:{0}", objectTracingFilter.GetTrace() );
         Console.WriteLine( "BINARY TRACE:{0}", binaryTracingFilter.GetTrace() );
     }
 }