public async Task Should_be_found()
        {
            var response = new List <MessagesView>();

            var endpointName = Conventions.EndpointNamingConvention(typeof(ReceiverRemote));

            //search for the message type
            var searchString = typeof(MyMessage).Name;

            var context = await Define <MyContext>()
                          .WithEndpoint <Sender>(b => b.When((bus, c) => bus.Send(new MyMessage())))
                          .WithEndpoint <ReceiverRemote>()
                          .Done(async c =>
            {
                var result = await this.TryGetMany <MessagesView>($"/api/endpoints/{endpointName}/messages/search/" + searchString, instanceName: ServiceControlInstanceName);
                response   = result;
                return(result && response.Count == 1);
            })
                          .Run();

            var expectedRemote1InstanceId = InstanceIdGenerator.FromApiUrl(SettingsPerInstance[ServiceControlAuditInstanceName].ApiUrl);

            var remote1Message = response.SingleOrDefault(msg => msg.MessageId == context.Remote1MessageId);

            Assert.NotNull(remote1Message, "Remote1 message not found");
            Assert.AreEqual(expectedRemote1InstanceId, remote1Message.InstanceId, "Remote1 instance id mismatch");
        }
        public async Task Should_be_found()
        {
            SetInstanceSettings = ConfigureRemoteInstanceForMasterAsWellAsAuditAndErrorQueues;

            var response = new List <MessagesView>();

            var endpointName = Conventions.EndpointNamingConvention(typeof(ReceiverRemote));

            var context = await Define <MyContext>(Remote1, Master)
                          .WithEndpoint <Sender>(b => b.When((bus, c) => bus.Send(new MyMessage())))
                          .WithEndpoint <ReceiverRemote>()
                          .Done(async c =>
            {
                var result = await this.TryGetMany <MessagesView>($"/api/endpoints/{endpointName}/messages/", instanceName: Master);
                response   = result;
                return(result && response.Count == 1);
            })
                          .Run();

            var expectedRemote1InstanceId = InstanceIdGenerator.FromApiUrl(SettingsPerInstance[Remote1].ApiUrl);

            var remote1Message = response.SingleOrDefault(msg => msg.MessageId == context.Remote1MessageId);

            Assert.NotNull(remote1Message, "Remote1 message not found");
            Assert.AreEqual(expectedRemote1InstanceId, remote1Message.InstanceId, "Remote1 instance id mismatch");
        }
        public void SetUp()
        {
            ConfigurationManager.AppSettings["ServiceControl/ForwardAuditMessages"] = bool.FalseString;
            ConfigurationManager.AppSettings["ServiceControl/ForwardErrorMessages"] = bool.FalseString;
            ConfigurationManager.AppSettings["ServiceControl/AuditRetentionPeriod"] = TimeSpan.FromHours(10).ToString();
            ConfigurationManager.AppSettings["ServiceControl/ErrorRetentionPeriod"] = TimeSpan.FromDays(10).ToString();

            testApi = new TestApi()
            {
                Settings = new Settings("TestService")
                {
                    Port            = 3333,
                    RemoteInstances = new[]
                    {
                        new RemoteInstanceSetting
                        {
                            ApiUri       = "http://localhost:33334/api",
                            QueueAddress = "remote1"
                        }
                    }
                }
            };

            localInstanceId   = InstanceIdGenerator.FromApiUrl(testApi.Settings.ApiUrl);
            remote1InstanceId = InstanceIdGenerator.FromApiUrl(testApi.Settings.RemoteInstances[0].ApiUri);
        }
