Exemple #1
0
        private Request CreateAddRequest(ConfigurationSetting setting)
        {
            if (setting == null)
            {
                throw new ArgumentNullException(nameof(setting));
            }
            if (string.IsNullOrEmpty(setting.Key))
            {
                throw new ArgumentNullException($"{nameof(setting)}.{nameof(setting.Key)}");
            }

            Request request = _pipeline.CreateRequest();

            ReadOnlyMemory <byte> content = Serialize(setting);

            request.Method = RequestMethod.Put;

            BuildUriForKvRoute(request.Uri, setting);

            ConditionalRequestOptions requestOptions = new ConditionalRequestOptions();

            requestOptions.SetIfNotExistsCondition();
            ConditionalRequestOptionsExtensions.ApplyHeaders(request, requestOptions);

            request.Headers.Add(s_mediaTypeKeyValueApplicationHeader);
            request.Headers.Add(HttpHeader.Common.JsonContentType);
            request.Content = HttpPipelineRequestContent.Create(content);

            return(request);
        }
        private Request CreateInkRecognitionRequest(HttpPipeline pipeline,
                                                    IEnumerable <InkStroke> strokes,
                                                    ApplicationKind applicationKind,
                                                    string language,
                                                    InkPointUnit inkPointUnit,
                                                    float unitMultiple)
        {
            Azure.Core.Http.Request request = pipeline.CreateRequest();

            // add content
            var inkRecognitionRequest = new InkRecognitionRequest(strokes,
                                                                  applicationKind,
                                                                  language,
                                                                  inkPointUnit,
                                                                  unitMultiple);
            var content = new MemoryStream(Encoding.UTF8.GetBytes(inkRecognitionRequest.ToJson()));

            request.Content = HttpPipelineRequestContent.Create(content);

            // specify HTTP request line
            request.Method = RequestMethod.Put;
            var requestUri = new RequestUriBuilder();

            requestUri.Reset(_endpoint);
            request.Uri.Scheme = requestUri.Scheme;
            request.Uri.Host   = requestUri.Host;
            request.Uri.Port   = requestUri.Port;
            request.Uri.Path   = requestUri.Path;
            request.Uri.Query  = requestUri.Query;

            // add headers for authentication
            _credential.SetRequestCredentials(request);

            return(request);
        }
Exemple #3
0
        public async Task CanGetAndSetRequestHeaders(string headerName, string headerValue, bool contentHeader)
        {
            IEnumerable <string> httpHeaderValues = null;

            var mockHandler = new MockHttpClientHandler(
                httpRequestMessage => {
                Assert.True(
                    httpRequestMessage.Headers.TryGetValues(headerName, out httpHeaderValues) ||
                    httpRequestMessage.Content.Headers.TryGetValues(headerName, out httpHeaderValues));
            });

            var transport = new HttpClientTransport(new HttpClient(mockHandler));
            var request   = transport.CreateRequest(null);

            request.SetRequestLine(HttpVerb.Get, new Uri("http://example.com:340"));
            request.Content = HttpPipelineRequestContent.Create(Array.Empty <byte>());

            request.AddHeader(headerName, headerValue);

            Assert.True(request.TryGetHeader(headerName, out var value));
            Assert.AreEqual(headerValue, value);

            Assert.True(request.TryGetHeader(headerName.ToUpper(), out value));
            Assert.AreEqual(headerValue, value);

            CollectionAssert.AreEqual(new []
            {
                new HttpHeader(headerName, headerValue),
            }, request.Headers);

            await ExecuteRequest(request, transport);

            Assert.AreEqual(headerValue, string.Join(",", httpHeaderValues));
        }
