public void TestGatewayAddressCacheAutoRefreshOnSuboptimalPartition()
        {
            FakeMessageHandler messageHandler = new FakeMessageHandler();
            HttpClient         httpClient     = new HttpClient(messageHandler);

            httpClient.Timeout = TimeSpan.FromSeconds(120);
            GatewayAddressCache cache = new GatewayAddressCache(
                new Uri(GatewayAddressCacheTests.DatabaseAccountApiEndpoint),
                Documents.Client.Protocol.Https,
                this.mockTokenProvider.Object,
                this.mockServiceConfigReader.Object,
                MockCosmosUtil.CreateCosmosHttpClient(() => httpClient),
                suboptimalPartitionForceRefreshIntervalInSeconds: 2);

            int initialAddressesCount = cache.TryGetAddressesAsync(
                DocumentServiceRequest.Create(OperationType.Invalid, ResourceType.Address, AuthorizationTokenType.Invalid),
                this.testPartitionKeyRangeIdentity,
                this.serviceIdentity,
                false,
                CancellationToken.None).Result.AllAddresses.Count();

            Assert.IsTrue(initialAddressesCount < this.targetReplicaSetSize);

            Task.Delay(3000).Wait();

            int finalAddressCount = cache.TryGetAddressesAsync(
                DocumentServiceRequest.Create(OperationType.Invalid, ResourceType.Address, AuthorizationTokenType.Invalid),
                this.testPartitionKeyRangeIdentity,
                this.serviceIdentity,
                false,
                CancellationToken.None).Result.AllAddresses.Count();

            Assert.IsTrue(finalAddressCount == this.targetReplicaSetSize);
        }
        public async Task ComponentShouldSetDraftIfEntryIsNull()
        {
            //Arrange
            var handler = new FakeMessageHandler();

            handler.Responses.Enqueue(new HttpResponseMessage()
            {
                StatusCode = System.Net.HttpStatusCode.NotFound, Content = new StringContent(@"{""sys"":{""type"":""Array""},""total"":0,""skip"":0,""limit"":100,""items"":[]}")
            });
            var httpClient     = new HttpClient(handler);
            var optionsManager = new Mock <IContentfulOptionsManager>();

            optionsManager.SetupGet(c => c.Options).Returns(new ContentfulOptions());
            var component     = new EntryStateViewComponent(httpClient, optionsManager.Object);
            var sysProperties = new List <SystemProperties> {
                new SystemProperties {
                    Id = "434"
                }
            };
            //Act
            var res = await component.InvokeAsync(sysProperties);

            //Assert
            Assert.IsType <ViewViewComponentResult>(res);
            Assert.True(((res as ViewViewComponentResult).ViewData.Model as EntryStateModel).Draft);
        }
Пример #3
0
        public async Task falls_back_to_first_alive_node_if_a_preferred_node_is_not_found()
        {
            var gossip = new ClusterMessages.ClusterInfo {
                Members = new[] {
                    new ClusterMessages.MemberInfo {
                        State            = ClusterMessages.VNodeState.Leader,
                        InstanceId       = Guid.NewGuid(),
                        ExternalHttpIp   = IPAddress.Any.ToString(),
                        ExternalHttpPort = 1111,
                        IsAlive          = false,
                    },
                    new ClusterMessages.MemberInfo {
                        State            = ClusterMessages.VNodeState.Follower,
                        InstanceId       = Guid.NewGuid(),
                        ExternalHttpIp   = IPAddress.Any.ToString(),
                        ExternalHttpPort = 2222,
                        IsAlive          = true,
                    },
                }
            };
            var handler = new FakeMessageHandler(req => ResponseFromGossip(gossip));

            var sut = new ClusterEndpointDiscoverer(1, new[] {
                new DnsEndPoint("localhost", 1113)
            }, Timeout.InfiniteTimeSpan, TimeSpan.Zero, NodePreference.Leader, handler);

            var result = await sut.DiscoverAsync();

            Assert.Equal(result.Port,
                         gossip.Members.Last(x => x.State == ClusterMessages.VNodeState.Follower).ExternalHttpPort);
        }
        public async Task ComponentShouldSetPendingChangesIfUpdatedAtDoesNotMatch()
        {
            //Arrange
            var handler = new FakeMessageHandler();

            handler.Responses.Enqueue(new HttpResponseMessage()
            {
                StatusCode = System.Net.HttpStatusCode.OK, Content = new StringContent(@"{""sys"":{""type"":""Array""},""total"":0,""skip"":0,""limit"":100,""items"":[{""sys"": {""updatedAt"":""2017-10-01""}, ""fields"": {""test"": ""pop""}}]}")
            });
            var httpClient     = new HttpClient(handler);
            var optionsManager = new Mock <IContentfulOptionsManager>();

            optionsManager.SetupGet(c => c.Options).Returns(new ContentfulOptions());
            var component     = new EntryStateViewComponent(httpClient, optionsManager.Object);
            var sysProperties = new SystemProperties();

            sysProperties.UpdatedAt = new DateTime(2017, 11, 03);
            sysProperties.Id        = "123";
            //Act
            var res = await component.InvokeAsync(new[] { sysProperties });

            //Assert
            Assert.IsType <ViewViewComponentResult>(res);
            Assert.True(((res as ViewViewComponentResult).ViewData.Model as EntryStateModel).PendingChanges);
        }
