示例#1
0
        public async Task DispatcherCancelTest()
        {
            var fixture = new Fixture().Customize(new AutoMoqCustomization {
                ConfigureMembers = true
            }).Customize(new SupportMutableValueTypesCustomization());
            var opFoo = fixture.Create <Foo>();

            var fooHandler = new FooTestHandler();

            var factory = new Mock <IHandlerFactory>();

            factory.Setup(f => f.Create <Foo, int, DefaultMessage>(It.IsAny <RequestContext <DefaultMessage> >())).Returns(fooHandler);

            var generatedDispatcher = new ExpressionDispatcher <DefaultMessage, DefaultMessage>(
                new MsgSerializer(),
                factory.Object,
                OperationRuntimeModel.CreateFromAttribute(new[] { typeof(Foo) }),
                new NullLoggerFactory(), new DescriptionRuntimeModel());

            generatedDispatcher.ExecutionSide = Side.Server;

            generatedDispatcher.Subscribe(new Mock <IResponseReceiver <DefaultMessage> >().Object);
            var mockSession = new Mock <Session>(Array.Empty <SessionProperty>());
            var hasData     = true;

            mockSession.SetupGet(s => s.HasAvailableData).Returns(() => hasData);
            mockSession.Setup(s => s.ReceiveMessageAsync()).ReturnsAsync(() =>
            {
                hasData = false;
                return(CreateRawMessage(0, opFoo));
            });
            var hasCancelData         = true;
            var mockSessionWithCancel = new Mock <Session>(Array.Empty <SessionProperty>());

            mockSessionWithCancel.SetupGet(s => s.HasAvailableData).Returns(() => hasCancelData);
            mockSessionWithCancel.Setup(s => s.ReceiveMessageAsync()).ReturnsAsync(() =>
            {
                hasCancelData = false;
                return(MessagePackSerializer.Serialize(new DefaultMessage()
                {
                    OperationCode = 0, Status = BuiltInOperationState.Cancel
                }));
            });

            generatedDispatcher.DispatchAsync(mockSession.Object).GetAwaiter();
            Task.Delay(100).ContinueWith(task =>
            {
                generatedDispatcher.DispatchAsync(mockSessionWithCancel.Object).GetAwaiter();
            }).GetAwaiter();


            await Task.Delay(300);

            mockSession.Verify(s => s.SendMessageAsync(It.IsAny <ArraySegment <byte> >(), DeliveryMode.Reliable | DeliveryMode.Ordered), Times.Never);
            mockSessionWithCancel.Verify(s => s.SendMessageAsync(It.IsAny <ArraySegment <byte> >(), DeliveryMode.Reliable | DeliveryMode.Ordered), Times.Never);
            mockSession.Verify(s => s.ReceiveMessageAsync(), Times.Once);
            mockSessionWithCancel.Verify(s => s.ReceiveMessageAsync(), Times.Once);
        }
示例#2
0
 internal EntitySetExpression(TableExpression sourceTable, MemberInfo memberInfo, Type entitySetType, BuilderContext builderContext, ExpressionDispatcher dispatcher)
     : base(ExpressionType, entitySetType)
 {
     this.builderContext = builderContext;
     this.EntitySetType  = entitySetType;
     this.dispatcher     = dispatcher;
     this.sourceTable    = sourceTable;
     this.memberInfo     = memberInfo;
     ParseExpression(sourceTable);
 }
示例#3
0
        public async Task GeneratedDispatchTest()
        {
            var fixture = new Fixture().Customize(new AutoMoqCustomization {
                ConfigureMembers = true
            }).Customize(new SupportMutableValueTypesCustomization());
            var opA      = fixture.Create <A>();
            var opB      = fixture.Create <B>();
            var resultA  = fixture.Freeze <int>();
            var handlerA = fixture.Freeze <Mock <IHandler <A, int, DefaultMessage> > >();
            var handlerB = fixture.Freeze <Mock <IHandler <B, float, DefaultMessage> > >();
            var factory  = new Mock <IHandlerFactory>();

            factory.Setup(f => f.Create <A, int, DefaultMessage>(It.IsAny <RequestContext <DefaultMessage> >())).ReturnsUsingFixture(fixture);
            factory.Setup(f => f.Create <B, float, DefaultMessage>(It.IsAny <RequestContext <DefaultMessage> >())).ReturnsUsingFixture(fixture);

            var generatedDispatcher = new ExpressionDispatcher <DefaultMessage, DefaultMessage>(new MsgSerializer(), factory.Object, OperationRuntimeModel.CreateFromAttribute(new[] { typeof(A), typeof(B) }), new NullLoggerFactory(), new DescriptionRuntimeModel());

            generatedDispatcher.ExecutionSide = Side.Server;

            generatedDispatcher.Subscribe(new Mock <IResponseReceiver <DefaultMessage> >().Object);
            var mockSession = new Mock <Session>(Array.Empty <SessionProperty>());
            var hasData     = true;

            mockSession.SetupGet(s => s.HasAvailableData).Returns(() => hasData);
            mockSession.Setup(s => s.ReceiveMessageAsync()).ReturnsAsync(() =>
            {
                hasData = false;
                return(CreateRawMessage(0, opA, TypeMessage.Request));
            });

            await generatedDispatcher.DispatchAsync(mockSession.Object);

            mockSession.Verify(s => s.SendMessageAsync(It.IsAny <ArraySegment <byte> >(), DeliveryMode.Reliable | DeliveryMode.Ordered), Times.Once);
            handlerA.Verify(handler => handler.Handle(opA, It.IsAny <RequestContext <DefaultMessage> >(), It.IsAny <CancellationToken>()), Times.Once);
            handlerB.Verify(h => h.Handle(It.IsAny <B>(), It.IsAny <RequestContext <DefaultMessage> >(), It.IsAny <CancellationToken>()), Times.Never);
        }