Exemple #4
0
        private Response <TResult> SendRequest <TContent, TResult>(string operation, TContent content, Func <TResult> resultFactory, CancellationToken cancellationToken)
            where TContent : IJsonSerializable
            where TResult : IJsonDeserializable
        {
            using DiagnosticScope scope = _pipeline.Diagnostics.CreateScope($"Azure.Security.KeyVault.Keys.Cryptography.CryptographyClient.{operation}");
            scope.AddAttribute("key", _keyId);
            scope.Start();

            try
            {
                using (Request request = CreateRequest(operation))
                {
                    request.Content = HttpPipelineRequestContent.Create(content.Serialize());

                    Response response = SendRequest(request, cancellationToken);

                    return(CreateResponse(response, resultFactory()));
                }
            }
            catch (Exception e)
            {
                scope.Failed(e);
                throw;
            }
        }
        public async Task RequestContentLogsAreLimitedInLength()
        {
            var           response      = new MockResponse(500);
            MockTransport mockTransport = CreateMockTransport(response);

            var    pipeline = new HttpPipeline(mockTransport, new[] { new LoggingPolicy(logContent: true, 5) });
            string requestId;

            using (Request request = pipeline.CreateRequest())
            {
                request.Method = RequestMethod.Get;
                request.Uri.Assign(new Uri("https://contoso.a.io"));
                request.Content = HttpPipelineRequestContent.Create(Encoding.UTF8.GetBytes("Hello world"));
                request.Headers.Add("Content-Type", "text/json");
                requestId = request.ClientRequestId;

                await SendRequestAsync(pipeline, request);
            }

            EventWrittenEventArgs e = _listener.SingleEventById(RequestContentTextEvent);

            Assert.AreEqual(EventLevel.Verbose, e.Level);
            Assert.AreEqual("RequestContentText", e.EventName);
            Assert.AreEqual(requestId, e.GetProperty <string>("requestId"));
            Assert.AreEqual("Hello", e.GetProperty <string>("content"));

            CollectionAssert.IsEmpty(_listener.EventsById(ResponseContentEvent));
        }
Exemple #6
0
        public async Task RequestContentIsLoggedAsText()
        {
            var           response      = new MockResponse(500);
            MockTransport mockTransport = CreateMockTransport(response);

            var    pipeline  = new HttpPipeline(mockTransport, new[] { new LoggingPolicy(logContent: true, int.MaxValue, s_allowedHeaders, s_allowedQueryParameters) });
            string requestId = null;

            await SendRequestAsync(pipeline, request =>
            {
                request.Method = RequestMethod.Get;
                request.Uri.Reset(new Uri("https://contoso.a.io"));
                request.Content = HttpPipelineRequestContent.Create(Encoding.UTF8.GetBytes("Hello world"));
                request.Headers.Add("Content-Type", "text/json");
                requestId = request.ClientRequestId;
            });

            EventWrittenEventArgs e = _listener.SingleEventById(RequestContentTextEvent);

            Assert.AreEqual(EventLevel.Verbose, e.Level);
            Assert.AreEqual("RequestContentText", e.EventName);
            Assert.AreEqual(requestId, e.GetProperty <string>("requestId"));
            Assert.AreEqual("Hello world", e.GetProperty <string>("content"));

            CollectionAssert.IsEmpty(_listener.EventsById(ResponseContentEvent));
        }