Пример #4
0
        public async Task Should_be_found()
        {
            var response = new List <MessagesView>();

            var context = await Define <MyContext>()
                          .WithEndpoint <Sender>(b => b.When(async(bus, c) =>
            {
                await bus.Send(new MyMessage());
                await bus.SendLocal(new MyMessage());
            }))
                          .WithEndpoint <Receiver>()
                          .Done(async c =>
            {
                var result = await this.TryGetMany <MessagesView>("/api/messages/", instanceName: ServiceControlInstanceName);
                response   = result;
                return(result && response.Count == 2);
            })
                          .Run();

            var expectedMasterInstanceId = InstanceIdGenerator.FromApiUrl(SettingsPerInstance[ServiceControlInstanceName].ApiUrl);
            var expectedAuditInstanceId  = InstanceIdGenerator.FromApiUrl(SettingsPerInstance[ServiceControlAuditInstanceName].ApiUrl);

            Assert.AreNotEqual(expectedMasterInstanceId, expectedAuditInstanceId);

            var sentMessage = response.SingleOrDefault(msg => msg.MessageId == context.SentMessageId);

            Assert.NotNull(sentMessage, "Sent message not found");
            Assert.AreEqual(expectedAuditInstanceId, sentMessage.InstanceId, "Audit instance id mismatch");

            var sentLocalMessage = response.SingleOrDefault(msg => msg.MessageId == context.SentLocalMessageId);

            Assert.NotNull(sentLocalMessage, "Sent local message not found");
            Assert.AreEqual(expectedAuditInstanceId, sentLocalMessage.InstanceId, "Audit instance id mismatch");
        }
Пример #5
0
        private async Task <HttpResponseMessage> RemoteCall(HttpRequestMessage currentRequest, string instanceId)
        {
            var remoteUri = InstanceIdGenerator.ToApiUri(instanceId);

            var instanceUri = currentRequest.RedirectToRemoteUri(remoteUri);

            var httpClient = HttpClientFactory();

            try
            {
                currentRequest.RequestUri = instanceUri;
                if (currentRequest.Method == HttpMethod.Get)
                {
                    currentRequest.Content = null;
                }

                currentRequest.Headers.Host = remoteUri.Authority; //switch the host header to the new instance host

                var rawResponse = await httpClient.SendAsync(currentRequest).ConfigureAwait(false);

                return(rawResponse);
            }
            catch (Exception exception)
            {
                logger.Warn($"Failed to query remote instance at {remoteUri}.", exception);

                return(new HttpResponseMessage(HttpStatusCode.InternalServerError));
            }
        }
 public UniqueDataScrapersTests()
 {
     instanceIdGenerator = new InstanceIdGenerator();
     htmlParserProvider  = new DefaultHtmlParserProvider();
     pageDownloader      = new DefaultPageDownloader();
     webClientProvider   = new DefaultWebClientProvider();
     webServices         = new DefaultWebServices(htmlParserProvider, webClientProvider, pageDownloader);
     uniqueDataProvider  = new DefaultUniqueDataProvider(instanceIdGenerator);
     scrapingServices    = new DefaultUniqueDataScrapingServices(uniqueDataProvider, webServices);
 }
