public async Task SendingRequestProducesEvents()
        {
            var options = new HttpPipelineOptions(new HttpClientTransport(new HttpClient(new MockHttpMessageHandler())));

            options.LoggingPolicy = LoggingPolicy.Shared;

            var pipeline = options.Build("test", "1.0.0");

            using (var request = pipeline.CreateRequest())
            {
                request.SetRequestLine(HttpVerb.Get, new Uri("https://contoso.a.io"));
                var response = await pipeline.SendRequestAsync(request, CancellationToken.None);

                Assert.AreEqual(500, response.Status);
            }

            Assert.True(_listener.EventData.Any(e =>
                                                e.EventId == 3 &&
                                                e.EventName == "ProcessingRequest" &&
                                                GetStringProperty(e, "request").Contains("https://contoso.a.io")));

            Assert.True(_listener.EventData.Any(e =>
                                                e.EventId == 4 &&
                                                e.EventName == "ProcessingResponse" &&
                                                GetStringProperty(e, "response").Contains("500")));

            Assert.True(_listener.EventData.Any(e =>
                                                e.EventId == 6 &&
                                                e.EventName == "ErrorResponse" &&
                                                (int)GetProperty(e, "status") == 500));
        }
예제 #2
0
        public static HttpPipelineOptions CreateDefaultPipelineOptions()
        {
            var options = new HttpPipelineOptions(HttpClientTransport.Shared);

            options.LoggingPolicy = LoggingPolicy.Shared;
            options.RetryPolicy   = s_defaultRetryPolicy;
            return(options);
        }
예제 #3
0
        private static (ConfigurationClient service, TestPool <byte> pool) CreateTestService(MockHttpClientTransport transport)
        {
            HttpPipelineOptions options = ConfigurationClient.CreateDefaultPipelineOptions();
            var testPool = new TestPool <byte>();

            options.AddService(testPool, typeof(ArrayPool <byte>));

            options.Transport = transport;

            var service = new ConfigurationClient(connectionString, options);

            return(service, testPool);
        }
예제 #4
0
        public ConfigurationClient(string connectionString, HttpPipelineOptions options)
        {
            if (connectionString == null)
            {
                throw new ArgumentNullException(nameof(connectionString));
            }
            if (options == null)
            {
                throw new ArgumentNullException(nameof(options));
            }

            _pipeline = options.Build(ComponentName, ComponentVersion);
            ParseConnectionString(connectionString, out _baseUri, out _credential, out _secret);
        }
        protected static Task <Response> SendRequest(MockTransport mockTransport, HttpPipelinePolicy policy)
        {
            var options = new HttpPipelineOptions(mockTransport);

            options.RetryPolicy = policy;

            var pipeline = options.Build(typeof(FixedRetryPolicyTests).Assembly);

            var httpPipelineRequest = pipeline.CreateRequest();

            httpPipelineRequest.SetRequestLine(HttpVerb.Get, new Uri("http://example.com/"));

            return(pipeline.SendRequestAsync(httpPipelineRequest, CancellationToken.None));
        }