Exemple #7
0
        private Request CreateUpdateRequest(ConfigurationSetting setting)
        {
            if (setting == null)
            {
                throw new ArgumentNullException(nameof(setting));
            }
            if (string.IsNullOrEmpty(setting.Key))
            {
                throw new ArgumentNullException($"{nameof(setting)}.{nameof(setting.Key)}");
            }

            Request request = _pipeline.CreateRequest();
            ReadOnlyMemory <byte> content = Serialize(setting);

            request.Method = RequestMethod.Put;
            BuildUriForKvRoute(request.UriBuilder, setting);
            request.Headers.Add(MediaTypeKeyValueApplicationHeader);
            request.Headers.Add(HttpHeader.Common.JsonContentType);

            if (setting.ETag != default)
            {
                request.Headers.Add(IfMatchName, $"\"{setting.ETag}\"");
            }
            else
            {
                request.Headers.Add(IfMatchName, "*");
            }

            request.Content = HttpPipelineRequestContent.Create(content);
            return(request);
        }
        public async Task RequestContentIsLoggedAsText()
        {
            var response      = new MockResponse(500);
            var mockTransport = new MockTransport(response);

            var    pipeline = new HttpPipeline(mockTransport, new [] { LoggingPolicy.Shared });
            string requestId;

            using (HttpPipelineRequest request = pipeline.CreateRequest())
            {
                request.SetRequestLine(HttpPipelineMethod.Get, new Uri("https://contoso.a.io"));
                request.Content = HttpPipelineRequestContent.Create(Encoding.UTF8.GetBytes("Hello world"));
                request.AddHeader(new HttpHeader("Content-Type", "text/json"));
                requestId = request.RequestId;

                await pipeline.SendRequestAsync(request, CancellationToken.None);
            }

            var e = _listener.SingleEventById(RequestContentTextEvent);

            Assert.AreEqual(EventLevel.Verbose, e.Level);
            Assert.AreEqual("RequestContentText", e.EventName);
            Assert.AreEqual(requestId, e.GetProperty <string>("requestId"));
            Assert.AreEqual("Hello world", e.GetProperty <string>("content"));

            CollectionAssert.IsEmpty(_listener.EventsById(ResponseContentEvent));
        }
Exemple #9
0
        private static Request CreateRequest(HttpClientTransport transport, byte[] bytes = null)
        {
            var request = transport.CreateRequest(null);

            request.SetRequestLine(HttpPipelineMethod.Get, new Uri("http://example.com:340"));
            request.Content = HttpPipelineRequestContent.Create(bytes ?? Array.Empty <byte>());
            return(request);
        }
Exemple #10
0
        private static Request CreateRequest(HttpClientTransport transport, byte[] bytes = null)
        {
            Request request = transport.CreateRequest();

            request.Method = RequestMethod.Get;
            request.Uri.Reset(new Uri("https://example.com:340"));
            request.Content = HttpPipelineRequestContent.Create(bytes ?? Array.Empty <byte>());
            return(request);
        }
Exemple #11
0
        public static async Task <HttpPipelineRequestContent> ToPipelineRequestContentAsync(this HttpContent content)
        {
            if (content != null)
            {
                return(HttpPipelineRequestContent.Create(await content.ReadAsStreamAsync().ConfigureAwait(false)));
            }

            return(null);
        }
        public void StreamCopyToCancellation()
        {
            int size         = 100;
            var source       = new MemoryStream(size);
            var destination  = new MemoryStream(size);
            var content      = HttpPipelineRequestContent.Create(source);
            var cancellation = new CancellationTokenSource();

            cancellation.Cancel();
            Assert.Throws <OperationCanceledException>(() => { content.WriteTo(destination, cancellation.Token); });
        }
        public async Task <Response <TResult> > SendRequestAsync <TContent, TResult>(RequestMethod method, TContent content, Func <TResult> resultFactory, CancellationToken cancellationToken, params string[] path)
            where TContent : Model
            where TResult : Model
        {
            using Request request = CreateRequest(method, path);
            request.Content       = HttpPipelineRequestContent.Create(content.Serialize());

            Response response = await SendRequestAsync(request, cancellationToken).ConfigureAwait(false);

            return(CreateResponse(response, resultFactory()));
        }