Пример #7
0
        public async Task Should_be_forwarded_to_remote()
        {
            SetInstanceSettings = ConfigureRemoteInstanceForMasterAsWellAsAuditAndErrorQueues;

            var context = new MyContext();

            HttpResponseMessage response        = null;
            MessagesView        capturedMessage = null;

            await Define(context, Remote1, Master)
            .WithEndpoint <RemoteEndpoint>(b => b.Given(bus =>
            {
                context.Remote1InstanceId = InstanceIdGenerator.FromApiUrl(addressOfRemote);
                bus.SendLocal(new MyMessage());
            }))
            .Done(async c =>
            {
                if (string.IsNullOrWhiteSpace(context.Remote1MessageId))
                {
                    return(false);
                }

                if (!c.Remote1MessageAudited)
                {
                    var result = await TryGetMany <MessagesView>("/api/messages", msg => msg.MessageId == c.Remote1MessageId, Master);
                    List <MessagesView> messages = result;
                    if (!result)
                    {
                        return(false);
                    }
                    c.Remote1MessageAudited = true;
                    capturedMessage         = messages.Single(msg => msg.MessageId == c.Remote1MessageId);
                }

                response = await GetRaw($"/api/{capturedMessage.BodyUrl}", Master);
                Console.WriteLine($"GetRaw for {c.Remote1MessageId} resulted in {response.StatusCode}");
                return(response.StatusCode == HttpStatusCode.OK);
            })
            .Run(TimeSpan.FromMinutes(2));

            Assert.AreEqual(context.Remote1MessageContentType, response.Content.Headers.ContentType.ToString(), "ContentType mismatch");
            Assert.NotNull(response.Content.Headers.Expires, "Expires header missing");

            Assert.GreaterOrEqual(response.Content.Headers.Expires.Value, DateTimeOffset.UtcNow.AddDays(360), "Unexpected Expires datetime year value");

            Assert.NotNull(response.Content.Headers.ContentLength, "ContentLength not set");

            Assert.AreEqual(context.Remote1MessageBody.Length, response.Content.Headers.ContentLength.Value, "ContentLength mismatch");

            var body = await response.Content.ReadAsByteArrayAsync();

            Assert.AreEqual(context.Remote1MessageBody, body, "Body bytes mismatch");

            Assert.NotNull(response.Headers.GetValues("ETag").SingleOrDefault(), "Etag not set");
        }
Пример #8
0
        public async Task Should_be_forwarded_to_audit_instance()
        {
            CustomServiceControlAuditSettings = s => addressOfAuditInstance = s.ApiUrl;

            HttpResponseMessage response        = null;
            MessagesView        capturedMessage = null;

            var context = await Define <MyContext>()
                          .WithEndpoint <RemoteEndpoint>(b => b.When(async(bus, ctx) =>
            {
                ctx.AuditInstanceId = InstanceIdGenerator.FromApiUrl(addressOfAuditInstance);
                await bus.SendLocal(new MyMessage());
            }))
                          .Done(async c =>
            {
                if (string.IsNullOrWhiteSpace(c.AuditInstanceMessageId))
                {
                    return(false);
                }

                if (!c.MessageAudited)
                {
                    var result = await this.TryGetMany <MessagesView>("/api/messages", msg => msg.MessageId == c.AuditInstanceMessageId, ServiceControlInstanceName);
                    List <MessagesView> messages = result;
                    if (!result)
                    {
                        return(false);
                    }

                    c.MessageAudited = true;
                    capturedMessage  = messages.Single(msg => msg.MessageId == c.AuditInstanceMessageId);
                }

                response = await this.GetRaw($"/api/{capturedMessage.BodyUrl}", ServiceControlInstanceName);
                Console.WriteLine($"GetRaw for {c.AuditInstanceMessageId} resulted in {response.StatusCode}");
                return(response.StatusCode == HttpStatusCode.OK);
            })
                          .Run(TimeSpan.FromMinutes(2));

            Assert.AreEqual(context.MessageContentType, response.Content.Headers.ContentType.ToString(), "ContentType mismatch");
            Assert.NotNull(response.Content.Headers.Expires, "Expires header missing");

            Assert.GreaterOrEqual(response.Content.Headers.Expires.Value, DateTimeOffset.UtcNow.AddDays(360), "Unexpected Expires datetime year value");

            Assert.NotNull(response.Content.Headers.ContentLength, "ContentLength not set");

            Assert.AreEqual(context.MessageBody.Length, response.Content.Headers.ContentLength.Value, "ContentLength mismatch");

            var body = await response.Content.ReadAsByteArrayAsync();

            Assert.AreEqual(context.MessageBody, body, "Body bytes mismatch");

            Assert.NotNull(response.Headers.GetValues("ETag").SingleOrDefault(), "Etag not set");
        }
        public static DefaultMoveScrapingServices MakeDefaultMoveScrapingServices()
        {
            var instanceIdGenerator = new InstanceIdGenerator();
            var htmlParserProvider  = new DefaultHtmlParserProvider();
            var moveProvider        = new DefaultMoveProvider(instanceIdGenerator);
            var pageDownloader      = new DefaultPageDownloader();
            var webClientProvider   = new DefaultWebClientProvider();
            var webServices         = new DefaultWebServices(htmlParserProvider, webClientProvider, pageDownloader);

            return(new DefaultMoveScrapingServices(moveProvider, webServices));
        }