Пример #5
0
        public async Task should_issue_gossip_to_gossip_seed()
        {
            HttpRequestMessage request = null;
            var gossip = new ClusterMessages.ClusterInfo {
                Members = new[] {
                    new ClusterMessages.MemberInfo {
                        State            = ClusterMessages.VNodeState.Leader,
                        InstanceId       = Guid.NewGuid(),
                        ExternalHttpIp   = IPAddress.Any.ToString(),
                        ExternalHttpPort = 4444,
                        IsAlive          = true,
                    },
                }
            };

            var handler = new FakeMessageHandler(req => {
                request = req;
                return(ResponseFromGossip(gossip));
            });

            var gossipSeed = new DnsEndPoint("gossip_seed_endpoint", 1114);

            var sut = new ClusterEndpointDiscoverer(1, new[] {
                gossipSeed,
            }, Timeout.InfiniteTimeSpan, TimeSpan.Zero, NodePreference.Leader, handler);

            await sut.DiscoverAsync();

            Assert.Equal(Uri.UriSchemeHttps, request?.RequestUri.Scheme);
            Assert.Equal(gossipSeed.Host, request?.RequestUri.Host);
            Assert.Equal(gossipSeed.Port, request?.RequestUri.Port);
        }
Пример #6
0
        public async Task FetchAsync_Sends_Valid_Json_Request()
        {
            // arrange
            var messageHandler = new FakeMessageHandler();

            var httpClient = new HttpClient(messageHandler)
            {
                BaseAddress = new Uri("http://some.url")
            };

            IReadOnlyQueryRequest query = QueryRequestBuilder.New()
                                          .SetQuery(
                @"query aQuery {
                        foo
                        bar
                    }")
                                          .AddVariableValue("strVar", new StringValueNode("some-string"))
                                          .AddVariableValue("intVal", new IntValueNode(42))
                                          .AddVariableValue("floatVal", new FloatValueNode(1.23m))
                                          .AddVariableValue("boolVal", new BooleanValueNode(true))
                                          .AddVariableValue("listVal",
                                                            new ListValueNode(
                                                                new ReadOnlyCollection <FloatValueNode>(
                                                                    new List <FloatValueNode>
            {
                new FloatValueNode(1.23m),
                new FloatValueNode(1.80m),
                new FloatValueNode(2.80m)
            })))
                                          .AddVariableValue("listStringVal",
                                                            new ListValueNode(
                                                                new ReadOnlyCollection <StringValueNode>(
                                                                    new List <StringValueNode>
            {
                new StringValueNode("a"),
                new StringValueNode("b"),
                new StringValueNode("c")
            })))
                                          .AddVariableValue("enumVal", new EnumValueNode(System.Net.HttpStatusCode.OK))
                                          .AddVariableValue("otherStrVar", new StringValueNode("some-other-string"))
                                          .Create();

            // act
            await sut.FetchAsync(
                query,
                httpClient);

            // assert
            try
            {
                dynamic requestObj = JsonConvert.DeserializeObject(messageHandler.requestBody);
                Assert.NotNull(requestObj);
                Assert.NotNull(requestObj.query);
                Assert.NotNull(requestObj.variables);
            }
            catch (Exception e)
            {
                Assert.True(false, $"Unable to parse request as json: {e.Message}");
            }
        }
        public async Task ApiKey_NoOtherCredentials_QuotaProject()
        {
            var builder = new SampleClientBuilder
            {
                ApiKey       = SampleApiKey,
                QuotaProject = SampleQuotaProject
            };

            Action <BaseClientService.Initializer> validator = initializer =>
            {
                Assert.Equal(SampleApiKey, initializer.ApiKey);
                Assert.NotNull(initializer.HttpClientInitializer);

                var quotaProjectInitializer = initializer.HttpClientInitializer;
                using var handler = new FakeMessageHandler();
                using var client  = new ConfigurableHttpClient(new ConfigurableMessageHandler(handler));

                quotaProjectInitializer.Initialize(client);
                client.GetAsync("https://will.be.ignored").Wait();

                var header = Assert.Single(handler.LatestRequestHeaders, header => header.Key == "x-goog-user-project");
                var value  = Assert.Single(header.Value);
                Assert.Equal(SampleQuotaProject, value);
            };

            await ValidateResultAsync(builder, validator);
        }