Exemple #14
0
        public Response <TResult> SendRequest <TContent, TResult>(RequestMethod method, TContent content, Func <TResult> resultFactory, CancellationToken cancellationToken, params string[] path)
            where TContent : IJsonSerializable
            where TResult : IJsonDeserializable
        {
            using Request request = CreateRequest(method, path);
            request.Content       = HttpPipelineRequestContent.Create(content.Serialize());

            Response response = SendRequest(request, cancellationToken);

            return(CreateResponse(response, resultFactory()));
        }
        public async Task SendingRequestProducesEvents()
        {
            var response = new MockResponse(200);

            response.SetContent(new byte[] { 6, 7, 8, 9, 0 });
            response.AddHeader(new HttpHeader("Custom-Response-Header", "Improved value"));

            MockTransport mockTransport = CreateMockTransport(response);

            var    pipeline = new HttpPipeline(mockTransport, new[] { new LoggingPolicy(logContent: true, int.MaxValue) });
            string requestId;

            using (Request request = pipeline.CreateRequest())
            {
                request.Method = RequestMethod.Get;
                request.Uri.Assign(new Uri("https://contoso.a.io"));
                request.Headers.Add("Date", "3/26/2019");
                request.Headers.Add("Custom-Header", "Value");
                request.Content = HttpPipelineRequestContent.Create(new byte[] { 1, 2, 3, 4, 5 });
                requestId       = request.ClientRequestId;

                await SendRequestAsync(pipeline, request);
            }

            EventWrittenEventArgs e = _listener.SingleEventById(RequestEvent);

            Assert.AreEqual(EventLevel.Informational, e.Level);
            Assert.AreEqual("Request", e.EventName);
            Assert.AreEqual(requestId, e.GetProperty <string>("requestId"));
            Assert.AreEqual("https://contoso.a.io/", e.GetProperty <string>("uri"));
            Assert.AreEqual("GET", e.GetProperty <string>("method"));
            StringAssert.Contains($"Date:3/26/2019{Environment.NewLine}", e.GetProperty <string>("headers"));
            StringAssert.Contains($"Custom-Header:Value{Environment.NewLine}", e.GetProperty <string>("headers"));

            e = _listener.SingleEventById(RequestContentEvent);
            Assert.AreEqual(EventLevel.Verbose, e.Level);
            Assert.AreEqual("RequestContent", e.EventName);
            Assert.AreEqual(requestId, e.GetProperty <string>("requestId"));
            CollectionAssert.AreEqual(new byte[] { 1, 2, 3, 4, 5 }, e.GetProperty <byte[]>("content"));

            e = _listener.SingleEventById(ResponseEvent);
            Assert.AreEqual(EventLevel.Informational, e.Level);
            Assert.AreEqual("Response", e.EventName);
            Assert.AreEqual(requestId, e.GetProperty <string>("requestId"));
            Assert.AreEqual(e.GetProperty <int>("status"), 200);
            StringAssert.Contains($"Custom-Response-Header:Improved value{Environment.NewLine}", e.GetProperty <string>("headers"));

            e = _listener.SingleEventById(ResponseContentEvent);
            Assert.AreEqual(EventLevel.Verbose, e.Level);
            Assert.AreEqual("ResponseContent", e.EventName);
            Assert.AreEqual(requestId, e.GetProperty <string>("requestId"));
            CollectionAssert.AreEqual(new byte[] { 6, 7, 8, 9, 0 }, e.GetProperty <byte[]>("content"));
        }
