コード例 #1
0
        public Task <ElasticResponse> SearchAsync(ElasticSearchRequest searchRequest)
        {
            var formatter = new PostBodyRequestFormatter(connection, mapping, searchRequest);

            log.Debug(null, null, "Request: POST {0}", formatter.Uri);
            log.Debug(null, null, "Body: {0}", formatter.Body);

            return(retryPolicy.ExecuteAsync(
                       async() =>
            {
                using (var requestMessage = new HttpRequestMessage(HttpMethod.Post, formatter.Uri)
                {
                    Content = new StringContent(formatter.Body)
                })
                    using (var response = await SendRequestAsync(connection.HttpClient, requestMessage))
                        using (var responseStream = await response.Content.ReadAsStreamAsync())
                            return ParseResponse(responseStream, log);
            },
                       (response, exception) => exception is TaskCanceledException,
                       (response, additionalInfo) =>
            {
                additionalInfo["index"] = connection.Index;
                additionalInfo["query"] = formatter.Body;
            }));
        }
コード例 #2
0
        public void ConstructorHasSensibleDefaultValues()
        {
            var request = new ElasticSearchRequest();

            Assert.Equal(0, request.From);
            Assert.Null(request.Size);
            Assert.Empty(request.Fields);
            Assert.Empty(request.SortOptions);
            Assert.Null(request.Filter);
        }
コード例 #3
0
        public void ConstructorSetsProperties()
        {
            var expectedSearch = new ElasticSearchRequest { Type = "someType" };
            var expectedMaterializer = new ElasticManyHitsMaterializer(o => o, typeof(ElasticConnectionTests));

            var result = new ElasticTranslateResult(expectedSearch, expectedMaterializer);

            Assert.Same(expectedSearch, result.SearchRequest);
            Assert.Same(expectedMaterializer, result.Materializer);
        }
コード例 #4
0
        public static async Task NoAuthorizationWithEmptyUserName()
        {
            var messageHandler = new SpyMessageHandler();
            var localConnection = new ElasticConnection(messageHandler, new Uri("http://localhost"));
            var processor = new ElasticRequestProcessor(localConnection, mapping, log, retryPolicy);
            var request = new ElasticSearchRequest { Type = "docType" };

            await processor.SearchAsync(request);

            Assert.Null(messageHandler.Request.Headers.Authorization);
        }
コード例 #5
0
        public static void NonSuccessfulHttpRequestThrows()
        {
            var messageHandler = new SpyMessageHandler();
            messageHandler.Response.StatusCode = HttpStatusCode.NotFound;
            var localConnection = new ElasticConnection(messageHandler, new Uri("http://localhost"), "myUser", "myPass");
            var processor = new ElasticRequestProcessor(localConnection, mapping, log, retryPolicy);
            var request = new ElasticSearchRequest { Type = "docType" };

            var ex = Record.Exception(() => processor.SearchAsync(request).GetAwaiter().GetResult());

            Assert.IsType<HttpRequestException>(ex);
            Assert.Equal("Response status code does not indicate success: 404 (Not Found).", ex.Message);
        }
コード例 #6
0
        public static async Task ForcesBasicAuthorizationWhenProvidedWithUsernameAndPassword()
        {
            var messageHandler = new SpyMessageHandler();
            var localConnection = new ElasticConnection(messageHandler, new Uri("http://localhost"), "myUser", "myPass");
            var processor = new ElasticRequestProcessor(localConnection, mapping, log, retryPolicy);
            var request = new ElasticSearchRequest { Type = "docType" };

            await processor.SearchAsync(request);

            var auth = messageHandler.Request.Headers.Authorization;
            Assert.NotNull(auth);
            Assert.Equal("Basic", auth.Scheme);
            Assert.Equal("myUser:myPass", Encoding.ASCII.GetString(Convert.FromBase64String(auth.Parameter)));
        }
コード例 #7
0
        public Task<ElasticResponse> SearchAsync(ElasticSearchRequest searchRequest)
        {
            var formatter = new PostBodyRequestFormatter(connection, mapping, searchRequest);
            log.Debug(null, null, "Request: POST {0}", formatter.Uri);
            log.Debug(null, null, "Body: {0}", formatter.Body);

            return retryPolicy.ExecuteAsync(
                async () =>
                {
                    using (var requestMessage = new HttpRequestMessage(HttpMethod.Post, formatter.Uri) { Content = new StringContent(formatter.Body) })
                    using (var response = await SendRequestAsync(connection.HttpClient, requestMessage))
                    using (var responseStream = await response.Content.ReadAsStreamAsync())
                        return ParseResponse(responseStream, log);
                },
                (response, exception) => exception is TaskCanceledException,
                (response, additionalInfo) =>
                {
                    additionalInfo["index"] = connection.Index;
                    additionalInfo["query"] = formatter.Body;
                });
        }
コード例 #8
0
        public static async Task LogsDebugMessagesDuringExecution()
        {
            var responseString = BuildResponseString(2, 1, 1, 0.3141, "testIndex", "testType", "testId");
            var messageHandler = new SpyMessageHandler();
            var log = new SpyLog();
            messageHandler.Response.Content = new StringContent(responseString);
            var localConnection = new ElasticConnection(messageHandler, new Uri("http://localhost"), "myUser", "myPass", index: "SearchIndex");
            var processor = new ElasticRequestProcessor(localConnection, mapping, log, retryPolicy);
            var request = new ElasticSearchRequest { Type = "abc123", Size = 2112 };

            await processor.SearchAsync(request);

            Assert.Equal(4, log.Messages.Count);
            Assert.Equal(@"[VERBOSE] Request: POST http://localhost/SearchIndex/abc123/_search", log.Messages[0]);
            Assert.Equal(@"[VERBOSE] Body: {""size"":2112,""timeout"":""10s""}", log.Messages[1]);
            Assert.True(new Regex(@"\[VERBOSE\] Response: 200 OK \(in \d+ms\)").Match(log.Messages[2]).Success);
            Assert.True(new Regex(@"\[VERBOSE\] De-serialized \d+ bytes into 1 hits in \d+ms").Match(log.Messages[3]).Success);
        }