Пример #8
0
        private static FluentClient CreateClient(FakeResponseMode mode = FakeResponseMode.Capture)
        {
            var serializer = new JsonContentSerializer();
            var fakeHttp   = new FakeMessageHandler {
                Mode = mode
            };

            var client = new FluentClient(serializer, fakeHttp);

            return(client);
        }
Пример #9
0
        private static FluentClient CreateClient()
        {
            var serializer = new JsonContentSerializer();

            var fakeStore = MemoryMessageStore.Current;
            var fakeHttp  = new FakeMessageHandler(fakeStore, FakeResponseMode.Fake);

            var client = new FluentClient(serializer, fakeHttp);

            client.BaseUri = new Uri("http://httpbin.org/", UriKind.Absolute);

            return(client);
        }
Пример #10
0
        public async Task DeeplinkerShouldAddContentfulOptionsFromQuery()
        {
            //Arrange
            var optionsManager = new Mock <IContentfulOptionsManager>();

            optionsManager.SetupGet(c => c.Options).Returns(new ContentfulOptions {
                DeliveryApiKey = "Fasanhöns"
            });
            var deeplinker = new Deeplinker((innerHttpContext) =>
            {
                return(Task.CompletedTask);
            }, optionsManager.Object);
            var mockSession = new Mock <ISession>();

            mockSession.Setup(c => c.Set(nameof(ContentfulOptions), It.IsAny <byte[]>())).Verifiable();

            var mockQuery = new Mock <IQueryCollection>();

            mockQuery.Setup(c => c.ContainsKey(It.Is <string>(s => s == "space_id" || s == "preview_token" || s == "delivery_token"))).Returns(true);
            mockQuery.SetupGet(c => c["delivery_token"]).Returns("McKinley");
            mockQuery.SetupGet(c => c["space_id"]).Returns("Kilimanjaro");
            mockQuery.SetupGet(c => c["preview_token"]).Returns("Fuji");

            var mockRequest = new Mock <HttpRequest>();

            mockRequest.SetupGet(r => r.Query).Returns(mockQuery.Object);
            var handler = new FakeMessageHandler();

            handler.Responses.Enqueue(new HttpResponseMessage()
            {
                StatusCode = System.Net.HttpStatusCode.OK, Content = new StringContent(@"{""sys"":{""type"":""Array""},""total"":0,""skip"":0,""limit"":100,""items"":[]}")
            });
            handler.Responses.Enqueue(new HttpResponseMessage()
            {
                StatusCode = System.Net.HttpStatusCode.OK, Content = new StringContent(@"{""sys"":{""type"":""Array""},""total"":0,""skip"":0,""limit"":100,""items"":[]}")
            });
            var httpClient   = new HttpClient(handler);
            var mockProvider = new Mock <IServiceProvider>();

            mockProvider.Setup(c => c.GetService(typeof(HttpClient))).Returns(httpClient);
            var mockContext = new Mock <HttpContext>();

            mockContext.Setup(c => c.Session).Returns(mockSession.Object);
            mockContext.SetupGet(c => c.Request).Returns(mockRequest.Object);
            mockContext.SetupGet(c => c.RequestServices).Returns(mockProvider.Object);
            //Act
            await deeplinker.Invoke(mockContext.Object);

            //Assert
            mockSession.Verify(c => c.Set(nameof(ContentfulOptions), It.Is <byte[]>(b => Encoding.UTF8.GetString(b).Contains("McKinley"))));
        }
Пример #11
0
        public async Task GetAsync()
        {
            var init = Substitute.For<IHttpInitializer>();
            var messager = new FakeMessageHandler(new HttpResponseMessage());
            init.HttpClient.Returns(new HttpClient(messager));
            var rest = new RestClient(init);
            var config = new HttpConfiguration(new Uri("http://happy.ca/"), "route", HttpRequest.Get);
            
            var ads = await rest.GetAsync(config, response => new List<Ad>{new Ad{AdID = Int32.MaxValue}});

            Assert.AreEqual(1, ads.Count(x=>x.AdID==Int32.MaxValue));
            Assert.AreEqual("http://happy.ca/route", messager.RequestMessage.RequestUri.AbsoluteUri);
            Assert.AreEqual(HttpMethod.Get, messager.RequestMessage.Method);
        }