Exemple #16
0
        private Response <TResult> SendRequest <TContent, TResult>(HttpPipelineMethod method, TContent content, Func <TResult> resultFactory, CancellationToken cancellationToken, params string[] path)
            where TContent : Model
            where TResult : Model
        {
            using (Request request = CreateRequest(method, path))
            {
                request.Content = HttpPipelineRequestContent.Create(content.Serialize());

                Response response = SendRequest(request, cancellationToken);

                return(CreateResponse(response, resultFactory()));
            }
        }
        public async Task <Response <ConfigurationSetting> > UpdateAsync(ConfigurationSetting setting, CancellationToken cancellation = default)
        {
            if (setting == null)
            {
                throw new ArgumentNullException(nameof(setting));
            }
            if (string.IsNullOrEmpty(setting.Key))
            {
                throw new ArgumentNullException($"{nameof(setting)}.{nameof(setting.Key)}");
            }

            Uri uri = BuildUriForKvRoute(setting);

            using (var request = _pipeline.CreateRequest())
            {
                ReadOnlyMemory <byte> content = Serialize(setting);

                request.SetRequestLine(HttpVerb.Put, uri);

                request.AddHeader(MediaTypeKeyValueApplicationHeader);
                request.AddHeader(HttpHeader.Common.JsonContentType);

                if (setting.ETag != default)
                {
                    request.AddHeader(IfMatchName, $"\"{setting.ETag}\"");
                }
                else
                {
                    request.AddHeader(IfMatchName, "*");
                }

                AddClientRequestID(request);
                AddAuthenticationHeaders(request, uri, HttpVerb.Put, content, _secret, _credential);

                request.Content = HttpPipelineRequestContent.Create(content);

                var response = await _pipeline.SendRequestAsync(request, cancellation).ConfigureAwait(false);

                if (response.Status == 200)
                {
                    return(await CreateResponse(response, cancellation));
                }
                else
                {
                    throw new RequestFailedException(response);
                }
            }
        }
Exemple #18
0
        public async Task SettingHeaderOverridesDefaultContentLength()
        {
            long contentLength = 0;
            var  mockHandler   = new MockHttpClientHandler(
                httpRequestMessage => contentLength = httpRequestMessage.Content.Headers.ContentLength.Value);

            var transport = new HttpClientTransport(new HttpClient(mockHandler));
            var request   = transport.CreateRequest(null);

            request.SetRequestLine(HttpPipelineMethod.Get, new Uri("http://example.com"));
            request.Content = HttpPipelineRequestContent.Create(new byte[10]);
            request.Headers.Add("Content-Length", "50");

            await ExecuteRequest(request, transport);

            Assert.AreEqual(50, contentLength);
        }
Exemple #19
0
        public async Task RequestContentIsNotLoggedWhenDisabled()
        {
            var response = new MockResponse(500);

            response.ContentStream = new MemoryStream(new byte[] { 1, 2, 3 });

            MockTransport mockTransport = CreateMockTransport(response);

            var pipeline = new HttpPipeline(mockTransport, new[] { new LoggingPolicy(logContent: false, int.MaxValue, s_allowedHeaders, s_allowedQueryParameters) });

            await SendRequestAsync(pipeline, request =>
            {
                request.Method = RequestMethod.Get;
                request.Uri.Reset(new Uri("https://contoso.a.io"));
                request.Content = HttpPipelineRequestContent.Create(Encoding.UTF8.GetBytes("Hello world"));
            });

            AssertNoContentLogged();
        }
Exemple #20
0
        public async Task <Response <ConfigurationSetting> > SetAsync(ConfigurationSetting setting, CancellationToken cancellation = default)
        {
            if (setting == null)
            {
                throw new ArgumentNullException(nameof(setting));
            }
            if (string.IsNullOrEmpty(setting.Key))
            {
                throw new ArgumentNullException($"{nameof(setting)}.{nameof(setting.Key)}");
            }

            using (var request = _pipeline.CreateRequest())
            {
                ReadOnlyMemory <byte> content = Serialize(setting);

                request.Method = HttpPipelineMethod.Put;
                BuildUriForKvRoute(request.UriBuilder, setting);
                request.AddHeader(MediaTypeKeyValueApplicationHeader);
                request.AddHeader(HttpHeader.Common.JsonContentType);

                if (setting.ETag != default)
                {
                    request.AddHeader(IfMatchName, $"\"{setting.ETag.ToString()}\"");
                }

                request.Content = HttpPipelineRequestContent.Create(content);

                var response = await _pipeline.SendRequestAsync(request, cancellation).ConfigureAwait(false);

                if (response.Status == 200)
                {
                    return(await CreateResponse(response, cancellation));
                }
                if (response.Status == 409)
                {
                    throw new RequestFailedException(response, "the item is locked");
                }
                else
                {
                    throw new RequestFailedException(response);
                }
            }
        }