Пример #10
0
        public void SetUp()
        {
            var instanceIdGenerator = new InstanceIdGenerator();
            var htmlParserProvider  = new DefaultHtmlParserProvider();
            var movementProvider    = new DefaultMovementProvider(instanceIdGenerator);
            var pageDownloader      = new DefaultPageDownloader();
            var webClientProvider   = new DefaultWebClientProvider();
            var webServices         = new DefaultWebServices(htmlParserProvider, webClientProvider, pageDownloader);

            _scrapingServices = new DefaultMovementScrapingServices(movementProvider, webServices);
        }
Пример #11
0
        private static DefaultAttributeScrapingServices MakeAttributeScrapingServices()
        {
            var instanceIdGenerator = new InstanceIdGenerator();
            var htmlParserProvider  = new DefaultHtmlParserProvider();
            var attributeProvider   = new DefaultAttributeProvider(instanceIdGenerator);
            var pageDownloader      = new DefaultPageDownloader();
            var webClientProvider   = new DefaultWebClientProvider();
            var webServices         = new DefaultWebServices(htmlParserProvider, webClientProvider, pageDownloader);
            var scrapingServices    = new DefaultAttributeScrapingServices(attributeProvider, webServices);

            return(scrapingServices);
        }
Пример #12
0
        public Task <Response> Execute(BaseModule module, TIn input)
        {
            var currentRequest = module.Request;

            var instanceId = GetInstance(currentRequest, input);

            var localInstanceId = InstanceIdGenerator.FromApiUrl(Settings.ApiUrl);

            if (!string.IsNullOrWhiteSpace(instanceId) && instanceId != localInstanceId)
            {
                return(RemoteCall(currentRequest, instanceId));
            }

            return(LocalQuery(currentRequest, input, localInstanceId));
        }
