public async Task Setup_MessagesExistInMessageStore_MessagesAreReceivedByClient()
        {
            var serializer   = new Serializer();
            var routeMatcher = new RouteMatcher();
            var dispatcher   = new DefaultDispatcher();
            var messageStore = new Mock <IMessageStore>();

            var client = new Mock <IClient>();

            client.Setup(c => c.ReachedMaxConcurrency).Returns(false);
            client.Setup(c => c.Enqueue(It.IsAny <SerializedPayload>())).Returns(new AsyncPayloadTicket());

            var sampleMessage = RandomGenerator.GetMessage("TEST");
            var topicMessage  = sampleMessage.ToTopicMessage(sampleMessage.Route);

            messageStore.Setup(ms => ms.GetAll()).Returns(new List <Guid> {
                sampleMessage.Id
            });
            messageStore.Setup(ms => ms.TryGetValue(sampleMessage.Id, out topicMessage)).Returns(true);

            var topic = new Topic(dispatcher,
                                  messageStore.Object,
                                  routeMatcher,
                                  serializer,
                                  NullLogger <Topic> .Instance
                                  );

            topic.Setup("TEST", "TEST");

            topic.ClientSubscribed(client.Object);

            await topic.ReadNextMessage();

            client.Verify(c => c.Enqueue(It.IsAny <SerializedPayload>()));
        }
        public async Task OnMessage_SubscriptionIsAddedAfterTheMessage_ClientEnqueueIsCalled()
        {
            var messageStore = new InMemoryMessageStore();
            var serializer   = new Serializer();
            var routeMatcher = new RouteMatcher();
            var dispatcher   = new DefaultDispatcher();

            var mockClient = new Mock <IClient>();

            mockClient.Setup(c => c.ReachedMaxConcurrency).Returns(false);
            mockClient.Setup(c => c.Enqueue(It.IsAny <SerializedPayload>())).Returns(new AsyncPayloadTicket());

            var activeSessionId = Guid.NewGuid();

            mockClient.Setup(c => c.Id).Returns(activeSessionId);

            var topic = new Topic(dispatcher,
                                  messageStore,
                                  routeMatcher,
                                  serializer,
                                  NullLogger <Topic> .Instance
                                  );

            topic.Setup("TEST", "TEST");

            var sampleMessage = RandomGenerator.GetMessage("TEST");

            topic.OnMessage(sampleMessage);

            topic.ClientSubscribed(mockClient.Object);

            await topic.ReadNextMessage();

            mockClient.Verify(cs => cs.Enqueue(It.IsAny <SerializedPayload>()));
        }
        public void NextAvailable_NoClient_ResultIsNull()
        {
            var dispatcher = new DefaultDispatcher();
            var result     = dispatcher.NextAvailable();

            Assert.Null(result);
        }
        public void NextAvailable_WithAvailableClient_ResultIsNull()
        {
            var mockSendQueue = new Mock <IClient>();

            var dispatcher = new DefaultDispatcher();

            dispatcher.Add(mockSendQueue.Object);

            var result = dispatcher.NextAvailable();

            Assert.NotNull(result);
        }
Пример #5
0
        protected Context_default_dispatcher()
        {
            unitOfWorkFactory = Pleasure.MockStrict <IUnitOfWorkFactory>(unitOfWorkFactoryMock =>
            {
                unitOfWork = Pleasure.Mock <IUnitOfWork>(mock => mock.Setup(r => r.GetRepository()).Returns(Pleasure.MockAsObject <IRepository>()));
                unitOfWorkFactoryMock.Setup(r => r.Create(IsolationLevel.ReadCommitted, true, Pleasure.MockIt.IsNull <string>())).Returns(unitOfWork.Object);
                unitOfWorkFactoryMock.Setup(r => r.Create(IsolationLevel.ReadUncommitted, false, Pleasure.MockIt.IsNull <string>())).Returns(unitOfWork.Object);
            });
            IoCFactory.Instance.StubTryResolve(unitOfWorkFactory.Object);


            dispatcher = new DefaultDispatcher();
        }
        public Behavior_default_dispatcher_push_with_connection_string()
        {
            unitOfWorkFactory = Pleasure.Mock <IUnitOfWorkFactory>(unitOfWorkFactoryMock =>
            {
                unitOfWork = new Mock <IUnitOfWork>();
                unitOfWorkFactoryMock.Setup(r => r.Create(IsolationLevel.ReadCommitted, Pleasure.MockIt.IsAny <string>()))
                .Returns(unitOfWork.Object);
            });

            IoCFactory.Instance.StubTryResolve(unitOfWorkFactory.Object);
            IoCFactory.Instance.StubTryResolve(Pleasure.MockAsObject <IEventBroker>());

            dispatcher = new DefaultDispatcher();
        }