Exemple #21
0
        public async Task HeadersAndQueryParametersAreNotSanitizedWhenStars()
        {
            var response = new MockResponse(200);

            response.SetContent(new byte[] { 6, 7, 8, 9, 0 });
            response.AddHeader(new HttpHeader("Custom-Response-Header", "Improved value"));
            response.AddHeader(new HttpHeader("Secret-Response-Header", "Very secret"));

            MockTransport mockTransport = CreateMockTransport(response);

            var    pipeline  = new HttpPipeline(mockTransport, new[] { new LoggingPolicy(logContent: false, int.MaxValue, new[] { "*" }, new[] { "*" }) });
            string requestId = null;

            await SendRequestAsync(pipeline, request =>
            {
                request.Method = RequestMethod.Get;
                request.Uri.Reset(new Uri("https://contoso.a.io?api-version=5&secret=123"));
                request.Headers.Add("Date", "3/26/2019");
                request.Headers.Add("Custom-Header", "Value");
                request.Headers.Add("Secret-Custom-Header", "Value");
                request.Content = HttpPipelineRequestContent.Create(new byte[] { 1, 2, 3, 4, 5 });
                requestId       = request.ClientRequestId;
            });

            EventWrittenEventArgs e = _listener.SingleEventById(RequestEvent);

            Assert.AreEqual(EventLevel.Informational, e.Level);
            Assert.AreEqual("Request", e.EventName);
            Assert.AreEqual(requestId, e.GetProperty <string>("requestId"));
            Assert.AreEqual("https://contoso.a.io/?api-version=5&secret=123", e.GetProperty <string>("uri"));
            Assert.AreEqual("GET", e.GetProperty <string>("method"));
            StringAssert.Contains($"Date:3/26/2019{Environment.NewLine}", e.GetProperty <string>("headers"));
            StringAssert.Contains($"Custom-Header:Value{Environment.NewLine}", e.GetProperty <string>("headers"));
            StringAssert.Contains($"Secret-Custom-Header:Value{Environment.NewLine}", e.GetProperty <string>("headers"));

            e = _listener.SingleEventById(ResponseEvent);
            Assert.AreEqual(EventLevel.Informational, e.Level);
            Assert.AreEqual("Response", e.EventName);
            Assert.AreEqual(requestId, e.GetProperty <string>("requestId"));
            Assert.AreEqual(e.GetProperty <int>("status"), 200);
            StringAssert.Contains($"Custom-Response-Header:Improved value{Environment.NewLine}", e.GetProperty <string>("headers"));
            StringAssert.Contains($"Secret-Response-Header:Very secret{Environment.NewLine}", e.GetProperty <string>("headers"));
        }
Exemple #22
0
        public async Task RequestContentIsNotLoggedWhenDisabled()
        {
            var response = new MockResponse(500);

            response.ContentStream = new MemoryStream(new byte[] { 1, 2, 3 });

            MockTransport mockTransport = CreateMockTransport(response);

            var pipeline = new HttpPipeline(mockTransport, new[] { new LoggingPolicy(logContent: false) });

            using (Request request = pipeline.CreateRequest())
            {
                request.SetRequestLine(RequestMethod.Get, new Uri("https://contoso.a.io"));
                request.Content = HttpPipelineRequestContent.Create(Encoding.UTF8.GetBytes("Hello world"));

                await SendRequestAsync(pipeline, request);
            }

            AssertNoContentLogged();
        }
        public async Task StreamRequestContentCanBeSentMultipleTimes()
        {
            var requests            = new List <HttpRequestMessage>();
            var httpResponseMessage = new HttpResponseMessage(HttpStatusCode.OK);

            var mockHandler = new MockHttpClientHandler(httpRequestMessage =>
            {
                requests.Add(httpRequestMessage);
                return(Task.FromResult(httpResponseMessage));
            });

            var     transport = new HttpClientTransport(new HttpClient(mockHandler));
            Request request   = transport.CreateRequest();

            request.Content = HttpPipelineRequestContent.Create(new MemoryStream(new byte[] { 1, 2, 3 }));
            request.SetRequestLine(RequestMethod.Get, new Uri("http://example.com:340"));

            await ExecuteRequest(request, transport);
            await ExecuteRequest(request, transport);

            Assert.AreEqual(2, requests.Count);
        }