Пример #13
0
        public Task <HttpResponseMessage> Execute(ApiController controller, TIn input)
        {
            var currentRequest = controller.Request;

            var instanceId = GetInstance(currentRequest, input);

            var localInstanceId = InstanceIdGenerator.FromApiUrl(Settings.ApiUrl);

            if (!string.IsNullOrWhiteSpace(instanceId) && instanceId != localInstanceId)
            {
                return(RemoteCall(currentRequest, instanceId));
            }

            return(LocalQuery(currentRequest, input, localInstanceId));
        }
        public void SetUp()
        {
            var instanceIdGenerator = new InstanceIdGenerator();

            _htmlParserProvider    = new DefaultHtmlParserProvider();
            _movementProvider      = new DefaultMovementProvider(instanceIdGenerator);
            _moveProvider          = new DefaultMoveProvider(instanceIdGenerator);
            _pageDownloader        = new DefaultPageDownloader();
            _webClientProvider     = new DefaultWebClientProvider();
            _attributeProvider     = new DefaultAttributeProvider(instanceIdGenerator);
            _imageScrapingProvider = new DefaultImageScrapingProvider();
            _imageScrapingService  = new DefaultImageScrapingService(_imageScrapingProvider);
            _uniqueDataProvider    = new DefaultUniqueDataProvider(instanceIdGenerator);
            _webServices           = new DefaultWebServices(_htmlParserProvider, _webClientProvider, _pageDownloader);

            _attributeScrapingServices  = new DefaultAttributeScrapingServices(_attributeProvider, _webServices);
            _moveScrapingServices       = new DefaultMoveScrapingServices(_moveProvider, _webServices);
            _movementScrapingServices   = new DefaultMovementScrapingServices(_movementProvider, _webServices);
            _uniqueDataScrapingServices = new DefaultUniqueDataScrapingServices(_uniqueDataProvider, _webServices);

            _groundMoveScraper    = new GroundMoveScraper(_moveScrapingServices);
            _aerialMoveScraper    = new AerialMoveScraper(_moveScrapingServices);
            _specialMoveScraper   = new SpecialMoveScraper(_moveScrapingServices);
            _throwMovesScraper    = new ThrowMoveScraper(_moveScrapingServices);
            _characterMoveScraper = new DefaultCharacterMoveScraper(new List <IMoveScraper>
            {
                _groundMoveScraper, _aerialMoveScraper, _specialMoveScraper, _throwMovesScraper
            });

            var attributeScrapers = new List <IAttributeScraper>
            {
                new AirSpeedScraper(_attributeScrapingServices),
                new AirDodgeScraper(_attributeScrapingServices)
            };

            _movementScraper = new DefaultMovementScraper(_movementScrapingServices);

            _characterDataScrapingServices = new DefaultCharacterDataScrapingServices(_imageScrapingService, _movementScraper,
                                                                                      attributeScrapers, _characterMoveScraper, _uniqueDataScrapingServices, _webServices, instanceIdGenerator);

            _characterDataScraper = new DefaultCharacterDataScraper(_characterDataScrapingServices);
        }
        public async Task <HttpResponseMessage> Execute(ApiController controller, TIn input)
        {
            var remotes        = Settings.RemoteInstances;
            var currentRequest = controller.Request;

            var instanceId = InstanceIdGenerator.FromApiUrl(Settings.ApiUrl);
            var tasks      = new List <Task <QueryResult <TOut> > >(remotes.Length + 1)
            {
                LocalCall(currentRequest, input, instanceId)
            };

            foreach (var remote in remotes)
            {
                tasks.Add(RemoteCall(currentRequest, remote.ApiAsUri, InstanceIdGenerator.FromApiUrl(remote.ApiUri)));
            }

            var response = AggregateResults(currentRequest, await Task.WhenAll(tasks).ConfigureAwait(false));

            return(Negotiator.FromQueryResult(currentRequest, response));
        }
        public async Task <dynamic> Execute(BaseModule module, TIn input)
        {
            var remotes        = Settings.RemoteInstances;
            var currentRequest = module.Request;

            var instanceId = InstanceIdGenerator.FromApiUrl(Settings.ApiUrl);
            var tasks      = new List <Task <QueryResult <TOut> > >(remotes.Length + 1)
            {
                LocalCall(currentRequest, input, instanceId)
            };

            foreach (var remote in remotes)
            {
                tasks.Add(RemoteCall(currentRequest, remote.ApiUri, InstanceIdGenerator.FromApiUrl(remote.ApiUri)));
            }

            var response = AggregateResults(currentRequest, await Task.WhenAll(tasks).ConfigureAwait(false));

            var negotiate = module.Negotiate;

            return(negotiate.WithQueryResult(response, currentRequest));
        }
        public async Task Should_be_found()
        {
            SetInstanceSettings = ConfigureRemoteInstanceForMasterAsWellAsAuditAndErrorQueues;

            var context = new MyContext();
            List <MessagesView> response = new List <MessagesView>();

            //search for the message type
            var searchString = typeof(MyMessage).Name;

            await Define(context, Remote1, Master)
            .WithEndpoint <Sender>(b => b.Given((bus, c) =>
            {
                bus.Send(new MyMessage());
                bus.SendLocal(new MyMessage());
            }))
            .WithEndpoint <ReceiverRemote>()
            .Done(async c =>
            {
                var result = await TryGetMany <MessagesView>("/api/messages/search/" + searchString, instanceName: Master);
                response   = result;
                return(result && response.Count == 2);
            })
            .Run(TimeSpan.FromSeconds(40));

            var expectedMasterInstanceId  = InstanceIdGenerator.FromApiUrl(SettingsPerInstance[Master].ApiUrl);
            var expectedRemote1InstanceId = InstanceIdGenerator.FromApiUrl(SettingsPerInstance[Remote1].ApiUrl);

            var masterMessage = response.SingleOrDefault(msg => msg.MessageId == context.MasterMessageId);

            Assert.NotNull(masterMessage, "Master message not found");
            Assert.AreEqual(expectedMasterInstanceId, masterMessage.InstanceId, "Master instance id mismatch");

            var remote1Message = response.SingleOrDefault(msg => msg.MessageId == context.Remote1MessageId);

            Assert.NotNull(remote1Message, "Remote1 message not found");
            Assert.AreEqual(expectedRemote1InstanceId, remote1Message.InstanceId, "Remote1 instance id mismatch");
        }
        public DefaultCharacterDataScraper MakeCharacterDataScraper()
        {
            var instanceIdGenerator = new InstanceIdGenerator();

            _htmlParserProvider    = new DefaultHtmlParserProvider();
            _movementProvider      = new DefaultMovementProvider(instanceIdGenerator);
            _moveProvider          = new DefaultMoveProvider(instanceIdGenerator);
            _pageDownloader        = new DefaultPageDownloader();
            _webClientProvider     = new DefaultWebClientProvider();
            _attributeProvider     = new DefaultAttributeProvider(instanceIdGenerator);
            _imageScrapingProvider = new DefaultImageScrapingProvider();
            _imageScrapingService  = new DefaultColorScrapingService(_characterCss); //_imageScrapingProvider);
            _uniqueDataProvider    = new DefaultUniqueDataProvider(instanceIdGenerator);
            _webServices           = new DefaultWebServices(_htmlParserProvider, _webClientProvider, _pageDownloader);

            _attributeScrapingServices  = new DefaultAttributeScrapingServices(_attributeProvider, _webServices);
            _moveScrapingServices       = new DefaultMoveScrapingServices(_moveProvider, _webServices);
            _movementScrapingServices   = new DefaultMovementScrapingServices(_movementProvider, _webServices);
            _uniqueDataScrapingServices = new DefaultUniqueDataScrapingServices(_uniqueDataProvider, _webServices);

            _groundMoveScraper    = new GroundMoveScraper(_moveScrapingServices);
            _aerialMoveScraper    = new AerialMoveScraper(_moveScrapingServices);
            _specialMoveScraper   = new SpecialMoveScraper(_moveScrapingServices);
            _throwMoveScraper     = new ThrowMoveScraper(_moveScrapingServices);
            _characterMoveScraper = new DefaultCharacterMoveScraper(new List <IMoveScraper> {
                _groundMoveScraper, _aerialMoveScraper, _specialMoveScraper, _throwMoveScraper
            });

            var attributeScrapers = AttributeScrapers.AllWithScrapingServices(_attributeScrapingServices, _urlUnderTest);

            _movementScraper = new DefaultMovementScraper(_movementScrapingServices);

            _characterDataScrapingServices = new DefaultCharacterDataScrapingServices(_imageScrapingService, _movementScraper,
                                                                                      attributeScrapers, _characterMoveScraper, _uniqueDataScrapingServices, _webServices, instanceIdGenerator);

            return(new DefaultCharacterDataScraper(_characterDataScrapingServices));
        }