Пример #12
0
        public async Task should_pick_node_based_on_preference(NodePreference preference,
                                                               ClusterMessages.VNodeState expectedState)
        {
            var gossip = new ClusterMessages.ClusterInfo {
                Members = new[] {
                    new ClusterMessages.MemberInfo {
                        State            = ClusterMessages.VNodeState.Leader,
                        InstanceId       = Guid.NewGuid(),
                        ExternalHttpIp   = IPAddress.Any.ToString(),
                        ExternalHttpPort = 1111,
                        IsAlive          = true,
                    },
                    new ClusterMessages.MemberInfo {
                        State            = ClusterMessages.VNodeState.Follower,
                        InstanceId       = Guid.NewGuid(),
                        ExternalHttpIp   = IPAddress.Any.ToString(),
                        ExternalHttpPort = 2222,
                        IsAlive          = true,
                    },
                    new ClusterMessages.MemberInfo {
                        State = expectedState == ClusterMessages.VNodeState.ReadOnlyLeaderless
                                                        ? expectedState
                                                        : ClusterMessages.VNodeState.ReadOnlyReplica,
                        InstanceId       = Guid.NewGuid(),
                        ExternalHttpIp   = IPAddress.Any.ToString(),
                        ExternalHttpPort = 3333,
                        IsAlive          = true,
                    },
                    new ClusterMessages.MemberInfo {
                        State            = ClusterMessages.VNodeState.Manager,
                        InstanceId       = Guid.NewGuid(),
                        ExternalHttpIp   = IPAddress.Any.ToString(),
                        ExternalHttpPort = 4444,
                        IsAlive          = true,
                    },
                }
            };
            var handler = new FakeMessageHandler(req => ResponseFromGossip(gossip));

            var sut = new ClusterEndpointDiscoverer(1, new[] {
                new DnsEndPoint("localhost", 1113)
            }, Timeout.InfiniteTimeSpan, TimeSpan.Zero, preference, handler);

            var result = await sut.DiscoverAsync();

            Assert.Equal(result.Port,
                         gossip.Members.Last(x => x.State == expectedState).ExternalHttpPort);
        }
        public async Task GatewayAddressCacheInNetworkRequestTestAsync()
        {
            FakeMessageHandler messageHandler = new FakeMessageHandler();
            HttpClient         httpClient     = new HttpClient(messageHandler);

            httpClient.Timeout = TimeSpan.FromSeconds(120);
            GatewayAddressCache cache = new GatewayAddressCache(
                new Uri(GatewayAddressCacheTests.DatabaseAccountApiEndpoint),
                Documents.Client.Protocol.Https,
                this.mockTokenProvider.Object,
                this.mockServiceConfigReader.Object,
                MockCosmosUtil.CreateCosmosHttpClient(() => httpClient),
                suboptimalPartitionForceRefreshIntervalInSeconds: 2,
                enableTcpConnectionEndpointRediscovery: true);

            // No header should be present.
            PartitionAddressInformation legacyRequest = await cache.TryGetAddressesAsync(
                DocumentServiceRequest.Create(OperationType.Invalid, ResourceType.Address, AuthorizationTokenType.Invalid),
                this.testPartitionKeyRangeIdentity,
                this.serviceIdentity,
                false,
                CancellationToken.None);


            Assert.IsFalse(legacyRequest.IsLocalRegion);

            // Header indicates the request is from the same azure region.
            messageHandler.Headers[HttpConstants.HttpHeaders.LocalRegionRequest] = "true";
            PartitionAddressInformation inNetworkAddresses = await cache.TryGetAddressesAsync(
                DocumentServiceRequest.Create(OperationType.Invalid, ResourceType.Address, AuthorizationTokenType.Invalid),
                this.testPartitionKeyRangeIdentity,
                this.serviceIdentity,
                true,
                CancellationToken.None);

            Assert.IsTrue(inNetworkAddresses.IsLocalRegion);

            // Header indicates the request is not from the same azure region.
            messageHandler.Headers[HttpConstants.HttpHeaders.LocalRegionRequest] = "false";
            PartitionAddressInformation outOfNetworkAddresses = await cache.TryGetAddressesAsync(
                DocumentServiceRequest.Create(OperationType.Invalid, ResourceType.Address, AuthorizationTokenType.Invalid),
                this.testPartitionKeyRangeIdentity,
                this.serviceIdentity,
                true,
                CancellationToken.None);

            Assert.IsFalse(outOfNetworkAddresses.IsLocalRegion);
        }