Exemple #24
0
        public async Task CanGetAndSetContent()
        {
            byte[] requestBytes = null;
            var    mockHandler  = new MockHttpClientHandler(
                async httpRequestMessage => {
                requestBytes = await httpRequestMessage.Content.ReadAsByteArrayAsync();
            });

            var bytes     = Encoding.ASCII.GetBytes("Hello world");
            var content   = HttpPipelineRequestContent.Create(bytes);
            var transport = new HttpClientTransport(new HttpClient(mockHandler));
            var request   = transport.CreateRequest(null);

            request.SetRequestLine(HttpPipelineMethod.Get, new Uri("http://example.com:340"));
            request.Content = content;

            Assert.AreEqual(content, request.Content);

            await ExecuteRequest(request, transport);

            CollectionAssert.AreEqual(bytes, requestBytes);
        }
Exemple #25
0
        private Request CreateClientSecretAuthRequest(string tenantId, string clientId, string clientSecret, string[] scopes)
        {
            Request request = _pipeline.CreateRequest();

            request.Method = RequestMethod.Post;

            request.Headers.Add(HttpHeader.Common.FormUrlEncodedContentType);

            request.UriBuilder.Uri = _options.AuthorityHost;

            request.UriBuilder.AppendPath(tenantId);

            request.UriBuilder.AppendPath("/oauth2/v2.0/token");

            var bodyStr = $"response_type=token&grant_type=client_credentials&client_id={Uri.EscapeDataString(clientId)}&client_secret={Uri.EscapeDataString(clientSecret)}&scope={Uri.EscapeDataString(string.Join(" ", scopes))}";

            ReadOnlyMemory <byte> content = Encoding.UTF8.GetBytes(bodyStr).AsMemory();

            request.Content = HttpPipelineRequestContent.Create(content);

            return(request);
        }
        public void StreamCopyTo()
        {
            int size             = 100;
            var sourceArray      = new byte[size];
            var destinationArray = new byte[size * 2];

            new Random(100).NextBytes(sourceArray);

            var source      = new MemoryStream(sourceArray);
            var destination = new MemoryStream(destinationArray);
            var content     = HttpPipelineRequestContent.Create(source);

            content.WriteTo(destination, default);

            for (int i = 0; i < size; i++)
            {
                Assert.AreEqual(sourceArray[i], destinationArray[i]);
            }
            for (int i = size; i < destinationArray.Length; i++)
            {
                Assert.AreEqual(0, destinationArray[i]);
            }
        }
        public async Task ContentIsNotLoggedAsTextWhenDisabled()
        {
            var response = new MockResponse(500);

            response.ContentStream = new MemoryStream(new byte[] { 1, 2, 3 });
            response.AddHeader(new HttpHeader("Content-Type", "text/json"));

            MockTransport mockTransport = CreateMockTransport(response);

            var pipeline = new HttpPipeline(mockTransport, new[] { new LoggingPolicy(logContent: false, int.MaxValue) });

            using (Request request = pipeline.CreateRequest())
            {
                request.Method = RequestMethod.Get;
                request.Uri.Assign(new Uri("https://contoso.a.io"));
                request.Content = HttpPipelineRequestContent.Create(Encoding.UTF8.GetBytes("Hello world"));
                request.Headers.Add("Content-Type", "text/json");

                await SendRequestAsync(pipeline, request);
            }

            AssertNoContentLogged();
        }