Пример #19
0
        public async Task Should_be_work()
        {
            // instead of setting up a multiple crazy instances we just use the current instance and rely on it forwarding the instance call to itself
            CustomServiceControlSettings = s => { addressOfItself = s.ApiUrl; };

            FailedMessage failure;

            await Define <MyContext>()
            .WithEndpoint <FailureEndpoint>(b => b.When(bus => bus.SendLocal(new MyMessage())).DoNotFailOnErrorMessages())
            .Done(async c =>
            {
                if (!c.RetryIssued)
                {
                    var result = await GetFailedMessage(c, ServiceControlInstanceName, FailedMessageStatus.Unresolved);
                    failure    = result;
                    if (result)
                    {
                        c.RetryIssued = true;
                        await this.Post <object>($"/api/errors/{failure.UniqueMessageId}/retry?instance_id={InstanceIdGenerator.FromApiUrl(addressOfItself)}", null, null, ServiceControlInstanceName);
                    }

                    return(false);
                }

                return(await GetFailedMessage(c, ServiceControlInstanceName, FailedMessageStatus.Resolved));
            })
            .Run(TimeSpan.FromMinutes(2));
        }
Пример #20
0
        private async Task <Response> RemoteCall(Request currentRequest, string instanceId)
        {
            var remoteUri = InstanceIdGenerator.ToApiUrl(instanceId);

            var instanceUri = currentRequest.RedirectToRemoteUri(remoteUri);

            var httpClient = HttpClientFactory();

            try
            {
                var method         = new HttpMethod(currentRequest.Method);
                var requestMessage = new HttpRequestMessage(method, instanceUri);
                var streamContent  = new StreamContent(currentRequest.Body);
                foreach (var currentRequestHeader in currentRequest.Headers)
                {
                    if (contentHeaders.Contains(currentRequestHeader.Key))
                    {
                        streamContent.Headers.Add(currentRequestHeader.Key, currentRequestHeader.Value);
                    }
                    else
                    {
                        requestMessage.Headers.Add(currentRequestHeader.Key, currentRequestHeader.Value);
                    }
                }

                if (method == HttpMethod.Post || method == HttpMethod.Put)
                {
                    requestMessage.Content = streamContent;
                }

                var rawResponse = await httpClient.SendAsync(requestMessage).ConfigureAwait(false);

                var headers        = rawResponse.Headers.Union(rawResponse.Content.Headers).ToDictionary(k => k.Key, v => v.Value.FirstOrDefault());
                var httpStatusCode = (Nancy.HttpStatusCode)Enum.Parse(typeof(HttpStatusCode), rawResponse.StatusCode.ToString(), ignoreCase: true);

                return(new Response
                {
                    Contents = stream =>
                    {
                        if (httpStatusCode == Nancy.HttpStatusCode.NotFound)
                        {
                            Response.NoBody(stream);
                        }
                        else
                        {
                            rawResponse.Content.CopyToAsync(stream).GetAwaiter().GetResult();
                        }
                    },
                    Headers = headers,
                    ContentType = rawResponse.Content.Headers.ContentType.ToString(),
                    StatusCode = httpStatusCode
                });
            }
            catch (Exception exception)
            {
                logger.Warn($"Failed to query remote instance at {remoteUri}.", exception);

                return(new Response
                {
                    StatusCode = Nancy.HttpStatusCode.InternalServerError,
                });
            }
        }
Пример #21
0
        public async Task Should_be_forwarded_and_resolved_on_remote()
        {
            SetInstanceSettings = ConfigureRemoteInstanceForMasterAsWellAsAuditAndErrorQueues;

            var context = new MyContext();

            FailedMessage failure;

            await Define(context, Remote1, Master)
            .WithEndpoint <FailureEndpoint>(b => b.Given(bus => bus.SendLocal(new MyMessage())))
            .Done(async c =>
            {
                if (!c.RetryIssued)
                {
                    var result = await GetFailedMessage(c, Remote1, FailedMessageStatus.Unresolved);
                    failure    = result;
                    if (result)
                    {
                        c.RetryIssued = true;
                        await Post <object>($"/api/errors/{failure.UniqueMessageId}/retry?instance_id={InstanceIdGenerator.FromApiUrl(addressOfRemote)}", null, null, Master);
                    }

                    return(false);
                }

                return(await GetFailedMessage(c, Remote1, FailedMessageStatus.Resolved));
            })
            .Run(TimeSpan.FromMinutes(2));
        }