コード例 #1
0
        public async Task ReadFormAsync_SimpleData_ReturnsParsedFormCollection()
        {
            // Arrange
            var formContent = Encoding.UTF8.GetBytes("foo=bar&baz=2");
            var context     = new DefaultHttpContext();

            context.Request.ContentType = "application/x-www-form-urlencoded; charset=utf-8";
            context.Request.Body        = new MemoryStream(formContent);

            // Not cached yet
            var formFeature = context.GetFeature <IFormFeature>();

            Assert.Null(formFeature);

            // Act
            var formCollection = await context.Request.ReadFormAsync();

            // Assert
            Assert.Equal("bar", formCollection["foo"]);
            Assert.Equal("2", formCollection["baz"]);

            // Cached
            formFeature = context.GetFeature <IFormFeature>();
            Assert.NotNull(formFeature);
            Assert.NotNull(formFeature.Form);
            Assert.Same(formFeature.Form, formCollection);
        }
コード例 #2
0
        public async Task ReadForm_MultipartWithField_ReturnsParsedFormCollection()
        {
            var formContent = Encoding.UTF8.GetBytes(MultipartFormWithField);
            var context     = new DefaultHttpContext();

            context.Request.ContentType = MultipartContentType;
            context.Request.Body        = new MemoryStream(formContent);

            // Not cached yet
            var formFeature = context.GetFeature <IFormFeature>();

            Assert.Null(formFeature);

            var formCollection = context.Request.Form;

            Assert.NotNull(formCollection);

            // Cached
            formFeature = context.GetFeature <IFormFeature>();
            Assert.NotNull(formFeature);
            Assert.NotNull(formFeature.Form);
            Assert.Same(formCollection, formFeature.Form);
            Assert.Same(formCollection, await context.Request.ReadFormAsync());

            // Content
            Assert.Equal(1, formCollection.Count);
            Assert.Equal("Foo", formCollection["description"]);

            Assert.NotNull(formCollection.Files);
            Assert.Equal(0, formCollection.Files.Count);
        }
コード例 #3
0
        public async Task UpdatesTraceIdentifier_IfNullOrEmpty(string requestId)
        {
            // Arrange
            var requestIdentifierFeature = new HttpRequestIdentifierFeature()
            {
                TraceIdentifier = requestId
            };
            var features = new FeatureCollection();

            features.Add(typeof(IHttpRequestIdentifierFeature), requestIdentifierFeature);
            features.Add(typeof(IHttpRequestFeature), new HttpRequestFeature());
            features.Add(typeof(IHttpResponseFeature), new HttpResponseFeature());
            var context       = new DefaultHttpContext(features);
            var loggerFactory = new LoggerFactory();

            loggerFactory.AddProvider(new ElmLoggerProvider(new ElmStore(), new ElmOptions()));

            // Act & Assert
            var errorPageMiddleware = new ElmCaptureMiddleware((innerContext) =>
            {
                var feature = innerContext.GetFeature <IHttpRequestIdentifierFeature>();
                Assert.NotNull(feature);
                Assert.False(string.IsNullOrEmpty(feature.TraceIdentifier));
                return(Task.FromResult(0));
            }, loggerFactory, new TestElmOptions());

            await errorPageMiddleware.Invoke(context);

            Assert.Equal(requestId, context.GetFeature <IHttpRequestIdentifierFeature>().TraceIdentifier);
        }
コード例 #4
0
        public async Task UsesIdentifierFeature_IfAlreadyPresentOnContext()
        {
            // Arrange
            var requestIdentifierFeature = new HttpRequestIdentifierFeature()
            {
                TraceIdentifier = Guid.NewGuid().ToString()
            };
            var features = new FeatureCollection();

            features.Add(typeof(IHttpRequestFeature), new HttpRequestFeature());
            features.Add(typeof(IHttpRequestIdentifierFeature), requestIdentifierFeature);
            features.Add(typeof(IHttpResponseFeature), new HttpResponseFeature());
            var context       = new DefaultHttpContext(features);
            var loggerFactory = new LoggerFactory();

            loggerFactory.AddProvider(new ElmLoggerProvider(new ElmStore(), new ElmOptions()));

            // Act & Assert
            var errorPageMiddleware = new ElmCaptureMiddleware((innerContext) =>
            {
                Assert.Same(requestIdentifierFeature, innerContext.GetFeature <IHttpRequestIdentifierFeature>());
                return(Task.FromResult(0));
            }, loggerFactory, new TestElmOptions());

            await errorPageMiddleware.Invoke(context);

            Assert.Same(requestIdentifierFeature, context.GetFeature <IHttpRequestIdentifierFeature>());
        }