Пример #14
0
        private static FluentClient CreateClient()
        {
            var serializer = new JsonContentSerializer();

            var fakeStore = new FileMessageStore();

            fakeStore.StorePath = @".\GitHub\Responses";

            var fakeHttp = new FakeMessageHandler(fakeStore, FakeResponseMode.Fake);

            var client = new FluentClient(serializer, fakeHttp);

            client.BaseUri = new Uri("https://api.github.com/", UriKind.Absolute);

            return(client);
        }
        public async Task CanRegisterSubscriptions()
        {
            var composer = new ServiceBusComposer();

            var fakeMessageHandler = new FakeMessageHandler();

            composer.WithAdditionalServices(services =>
            {
                services.AddSingleton(fakeMessageHandler);
                services.ConfigureServiceBus(options =>
                {
                    options
                    .RegisterSubscription("testTopic", "testsubscription001")
                    .WithConnectionString("testConnectionString")
                    .WithCustomMessageHandler <FakeMessageHandler>();
                    options
                    .RegisterSubscription("testTopic", "testsubscription002")
                    .WithConnectionString("testConnectionString")
                    .WithCustomMessageHandler <FakeMessageHandler>();
                });
            });

            var provider = await composer.ComposeAndSimulateStartup();

            var clients = provider.GetRequiredService <FakeSubscriptionClientFactory>().GetAllRegisteredSubscriptionClients();

            var message = new Message();

            foreach (var client in clients)
            {
                await client.TriggerMessageReception(message, CancellationToken.None);
            }

            fakeMessageHandler.Mock.Verify(
                o => o.HandleMessageAsync(
                    It.Is <MessageContext>(
                        context => context.Message == message &&
                        context.Receiver.Name == "testTopic/Subscriptions/testsubscription001")),
                Times.Once);
            fakeMessageHandler.Mock.Verify(
                o => o.HandleMessageAsync(
                    It.Is <MessageContext>(
                        context => context.Message == message &&
                        context.Receiver.Name == "testTopic/Subscriptions/testsubscription002")),
                Times.Once);
        }
Пример #16
0
        public void GlobalAddressResolverUpdateAsyncSynchronizationTest()
        {
            SynchronizationContext prevContext = SynchronizationContext.Current;

            try
            {
                TestSynchronizationContext syncContext = new TestSynchronizationContext();
                SynchronizationContext.SetSynchronizationContext(syncContext);
                syncContext.Post(_ =>
                {
                    UserAgentContainer container      = new UserAgentContainer(clientId: 0);
                    FakeMessageHandler messageHandler = new FakeMessageHandler();

                    AccountProperties databaseAccount = new AccountProperties();
                    Mock <IDocumentClientInternal> mockDocumentClient = new Mock <IDocumentClientInternal>();
                    mockDocumentClient.Setup(owner => owner.ServiceEndpoint).Returns(new Uri("https://blabla.com/"));
                    mockDocumentClient.Setup(owner => owner.GetDatabaseAccountInternalAsync(It.IsAny <Uri>(), It.IsAny <CancellationToken>())).ReturnsAsync(databaseAccount);

                    GlobalEndpointManager globalEndpointManager = new GlobalEndpointManager(mockDocumentClient.Object, new ConnectionPolicy());
                    GlobalPartitionEndpointManager partitionKeyRangeLocationCache = new GlobalPartitionEndpointManagerCore(globalEndpointManager);

                    ConnectionPolicy connectionPolicy = new ConnectionPolicy
                    {
                        RequestTimeout = TimeSpan.FromSeconds(10)
                    };

                    GlobalAddressResolver globalAddressResolver = new GlobalAddressResolver(
                        endpointManager: globalEndpointManager,
                        partitionKeyRangeLocationCache: partitionKeyRangeLocationCache,
                        protocol: Documents.Client.Protocol.Tcp,
                        tokenProvider: this.mockTokenProvider.Object,
                        collectionCache: null,
                        routingMapProvider: null,
                        serviceConfigReader: this.mockServiceConfigReader.Object,
                        connectionPolicy: connectionPolicy,
                        httpClient: MockCosmosUtil.CreateCosmosHttpClient(() => new HttpClient(messageHandler)));

                    ConnectionStateListener connectionStateListener = new ConnectionStateListener(globalAddressResolver);
                    connectionStateListener.OnConnectionEvent(ConnectionEvent.ReadEof, DateTime.Now, new Documents.Rntbd.ServerKey(new Uri("https://endpoint.azure.com:4040/")));
                }, state: null);
            }
            finally
            {
                SynchronizationContext.SetSynchronizationContext(prevContext);
            }
        }
        public async Task Query_WhenInvalidUri_Returns404()
        {
            ConfigContextBase.SearchUris.Add(new FailureCountingUri("http://10.141.151.101:8091/"));
            var fakeMessageHandler = new FakeMessageHandler
            {
                StatusCode = HttpStatusCode.NotFound,
                Content = new StringContent("Requested resource not found. ")
            };

            var client = new SearchClient(new HttpClient(fakeMessageHandler), new SearchDataMapper());
            var response = await client.QueryAsync(new SearchQuery
            {
                Index = "indexdoesnotexist",
                Query = new MatchQuery("foo")
            });
            Assert.IsTrue(response.Exception.Message.Contains("404"));
        }
        public async Task QueryAsync_WhenInvalidIndexName_Returns403()
        {
            ConfigContextBase.SearchUris.Add(new FailureCountingUri("http://10.141.151.101:8091/"));
            var fakeMessageHandler = new FakeMessageHandler
            {
                StatusCode = HttpStatusCode.Forbidden,
                Content = new StringContent("rest_auth: preparePerm, err: index not found ")
            };

            var client = new SearchClient(new HttpClient(fakeMessageHandler), new SearchDataMapper());
            var response = await client.QueryAsync(new SearchQuery
            {
                Index = "indexdoesnotexist",
                Query = new MatchQuery("foo")
            });
            Assert.IsTrue(response.Exception.Message.Contains("403"));
        }