Exemple #28
0
        private Request CreateClientSecretAuthRequest(string tenantId, string clientId, string clientSecret, string[] scopes)
        {
            Request request = _pipeline.CreateRequest();

            request.Method = HttpPipelineMethod.Post;

            request.UriBuilder.Uri = _options.AuthorityHost;

            request.UriBuilder.AppendPath(tenantId);

            request.UriBuilder.AppendPath("/oauth2/v2.0/token");

            ReadOnlyMemory <byte> content = Serialize(
                ("response_type", "token"),
                ("grant_type", "client_credentials"),
                ("client_id", clientId),
                ("client_secret", clientSecret),
                ("scopes", string.Join(" ", scopes)));

            request.Content = HttpPipelineRequestContent.Create(content);

            return(request);
        }
Exemple #29
0
        private Request CreateClientCertificateAuthRequest(string tenantId, string clientId, X509Certificate2 clientCertficate, string[] scopes)
        {
            Request request = _pipeline.CreateRequest();

            request.Method = RequestMethod.Post;

            request.Headers.Add(HttpHeader.Common.FormUrlEncodedContentType);

            request.Uri.Reset(_options.AuthorityHost);

            request.Uri.AppendPath(tenantId);

            request.Uri.AppendPath("/oauth2/v2.0/token");

            string clientAssertion = CreateClientAssertionJWT(clientId, request.Uri.ToString(), clientCertficate);

            var bodyStr = $"response_type=token&grant_type=client_credentials&client_id={Uri.EscapeDataString(clientId)}&client_assertion_type={Uri.EscapeDataString(ClientAssertionType)}&client_assertion={Uri.EscapeDataString(clientAssertion)}&scope={Uri.EscapeDataString(string.Join(" ", scopes))}";

            ReadOnlyMemory <byte> content = Encoding.UTF8.GetBytes(bodyStr).AsMemory();

            request.Content = HttpPipelineRequestContent.Create(content);

            return(request);
        }
Exemple #30
0
        public async Task GettingErrorRequestProducesEvents()
        {
            var response = new MockResponse(500);

            response.SetContent(new byte[] { 6, 7, 8, 9, 0 });
            response.AddHeader(new HttpHeader("Custom-Response-Header", "Improved value"));

            MockTransport mockTransport = CreateMockTransport(response);

            var    pipeline  = new HttpPipeline(mockTransport, new[] { new LoggingPolicy(logContent: true, int.MaxValue, s_allowedHeaders, s_allowedQueryParameters) });
            string requestId = null;

            await SendRequestAsync(pipeline, request =>
            {
                request.Method = RequestMethod.Get;
                request.Uri.Reset(new Uri("https://contoso.a.io"));
                request.Headers.Add("Date", "3/26/2019");
                request.Headers.Add("Custom-Header", "Value");
                request.Content = HttpPipelineRequestContent.Create(new byte[] { 1, 2, 3, 4, 5 });
                requestId       = request.ClientRequestId;
            });

            EventWrittenEventArgs e = _listener.SingleEventById(ErrorResponseEvent);

            Assert.AreEqual(EventLevel.Error, e.Level);
            Assert.AreEqual("ErrorResponse", e.EventName);
            Assert.AreEqual(requestId, e.GetProperty <string>("requestId"));
            Assert.AreEqual(e.GetProperty <int>("status"), 500);
            StringAssert.Contains($"Custom-Response-Header:Improved value{Environment.NewLine}", e.GetProperty <string>("headers"));

            e = _listener.SingleEventById(ErrorResponseContentEvent);
            Assert.AreEqual(EventLevel.Informational, e.Level);
            Assert.AreEqual("ErrorResponseContent", e.EventName);
            Assert.AreEqual(requestId, e.GetProperty <string>("requestId"));
            CollectionAssert.AreEqual(new byte[] { 6, 7, 8, 9, 0 }, e.GetProperty <byte[]>("content"));
        }