Пример #7
0
        public void CanInvokeUIThreadDispatcherFromBackgroundThread()
        {
            DefaultDispatcher dispatcher = new DefaultDispatcher();
            bool calledDelegate          = false;

            BackgroundWorker backgroundThread = new BackgroundWorker();

            backgroundThread.DoWork += ((sender, e) => dispatcher.BeginInvoke(new Action <object>(o => calledDelegate = true), null));
            backgroundThread.RunWorkerAsync();

            EnqueueDelay(500);
            EnqueueCallback(() => Assert.IsTrue(calledDelegate));
            EnqueueTestComplete();
        }
        protected Context_default_dispatcher()
        {
            unitOfWorkFactory = Pleasure.MockStrict <IUnitOfWorkFactory>(unitOfWorkFactoryMock =>
            {
                unitOfWork = new Mock <IUnitOfWork>();
                unitOfWorkFactoryMock.Setup(r => r.Create(IsolationLevel.ReadCommitted, Pleasure.MockIt.IsNull <string>())).Returns(unitOfWork.Object);
                unitOfWorkFactoryMock.Setup(r => r.Create(IsolationLevel.ReadUncommitted, Pleasure.MockIt.IsNull <string>())).Returns(unitOfWork.Object);
            });
            IoCFactory.Instance.StubTryResolve(unitOfWorkFactory.Object);

            eventBroker = Pleasure.Mock <IEventBroker>();
            IoCFactory.Instance.StubTryResolve(eventBroker.Object);

            dispatcher = new DefaultDispatcher();
        }
Пример #9
0
        public void ProcessRequest(HttpContext context)
        {
            var dispatcher = new DefaultDispatcher();
            var parameter  = dispatcher.Query(new GetMvdParameterQuery()
            {
                Params = context.Request.Params
            });

            context.Response.ContentType     = "application/json";
            context.Response.ContentEncoding = Encoding.UTF8;
            var instanceForQuery = dispatcher.Query(new CreateByTypeQuery()
            {
                Type = parameter.Type
            });

            context.Response.Write(IncodingResult.Success(dispatcher.Query(new MVDExecute(new HttpContextWrapper(context))
            {
                Instance = new CommandComposite((IMessage)instanceForQuery)
            })).ToJsonString());
        }
Пример #10
0
        public void ProcessRequest(HttpContext context)
        {
            var dispatcher = new DefaultDispatcher();
            var parameter  = dispatcher.Query(new GetMvdParameterQuery()
            {
                Params = context.Request.Params
            });

            var commands = dispatcher.Query(new CreateByTypeQuery.AsCommands()
            {
                IncTypes    = parameter.Type,
                IsComposite = parameter.IsCompositeArray
            });

            context.Response.ContentType     = "application/json";
            context.Response.ContentEncoding = Encoding.UTF8;
            dispatcher.Push(new CommandComposite(commands));
            var data = commands.Length == 1 ? commands[0].Result : commands.Select(r => r.Result);

            context.Response.Write(IncodingResult.Success(data).ToJsonString());
        }
        public void OnMessage_AnyCondition_MessageIsAddedToMessageStore()
        {
            var messageStore = new Mock <IMessageStore>();
            var serializer   = new Serializer();
            var routeMatcher = new RouteMatcher();
            var dispatcher   = new DefaultDispatcher();

            var topic = new Topic(dispatcher,
                                  messageStore.Object,
                                  routeMatcher,
                                  serializer,
                                  NullLogger <Topic> .Instance
                                  );

            topic.Setup("TEST", "TEST");

            var sampleMessage = RandomGenerator.GetMessage("TEST");

            topic.OnMessage(sampleMessage);

            messageStore.Verify(ms => ms.Add(It.IsAny <TopicMessage>()));
        }
        public void OnAck_AnyCondition_MessageIsDeleted()
        {
            var serializer   = new Serializer();
            var routeMatcher = new RouteMatcher();
            var dispatcher   = new DefaultDispatcher();
            var messageStore = new Mock <IMessageStore>();

            var topic = new Topic(dispatcher,
                                  messageStore.Object,
                                  routeMatcher,
                                  serializer,
                                  NullLogger <Topic> .Instance
                                  );

            topic.Setup("TEST", "TEST");

            var sampleMessage = RandomGenerator.GetMessage("TEST");

            topic.OnMessage(sampleMessage);

            topic.OnStatusChanged(sampleMessage.Id, true);
            messageStore.Verify(ms => ms.Delete(sampleMessage.Id));
        }
        public async Task OnNack_AnyCondition_RequeueMessage()
        {
            var serializer   = new Serializer();
            var routeMatcher = new RouteMatcher();
            var dispatcher   = new DefaultDispatcher();
            var messageStore = new InMemoryMessageStore();

            var client = new Mock <IClient>();

            client.Setup(c => c.ReachedMaxConcurrency).Returns(false);
            client.Setup(c => c.Enqueue(It.IsAny <SerializedPayload>())).Returns(new AsyncPayloadTicket());

            var topic = new Topic(dispatcher,
                                  messageStore,
                                  routeMatcher,
                                  serializer,
                                  NullLogger <Topic> .Instance
                                  );

            topic.Setup("TEST", "TEST");

            topic.ClientSubscribed(client.Object);

            var sampleMessage = RandomGenerator.GetMessage("TEST");

            topic.OnMessage(sampleMessage);

            await topic.ReadNextMessage();

            client.Verify(ms => ms.Enqueue(It.IsAny <SerializedPayload>()));

            topic.OnStatusChanged(sampleMessage.Id, false);

            await topic.ReadNextMessage();

            client.Verify(ms => ms.Enqueue(It.IsAny <SerializedPayload>()));
        }