Пример #19
0
        public async Task should_not_exceed_max_discovery_attempts()
        {
            int maxDiscoveryAttempts = 5;
            int discoveryAttempts    = 0;

            var handler = new FakeMessageHandler(request => {
                discoveryAttempts++;
                throw new Exception();
            });

            var sut = new ClusterEndpointDiscoverer(maxDiscoveryAttempts, new[] {
                new DnsEndPoint("localhost", 1114),
            }, Timeout.InfiniteTimeSpan, TimeSpan.Zero, NodePreference.Leader, handler);

            await Assert.ThrowsAsync <DiscoveryException>(() => sut.DiscoverAsync());

            Assert.Equal(maxDiscoveryAttempts, discoveryAttempts);
        }
Пример #20
0
        public async Task should_not_be_able_to_pick_invalid_node(ClusterMessages.VNodeState invalidState)
        {
            var gossip = new ClusterMessages.ClusterInfo {
                Members = new[] {
                    new ClusterMessages.MemberInfo {
                        State            = invalidState,
                        InstanceId       = Guid.NewGuid(),
                        ExternalHttpIp   = IPAddress.Any.ToString(),
                        ExternalHttpPort = 4444,
                        IsAlive          = true,
                    },
                }
            };

            var handler = new FakeMessageHandler(req => ResponseFromGossip(gossip));

            var sut = new ClusterEndpointDiscoverer(1, new[] { new DnsEndPoint("localhost", 1113), }, Timeout.InfiniteTimeSpan, TimeSpan.Zero, NodePreference.Leader, handler);

            await Assert.ThrowsAsync <DiscoveryException>(() => sut.DiscoverAsync());
        }
Пример #21
0
        public void ThenResponseContentIsComposedByAllFieldsWithValue(int id)
        {
            //arrange
            var responseObject = new Post()
            {
                Id = 2, Body = "2", Title = "2", UserId = "2"
            };

            MemoryMessageStore.Current.Register(b => b
                                                .Url($"{apiUrl}/posts/{id}")
                                                .StatusCode(HttpStatusCode.OK)
                                                .ReasonPhrase("OK")
                                                .Content(c => c
                                                         .Header("Content-Type", "application/json; charset=utf-8")
                                                         .Data(responseObject) // object to be JSON serialized
                                                         )
                                                );

            // use memory store by default
            var serializer = new JsonContentSerializer();
            var fakeHttp   = new FakeMessageHandler();
            var client     = new FluentClient(serializer, fakeHttp);

            client.BaseUri = new Uri(apiUrl, UriKind.Absolute);

            //act
            response = client.GetAsync(b => b
                                       .AppendPath("posts")
                                       .AppendPath(id.ToString())).Result;

            //assert
            Assert.NotNull(response);
            Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);
            result = response.DeserializeAsync <Post>().Result;
            Assert.NotNull(result);
            Assert.AreEqual(id, result.Id);
            Assert.AreEqual(id.ToString(), result.Title);
            Assert.AreEqual(id.ToString(), result.UserId);
            Assert.AreEqual(id.ToString(), result.Body);
        }