コード例 #5
0
        public Task ExpectedKeysAreAvailable()
        {
            var handler = new ClientHandler(env =>
            {
                var context = new DefaultHttpContext((IFeatureCollection)env);

                // TODO: Assert.True(context.RequestAborted.CanBeCanceled);
                Assert.Equal("HTTP/1.1", context.Request.Protocol);
                Assert.Equal("GET", context.Request.Method);
                Assert.Equal("https", context.Request.Scheme);
                Assert.Equal("/A/Path", context.Request.PathBase.Value);
                Assert.Equal("/and/file.txt", context.Request.Path.Value);
                Assert.Equal("?and=query", context.Request.QueryString.Value);
                Assert.NotNull(context.Request.Body);
                Assert.NotNull(context.Request.Headers);
                Assert.NotNull(context.Response.Headers);
                Assert.NotNull(context.Response.Body);
                Assert.Equal(200, context.Response.StatusCode);
                Assert.Null(context.GetFeature <IHttpResponseFeature>().ReasonPhrase);
                Assert.Equal("example.com", context.Request.Host.Value);

                return(Task.FromResult(0));
            }, new PathString("/A/Path"));
            var httpClient = new HttpClient(handler);

            return(httpClient.GetAsync("https://example.com/A/Path/and/file.txt?and=query"));
        }
コード例 #6
0
        private static HttpRequest CreateRequest(IDictionary <string, string[]> headers)
        {
            var context = new DefaultHttpContext();

            context.GetFeature <IHttpRequestFeature>().Headers = headers;
            return(context.Request);
        }
コード例 #7
0
        public async Task ReadFormAsync_MultipartWithFieldAndFile_ReturnsParsedFormCollection()
        {
            var formContent = Encoding.UTF8.GetBytes(MultipartFormWithFieldAndFile);
            var context     = new DefaultHttpContext();

            context.Request.ContentType = MultipartContentType;
            context.Request.Body        = new MemoryStream(formContent);

            // Not cached yet
            var formFeature = context.GetFeature <IFormFeature>();

            Assert.Null(formFeature);

            var formCollection = await context.Request.ReadFormAsync();

            Assert.NotNull(formCollection);

            // Cached
            formFeature = context.GetFeature <IFormFeature>();
            Assert.NotNull(formFeature);
            Assert.NotNull(formFeature.Form);
            Assert.Same(formFeature.Form, formCollection);
            Assert.Same(formCollection, context.Request.Form);

            // Content
            Assert.Equal(1, formCollection.Count);
            Assert.Equal("Foo", formCollection["description"]);

            Assert.NotNull(formCollection.Files);
            Assert.Equal(1, formCollection.Files.Count);

            var file = formCollection.Files["myfile1"];

            Assert.Equal("text/html", file.ContentType);
            Assert.Equal(@"form-data; name=""myfile1""; filename=""temp.html""", file.ContentDisposition);
            var body = file.OpenReadStream();

            using (var reader = new StreamReader(body))
            {
                var content = reader.ReadToEnd();
                Assert.Equal(content, "<html><body>Hello World</body></html>");
            }
        }
コード例 #8
0
        public async Task SetsNewIdentifierFeature_IfNotPresentOnContext()
        {
            // Arrange
            var context       = new DefaultHttpContext();
            var loggerFactory = new LoggerFactory();

            loggerFactory.AddProvider(new ElmLoggerProvider(new ElmStore(), new ElmOptions()));

            // Act & Assert
            var errorPageMiddleware = new ElmCaptureMiddleware((innerContext) =>
            {
                var feature = innerContext.GetFeature <IHttpRequestIdentifierFeature>();
                Assert.NotNull(feature);
                Assert.False(string.IsNullOrEmpty(feature.TraceIdentifier));
                return(Task.FromResult(0));
            }, loggerFactory, new TestElmOptions());

            await errorPageMiddleware.Invoke(context);

            Assert.Null(context.GetFeature <IHttpRequestIdentifierFeature>());
        }