private async Task <int> SetStatusCodeAndInvoke(int expectedStatusCode)
        {
            _httpContext.Response.StatusCode = expectedStatusCode;
            await _sut.Invoke(_httpContext);

            return(expectedStatusCode);
        }
 public async Task HttpRequestDuration()
 {
     for (var i = 0; i < RequestCount; i++)
     {
         await _durationMiddleware.Invoke(new DefaultHttpContext());
     }
 }
        public async Task Given_request_populates_labels_supplied_out_of_order_correctly()
        {
            var histogram = _factory.CreateHistogram("all_labels_histogram", "", new HistogramConfiguration
            {
                Buckets    = new[] { 1d, 2d, 3d },
                LabelNames = HttpRequestLabelNames.All.Reverse().ToArray()
            });

            var expectedStatusCode = 400;
            var expectedMethod     = "METHOD";
            var expectedAction     = "ACTION";
            var expectedController = "CONTROLLER";

            SetupHttpContext(_httpContext, expectedStatusCode, expectedMethod, expectedAction, expectedController);
            _sut = new HttpRequestDurationMiddleware(_requestDelegate, histogram);

            await _sut.Invoke(_httpContext);

            var labels = histogram.GetAllLabels().Single();

            Assert.AreEqual(expectedStatusCode.ToString(), GetLabelValueOrDefault(labels, HttpRequestLabelNames.Code));
            Assert.AreEqual(expectedMethod, GetLabelValueOrDefault(labels, HttpRequestLabelNames.Method));
            Assert.AreEqual(expectedAction, GetLabelValueOrDefault(labels, HttpRequestLabelNames.Action));
            Assert.AreEqual(expectedController, GetLabelValueOrDefault(labels, HttpRequestLabelNames.Controller));
        }
 private Task SetRequestDurationAndInvoke(Histogram histogram, TimeSpan duration)
 {
     _requestDelegate = context =>
     {
         Thread.Sleep(duration);
         return(Task.CompletedTask);
     };
     _sut = new HttpRequestDurationMiddleware(_requestDelegate, histogram);
     return(_sut.Invoke(_httpContext));
 }
        public async Task Given_request_populates_subset_of_labels_correctly()
        {
            var histogram = _factory.CreateHistogram("all_labels_histogram", "", new HistogramConfiguration
            {
                Buckets    = new[] { 1d, 2d, 3d },
                LabelNames = new[] { HttpRequestLabelNames.Action, HttpRequestLabelNames.Controller }
            });

            var expectedAction     = "ACTION";
            var expectedController = "CONTROLLER";

            SetupHttpContext(_httpContext, 200, "method", expectedAction, expectedController);
            _sut = new HttpRequestDurationMiddleware(_requestDelegate, histogram);

            await _sut.Invoke(_httpContext);

            var labels = histogram.GetAllLabels().Single();

            Assert.IsNull(GetLabelValueOrDefault(labels, HttpRequestLabelNames.Code));
            Assert.IsNull(GetLabelValueOrDefault(labels, HttpRequestLabelNames.Method));
            Assert.AreEqual(expectedAction, GetLabelValueOrDefault(labels, HttpRequestLabelNames.Action));
            Assert.AreEqual(expectedController, GetLabelValueOrDefault(labels, HttpRequestLabelNames.Controller));
        }