예제 #6
0
        public void Basics()
        {
            var options = new HttpPipelineOptions(new MockTransport(500, 1));

            options.RetryPolicy   = new CustomRetryPolicy();
            options.LoggingPolicy = new LoggingPolicy();

            var listener = new TestEventListener();

            listener.EnableEvents(EventLevel.LogAlways);

            var pipeline = options.Build("test", "1.0.0");

            using (var message = pipeline.CreateMessage(cancellation: default))
예제 #7
0
        public async Task Basics()
        {
            var options = new HttpPipelineOptions(new MockTransport(500, 1));

            options.RetryPolicy = new CustomRetryPolicy();

            var pipeline = options.Build("test", "1.0.0");

            var request = pipeline.CreateRequest();

            request.SetRequestLine(HttpVerb.Get, new Uri("https://contoso.a.io"));
            var response = await pipeline.SendRequestAsync(request, CancellationToken.None);

            Assert.AreEqual(1, response.Status);
        }
예제 #8
0
        public ConfigurationClient(string connectionString, HttpPipelineOptions options)
        {
            if (connectionString == null)
            {
                throw new ArgumentNullException(nameof(connectionString));
            }
            if (options == null)
            {
                throw new ArgumentNullException(nameof(options));
            }

            ParseConnectionString(connectionString, out _baseUri, out var credential, out var secret);

            options.AddPerCallPolicy(ClientRequestIdPolicy.Singleton);
            options.AddPerCallPolicy(new AuthenticationPolicy(credential, secret));

            _pipeline = options.Build(ComponentName, ComponentVersion);
        }
예제 #9
0
        public async Task ComponentNameAndVersionReadFromAssembly()
        {
            string userAgent = null;

            var mockTransport = new MockTransport(
                req => {
                Assert.True(req.TryGetHeader("User-Agent", out userAgent));
                return(new MockResponse(200));
            });

            var pipeline = new HttpPipelineOptions(mockTransport).Build(typeof(PipelineTests).Assembly);

            var request = pipeline.CreateRequest();

            request.SetRequestLine(HttpVerb.Get, new Uri("https://contoso.a.io"));
            await pipeline.SendRequestAsync(request, CancellationToken.None);

            var assemblyVersion = Assembly.GetExecutingAssembly().GetName().Version.ToString();

            Assert.AreEqual(userAgent, $"azsdk-net-base-test/{assemblyVersion} ({RuntimeInformation.FrameworkDescription}; {RuntimeInformation.OSDescription})");
        }
예제 #10
0
        public async Task SendingRequestProducesEvents()
        {
            var handler = new MockHttpClientHandler(httpRequestMessage =>
            {
                var response     = new HttpResponseMessage((HttpStatusCode)500);
                response.Content = new ByteArrayContent(new byte[] { 6, 7, 8, 9, 0 });
                response.Headers.Add("Custom-Response-Header", "Improved value");
                return(Task.FromResult(response));
            });
            var transport = new HttpClientTransport(new HttpClient(handler));
            var options   = new HttpPipelineOptions(transport)
            {
                LoggingPolicy = LoggingPolicy.Shared
            };

            var    pipeline = options.Build("test", "1.0.0");
            string requestId;

            using (var request = pipeline.CreateRequest())
            {
                request.SetRequestLine(HttpVerb.Get, new Uri("https://contoso.a.io"));
                request.AddHeader("Date", "3/26/2019");
                request.AddHeader("Custom-Header", "Value");
                request.Content = HttpPipelineRequestContent.Create(new byte[] { 1, 2, 3, 4, 5 });
                requestId       = request.RequestId;

                var response = await pipeline.SendRequestAsync(request, CancellationToken.None);

                Assert.AreEqual(500, response.Status);
            }

            var e = _listener.SingleEventById(1);

            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(2);
            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(5);
            Assert.AreEqual(EventLevel.Informational, e.Level);
            Assert.AreEqual("Response", 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(6);
            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"));

            e = _listener.SingleEventById(8);
            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(9);
            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"));
        }
        public async Task SendingRequestProducesEvents()
        {
            var handler = new MockHttpClientHandler(httpRequestMessage => {
                var response     = new HttpResponseMessage((HttpStatusCode)500);
                response.Content = new ByteArrayContent(new byte[] { 6, 7, 8, 9, 0 });
                response.Headers.Add("Custom-Response-Header", "Improved value");
                return(Task.FromResult(response));
            });
            var transport = new HttpClientTransport(new HttpClient(handler));
            var options   = new HttpPipelineOptions(transport)
            {
                LoggingPolicy = LoggingPolicy.Shared
            };

            var    pipeline = options.Build("test", "1.0.0");
            string requestId;

            using (var request = pipeline.CreateRequest())
            {
                request.SetRequestLine(HttpVerb.Get, new Uri("https://contoso.a.io"));
                request.AddHeader("Date", "3/26/2019");
                request.AddHeader("Custom-Header", "Value");
                request.Content = HttpPipelineRequestContent.Create(new byte[] { 1, 2, 3, 4, 5 });
                requestId       = request.RequestId;

                var response = await pipeline.SendRequestAsync(request, CancellationToken.None);

                Assert.AreEqual(500, response.Status);
            }

            Assert.True(_listener.EventData.Any(e =>
                                                e.EventId == 1 &&
                                                e.Level == EventLevel.Informational &&
                                                e.EventName == "Request" &&
                                                GetStringProperty(e, "requestId").Equals(requestId) &&
                                                GetStringProperty(e, "uri").Equals("https://contoso.a.io/") &&
                                                GetStringProperty(e, "method").Equals("GET") &&
                                                GetStringProperty(e, "headers").Contains($"Date:3/26/2019{Environment.NewLine}") &&
                                                GetStringProperty(e, "headers").Contains($"Custom-Header:Value{Environment.NewLine}")
                                                ));

            Assert.True(_listener.EventData.Any(e =>
                                                e.EventId == 2 &&
                                                e.Level == EventLevel.Verbose &&
                                                e.EventName == "RequestContent" &&
                                                GetStringProperty(e, "requestId").Equals(requestId) &&
                                                ((byte[])GetProperty(e, "content")).SequenceEqual(new byte[] { 1, 2, 3, 4, 5 }))
                        );

            Assert.True(_listener.EventData.Any(e =>
                                                e.EventId == 5 &&
                                                e.Level == EventLevel.Informational &&
                                                e.EventName == "Response" &&
                                                GetStringProperty(e, "requestId").Equals(requestId) &&
                                                (int)GetProperty(e, "status") == 500 &&
                                                GetStringProperty(e, "headers").Contains($"Custom-Response-Header:Improved value{Environment.NewLine}")
                                                ));

            Assert.True(_listener.EventData.Any(e =>
                                                e.EventId == 6 &&
                                                e.Level == EventLevel.Verbose &&
                                                e.EventName == "ResponseContent" &&
                                                GetStringProperty(e, "requestId").Equals(requestId) &&
                                                ((byte[])GetProperty(e, "content")).SequenceEqual(new byte[] { 6, 7, 8, 9, 0 }))
                        );

            Assert.True(_listener.EventData.Any(e =>
                                                e.EventId == 8 &&
                                                e.Level == EventLevel.Error &&
                                                e.EventName == "ErrorResponse" &&
                                                GetStringProperty(e, "requestId").Equals(requestId) &&
                                                (int)GetProperty(e, "status") == 500 &&
                                                GetStringProperty(e, "headers").Contains($"Custom-Response-Header:Improved value{Environment.NewLine}")
                                                ));

            Assert.True(_listener.EventData.Any(e =>
                                                e.EventId == 9 &&
                                                e.Level == EventLevel.Informational &&
                                                e.EventName == "ErrorResponseContent" &&
                                                GetStringProperty(e, "requestId").Equals(requestId) &&
                                                ((byte[])GetProperty(e, "content")).SequenceEqual(new byte[] { 6, 7, 8, 9, 0 }))
                        );
        }