Пример #22
0
        public async Task CustomMessageHandlerCanReceiveMessages()
        {
            var composer = new ServiceBusComposer();

            var fakeMessageHandler = new FakeMessageHandler();

            composer.WithAdditionalServices(
                services =>
            {
                services.AddSingleton(fakeMessageHandler);
                services.ConfigureServiceBus(
                    options =>
                {
                    options
                    .RegisterSubscription("testTopic", "testSub")
                    .WithConnectionString("connectionStringTest")
                    .WithCustomMessageHandler <FakeMessageHandler>();
                });
            });

            var provider = await composer.ComposeAndSimulateStartup();

            var clientMock = provider.GetSubscriptionClientMock("testSub");

            var sentMessage = new Message();
            var sentToken   = new CancellationToken();
            await clientMock.TriggerMessageReception(sentMessage, sentToken);

            fakeMessageHandler.Mock
            .Verify(
                o => o.HandleMessageAsync(
                    It.Is <MessageContext>(
                        context => context.Message == sentMessage &&
                        context.Receiver.Name == "testTopic/Subscriptions/testSub" &&
                        context.Token == sentToken)),
                Times.Once);
        }
        public async Task TestGatewayAddressCacheUpdateOnConnectionResetAsync()
        {
            FakeMessageHandler messageHandler = new FakeMessageHandler();
            HttpClient         httpClient     = new HttpClient(messageHandler);

            httpClient.Timeout = TimeSpan.FromSeconds(120);
            GatewayAddressCache cache = new GatewayAddressCache(
                new Uri(GatewayAddressCacheTests.DatabaseAccountApiEndpoint),
                Documents.Client.Protocol.Https,
                this.mockTokenProvider.Object,
                this.mockServiceConfigReader.Object,
                MockCosmosUtil.CreateCosmosHttpClient(() => httpClient),
                suboptimalPartitionForceRefreshIntervalInSeconds: 2,
                enableTcpConnectionEndpointRediscovery: true);

            PartitionAddressInformation addresses = cache.TryGetAddressesAsync(
                DocumentServiceRequest.Create(OperationType.Invalid, ResourceType.Address, AuthorizationTokenType.Invalid),
                this.testPartitionKeyRangeIdentity,
                this.serviceIdentity,
                false,
                CancellationToken.None).Result;

            Assert.IsNotNull(addresses.AllAddresses.Select(address => address.PhysicalUri == "https://blabla.com"));

            // call updateAddress
            await cache.TryRemoveAddressesAsync(new Documents.Rntbd.ServerKey(new Uri("https://blabla.com")), CancellationToken.None);

            // check if the addresss is updated
            addresses = cache.TryGetAddressesAsync(
                DocumentServiceRequest.Create(OperationType.Invalid, ResourceType.Address, AuthorizationTokenType.Invalid),
                this.testPartitionKeyRangeIdentity,
                this.serviceIdentity,
                false,
                CancellationToken.None).Result;

            Assert.IsNotNull(addresses.AllAddresses.Select(address => address.PhysicalUri == "https://blabla5.com"));
        }
Пример #24
0
        public async Task CustomMessageHandlerWontReceiveMessagesWhenDeactivated()
        {
            var services = new ServiceCollection();

            services.AddLogging();
            services.AddServiceBus(true, false);
            services.OverrideClientFactories();
            var fakeMessageHandler = new FakeMessageHandler();

            services.AddSingleton(fakeMessageHandler);
            services.ConfigureServiceBus(
                options =>
            {
                options
                .RegisterSubscription("testTopic", "testSub")
                .WithConnectionString("connectionStringTest")
                .WithCustomMessageHandler <FakeMessageHandler>();
            });

            var provider = services.BuildServiceProvider();
            await provider.SimulateStartHost(token : new CancellationToken());

            var clientMock = provider.GetSubscriptionClientMock("testSub");

            var sentMessage = new Message();
            var sentToken   = new CancellationToken();
            await clientMock.TriggerMessageReception(sentMessage, sentToken);

            fakeMessageHandler.Mock
            .Verify(
                o => o.HandleMessageAsync(
                    It.Is <MessageContext>(
                        context => context.Message == sentMessage &&
                        context.Receiver.Name == "testQueue" &&
                        context.Token == sentToken)),
                Times.Never);
        }