Пример #14
0
 /// <summary>
 /// Invokes action with single argument of type T on UI thread
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="action">Action to be invoked</param>
 /// <param name="argument">Argument to pass to the invoked action</param>
 public static void BeginInvokeOnUI <T>(Action <T> action, T argument)
 => DefaultDispatcher.BeginInvoke(action, argument);
        public async Task <object> Execute()
        {
            //IModelMetadataProvider modelMetataMetadataProvider = Provider.GetRequiredService<IModelMetadataProvider>();

            var    byPair      = Type.Split(UrlDispatcher.separatorByPair.ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
            string genericType = byPair.ElementAtOrDefault(1);

            var inst = new DefaultDispatcher().Query(new FindTypeByName()
            {
                Type = byPair[0],
            });
            var formCollection = new DefaultDispatcher().Query(new GetFormCollectionsQuery());
            var instanceType   = IsGroup ? typeof(List <>).MakeGenericType(inst) : inst;

            if (instanceType.IsTypicalType() && IsModel)
            {
                string str = formCollection["incValue"];
                if (instanceType == typeof(string))
                {
                    return(str);
                }
                if (instanceType == typeof(bool))
                {
                    return(bool.Parse(str));
                }
                if (instanceType == typeof(DateTime))
                {
                    return(DateTime.Parse(str));
                }
                if (instanceType == typeof(int))
                {
                    return(int.Parse(str));
                }
                if (instanceType.IsEnum)
                {
                    return(Enum.Parse(instanceType, str));
                }
            }
            else if (!string.IsNullOrWhiteSpace(genericType))
            {
                instanceType = instanceType.MakeGenericType(genericType.Split(UrlDispatcher.separatorByGeneric.ToCharArray(), StringSplitOptions.RemoveEmptyEntries)
                                                            .Select(name => new DefaultDispatcher().Query(new FindTypeByName()
                {
                    Type = name,
                }))
                                                            .ToArray());
            }

            var obj = Activator.CreateInstance(instanceType);

            await Controller.TryUpdateModelAsync(obj, instanceType, "");

            /*
             * var modelMetadata = modelMetataMetadataProvider.GetMetadataForType(instanceType);
             *
             * MvcOptions mvcOptions = Provider.GetRequiredService<IOptions<MvcOptions>>().Value;
             * mvcOptions.ModelBinderProviders.Clear();
             * mvcOptions.ModelBinderProviders.Add(new FormCollectionModelBinderProvider());
             * mvcOptions.ModelBinderProviders.Add(new ComplexTypeModelBinderProvider());
             * mvcOptions.ModelBinderProviders.Add(new SimpleTypeModelBinderProvider());
             * mvcOptions.ModelBinderProviders.Add(new ArrayModelBinderProvider());
             * mvcOptions.ModelBinderProviders.Add(new CollectionModelBinderProvider());
             * mvcOptions.ModelBinderProviders.Add(new DictionaryModelBinderProvider());
             * mvcOptions.ModelBinderProviders.Add(new FloatingPointTypeModelBinderProvider());
             *
             * var modelBinderFactory = new ModelBinderFactory(modelMetadata,
             *  new OptionsWrapper<MvcOptions>(mvcOptions)
             * );
             *
             * var valueProviderFactoryContext = new ValueProviderFactoryContext(ControllerContext);
             *
             * await new FormValueProviderFactory().CreateValueProviderAsync(valueProviderFactoryContext);
             * await new QueryStringValueProviderFactory().CreateValueProviderAsync(valueProviderFactoryContext);
             * await new RouteValueProviderFactory().CreateValueProviderAsync(valueProviderFactoryContext);
             * await new JQueryFormValueProviderFactory().CreateValueProviderAsync(valueProviderFactoryContext);
             *
             * bool isValid = await ModelBindingHelper.TryUpdateModelAsync(obj, instanceType, "", ControllerContext,
             *  modelMetataMetadataProvider,
             *  modelBinderFactory, new CompositeValueProvider(valueProviderFactoryContext.ValueProviders),
             *  Provider.GetService<IObjectModelValidator>());
             *
             * return obj;
             */
            // ModelMetadataProviders.Current.GetMetadataForType(() => Activator.CreateInstance(instanceType), instanceType))().
            //return new ComplexTypeModelBinder().BindModelAsync(ControllerContext ?? new ControllerContext(), new ModelBindingContext()
            //                                                                                        {
            //                                                                                                ModelMetadata = ModelMetadataProviders.Current.GetMetadataForType(() => Activator.CreateInstance(instanceType), instanceType),
            //                                                                                                ModelState = ModelState ?? new ModelStateDictionary(),
            //                                                                                                ValueProvider = ControllerContext != null
            //                                                                                                                        ? ValueProviderFactories.Factories.GetValueProvider(ControllerContext)
            //                                                                                                                        : formCollection,
            //                                                                                        });
            return(obj);
        }