Example #1
0
        public async Task When_Polling_Results_In_An_Http_Error_The_Returned_PollState_Has_Delay_Set_To_The_Specified_Http_Error_Delay()
        {
            // Given:
            uint httpErrorDelay = 12345;
            var  pollingPolicy  = PollingDelays.DefaultPollingErrorDelays;

            pollingPolicy[HttpChannelPoller.PollingError.ErrorMakingHttpRequest] = httpErrorDelay;
            var testResponses = new List <Either <HttpError, string> >()
            {
                new Either <HttpError, string>(new HttpError(HttpStatusCode.BadRequest))
            };

            Func <string, Either <DeserializeError, TransportMessage> > deserializeTransportMessage = s =>
                                                                                                      TransportMessageDeserializer.Deserialize(s,
                                                                                                                                               new Dictionary <string, Type> {
                { TestMessage.MessageName, typeof(TestMessage) }
            });
            var initialPollState = BasicInitialPollState(pollingPolicy);

            // When:
            PollState newPollStateTask = await MessageEndpointPoller.Execute(
                initialPollState,
                new TestHttpService(testResponses),
                new CancellationToken(),
                GetHandlerForMessageType,
                deserializeTransportMessage);

            // Then
            Assert.NotNull(newPollStateTask);
            Assert.AreEqual(httpErrorDelay, newPollStateTask.DelayMs);
        }
Example #2
0
        public async Task Polling_From_Start_Works()
        {
            // Given:
            uint httpErrorDelay = 12345;
            var  pollingPolicy  = PollingDelays.DefaultPollingErrorDelays;

            pollingPolicy[HttpChannelPoller.PollingError.ErrorMakingHttpRequest] = httpErrorDelay;


            var loc = Path.Combine(
                TestContext.CurrentContext.TestDirectory,
                "http-responses\\sample.json");
            var content       = File.ReadAllText(loc);
            var testResponses = new List <Either <HttpError, string> >()
            {
                new Either <HttpError, string>(content)
            };

            var initialPollState = BasicInitialPollState(pollingPolicy);

            Either <DeserializeError, TransportMessage> DeserializeTransportMessage(string s) =>
            TransportMessageDeserializer.Deserialize(
                s,
                new Dictionary <string, Type> {
                { TestMessage.MessageName, typeof(TestMessage) }
            });

            // When:
            PollState newPollStateTask = await MessageEndpointPoller.Execute(
                initialPollState,
                new TestHttpService(testResponses),
                new CancellationToken(),
                GetHandlerForMessageType,
                DeserializeTransportMessage);

            // Then
            //Assert.AreEqual(httpErrorDelay, newPollStateTask.DelayMs);
            Assert.AreEqual(4, TestMessageHandler.Counter);
        }
Example #3
0
        private static void Main(string[] args)
        {
            Logger.Trace("Start");
            var cts = new CancellationTokenSource();
            var ct  = cts.Token;

            Either <DeserializeError, TransportMessage> DeserializeTransportMessage(string s) =>
            TransportMessageDeserializer.Deserialize(s, MessageEndpointRepository.GetMessageTypeLookup());

            foreach (var endpoint in GetMessageEndpoints())
            {
                var messageEndpointState = new MessageEndpointState(
                    endpoint.Channel,
                    endpoint.LastSuccessfullyProcessedMessage,
                    endpoint.Name);

                IHttpService ServiceCreator() => new HttpService(new UriBuilder(
                                                                     endpoint.Channel.HttpChannelBase.Scheme,
                                                                     endpoint.Channel.HttpChannelBase.Host,
                                                                     endpoint.Channel.HttpChannelBase.Port).Uri);

                MessageEndpointPoller.MainInfinitePollerAsync(
                    messageEndpointState,
                    HandlerFactory.GetHandlerForMessageType,
                    DeserializeTransportMessage,
                    endpoint.DefaultDelayMs,
                    endpoint.PollingErrorDelays,
                    ServiceCreator,
                    ct);
            }

            Console.WriteLine("press enter to stop");
            Console.Read();
            cts.Cancel();
            Logger.Trace("End");
        }