Пример #25
0
        public void DeploymentManagerExtensibility()
        {
            // Arrange
            string repositoryName = "Mvc3Application";
            string appName        = KuduUtils.GetRandomWebsiteName("DeploymentApis");

            using (var repo = Git.CreateLocalRepository(repositoryName))
            {
                ApplicationManager.Run(appName, appManager =>
                {
                    var handler = new FakeMessageHandler()
                    {
                        InnerHandler = new HttpClientHandler()
                    };

                    var manager         = new RemoteDeploymentManager(appManager.DeploymentManager.ServiceUrl, handler);
                    manager.Credentials = appManager.DeploymentManager.Credentials;
                    var results         = manager.GetResultsAsync().Result.ToList();

                    Assert.Equal(0, results.Count);
                    Assert.NotNull(handler.Url);
                });
            }
        }
Пример #26
0
 public void SetUp()
 {
     handler = new FakeMessageHandler();
     service = new GitHubService(handler);
 }
Пример #27
0
 public RestApiClientBuilder()
 {
     _fakeHandler = new FakeMessageHandler();
 }
Пример #28
0
 public void SetUp()
 {
     handler = new FakeMessageHandler();
     service = new GitHubService(handler);
 }
Пример #29
0
        public async Task should_be_able_to_discover_twice()
        {
            bool isFirstGossip = true;
            var  firstGossip   = new ClusterMessages.ClusterInfo {
                Members = new[] {
                    new ClusterMessages.MemberInfo {
                        State            = ClusterMessages.VNodeState.Leader,
                        InstanceId       = Guid.NewGuid(),
                        ExternalHttpIp   = IPAddress.Any.ToString(),
                        ExternalHttpPort = 1111,
                        IsAlive          = true,
                    },
                    new ClusterMessages.MemberInfo {
                        State            = ClusterMessages.VNodeState.Follower,
                        InstanceId       = Guid.NewGuid(),
                        ExternalHttpIp   = IPAddress.Any.ToString(),
                        ExternalHttpPort = 2222,
                        IsAlive          = true,
                    },
                }
            };
            var secondGossip = new ClusterMessages.ClusterInfo {
                Members = new[] {
                    new ClusterMessages.MemberInfo {
                        State            = ClusterMessages.VNodeState.Leader,
                        InstanceId       = Guid.NewGuid(),
                        ExternalHttpIp   = IPAddress.Any.ToString(),
                        ExternalHttpPort = 1111,
                        IsAlive          = false,
                    },
                    new ClusterMessages.MemberInfo {
                        State            = ClusterMessages.VNodeState.Leader,
                        InstanceId       = Guid.NewGuid(),
                        ExternalHttpIp   = IPAddress.Any.ToString(),
                        ExternalHttpPort = 2222,
                        IsAlive          = true,
                    },
                }
            };

            var handler = new FakeMessageHandler(req => {
                if (isFirstGossip)
                {
                    isFirstGossip = false;
                    return(ResponseFromGossip(firstGossip));
                }
                else
                {
                    return(ResponseFromGossip(secondGossip));
                }
            });

            var gossipSeed = new DnsEndPoint("gossip_seed_endpoint", 1114);

            var sut = new ClusterEndpointDiscoverer(5, new[] {
                gossipSeed,
            }, Timeout.InfiniteTimeSpan, TimeSpan.Zero, NodePreference.Leader, handler);

            var result = await sut.DiscoverAsync();

            var expected = firstGossip.Members.First(x => x.ExternalHttpPort == 1111);

            Assert.Equal(expected.ExternalHttpIp, result.Address.ToString());
            Assert.Equal(expected.ExternalHttpPort, result.Port);

            result = await sut.DiscoverAsync();

            expected = secondGossip.Members.First(x => x.ExternalHttpPort == 2222);

            Assert.Equal(expected.ExternalHttpIp, result.Address.ToString());
            Assert.Equal(expected.ExternalHttpPort, result.Port);
        }
        public async Task Query_WhenInvalidUri_MaxScoreIsZero()
        {
            ConfigContextBase.SearchUris.Add(new FailureCountingUri("http://10.141.151.101:8091/"));
            var fakeMessageHandler = new FakeMessageHandler
            {
                StatusCode = HttpStatusCode.NotFound,
                Content = new StringContent("Requested resource not found. ")
            };

            var client = new SearchClient(new HttpClient(fakeMessageHandler), new SearchDataMapper());
            var response = await client.QueryAsync(new SearchQuery
            {
                Index = "indexdoesnotexist",
                Query = new MatchQuery("foo")
            });
            Assert.AreEqual(0, response.Metrics.MaxScore);
        }