/
githubmirror
/
aspnetcore
Обзор
Документация
Войти
/
githubmirror
/
aspnetcore
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/Middleware/Rewrite/test/IISUrlRewrite/ServerVariableTests.cs
182 строки
9 KB
Afshin Mehrabani
Add SERVER_NAME to IISUrlRewrite (#51020)
03 окт 2023, 19:08
Не верифицирован
03 окт 2023, 19:08
8ce579f
Код
Авторство
О чём код?
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Text.RegularExpressions; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http.Features; using Microsoft.AspNetCore.Rewrite.IISUrlRewrite; namespace Microsoft.AspNetCore.Rewrite.Tests.IISUrlRewrite; public class ServerVariableTests { [Theory] [InlineData("CONTENT_LENGTH", "10", (int)UriMatchPart.Path)] [InlineData("CONTENT_TYPE", "json", (int)UriMatchPart.Path)] [InlineData("HTTP_ACCEPT", "accept", (int)UriMatchPart.Path)] [InlineData("HTTP_COOKIE", "cookie", (int)UriMatchPart.Path)] [InlineData("HTTP_HOST", "example.com", (int)UriMatchPart.Path)] [InlineData("HTTP_REFERER", "referer", (int)UriMatchPart.Path)] [InlineData("HTTP_USER_AGENT", "useragent", (int)UriMatchPart.Path)] [InlineData("HTTP_CONNECTION", "connection", (int)UriMatchPart.Path)] [InlineData("HTTP_URL", "/foo", (int)UriMatchPart.Path)] [InlineData("HTTP_URL", "http://example.com/foo?bar=1", (int)UriMatchPart.Full)] [InlineData("QUERY_STRING", "bar=1", (int)UriMatchPart.Path)] [InlineData("REQUEST_FILENAME", "/foo", (int)UriMatchPart.Path)] [InlineData("REQUEST_URI", "/foo", (int)UriMatchPart.Path)] [InlineData("REQUEST_URI", "http://example.com/foo?bar=1", (int)UriMatchPart.Full)] [InlineData("REQUEST_METHOD", "GET", (int)UriMatchPart.Full)] [InlineData("SERVER_NAME", "example.com", (int)UriMatchPart.Full)] public void CheckServerVariableParsingAndApplication(string variable, string expected, int uriMatchPart) { // Arrange and Act var testParserContext = new ParserContext("test"); var serverVar = ServerVariables.FindServerVariable(variable, testParserContext, (UriMatchPart)uriMatchPart, true); var lookup = serverVar.Evaluate(CreateTestRewriteContext(), CreateTestRuleMatch().BackReferences, CreateTestCondMatch().BackReferences); // Assert Assert.Equal(expected, lookup); } [Theory] [InlineData("CONTENT_LENGTH", "20", (int)UriMatchPart.Path)] [InlineData("CONTENT_TYPE", "text/xml", (int)UriMatchPart.Path)] [InlineData("HTTP_ACCEPT", "other-accept", (int)UriMatchPart.Path)] [InlineData("HTTP_COOKIE", "other-cookie", (int)UriMatchPart.Path)] [InlineData("HTTP_HOST", "otherexample.com", (int)UriMatchPart.Path)] [InlineData("HTTP_REFERER", "other-referer", (int)UriMatchPart.Path)] [InlineData("HTTP_USER_AGENT", "other-useragent", (int)UriMatchPart.Path)] [InlineData("HTTP_CONNECTION", "other-connection", (int)UriMatchPart.Path)] [InlineData("HTTP_URL", "http://otherexample.com/other-foo?bar=2", (int)UriMatchPart.Full)] [InlineData("HTTP_URL", "http://otherexample.com/other-foo?bar=2", (int)UriMatchPart.Path)] [InlineData("QUERY_STRING", "bar=2", (int)UriMatchPart.Path)] [InlineData("REQUEST_FILENAME", "/other-foo", (int)UriMatchPart.Path)] [InlineData("REQUEST_URI", "/other-foo", (int)UriMatchPart.Path)] [InlineData("REQUEST_URI", "/other-foo", (int)UriMatchPart.Full)] [InlineData("REQUEST_METHOD", "POST", (int)UriMatchPart.Full)] [InlineData("SERVER_NAME", "otherexample.com", (int)UriMatchPart.Full)] public void CheckServerVariableFeatureHasPrecedenceWhenEnabled(string variable, string expected, int uriMatchPart) { // Arrange and Act var testParserContext = new ParserContext("test"); var serverVar = ServerVariables.FindServerVariable(variable, testParserContext, (UriMatchPart)uriMatchPart, false); var httpContext = CreateTestHttpContext(); httpContext.Features.Set<IServerVariablesFeature>(new TestServerVariablesFeature(new Dictionary<string, string> { ["CONTENT_LENGTH"] = "20", ["CONTENT_TYPE"] = "text/xml", ["HTTP_ACCEPT"] = "other-accept", ["HTTP_COOKIE"] = "other-cookie", ["HTTP_HOST"] = "otherexample.com", ["HTTP_REFERER"] = "other-referer", ["HTTP_USER_AGENT"] = "other-useragent", ["HTTP_CONNECTION"] = "other-connection", ["HTTP_URL"] = "http://otherexample.com/other-foo?bar=2", ["QUERY_STRING"] = "bar=2", ["REQUEST_FILENAME"] = "/other-foo", ["REQUEST_URI"] = "/other-foo", ["REQUEST_METHOD"] = "POST", ["SERVER_NAME"] = "otherexample.com", })); var rewriteContext = CreateTestRewriteContext(httpContext); var lookup = serverVar.Evaluate(rewriteContext, CreateTestRuleMatch().BackReferences, CreateTestCondMatch().BackReferences); // Assert Assert.Equal(expected, lookup); } [Theory] [InlineData("CONTENT_LENGTH", "10", (int)UriMatchPart.Path)] [InlineData("CONTENT_TYPE", "json", (int)UriMatchPart.Path)] [InlineData("HTTP_ACCEPT", "accept", (int)UriMatchPart.Path)] [InlineData("HTTP_COOKIE", "cookie", (int)UriMatchPart.Path)] [InlineData("HTTP_HOST", "example.com", (int)UriMatchPart.Path)] [InlineData("HTTP_REFERER", "referer", (int)UriMatchPart.Path)] [InlineData("HTTP_USER_AGENT", "useragent", (int)UriMatchPart.Path)] [InlineData("HTTP_CONNECTION", "connection", (int)UriMatchPart.Path)] [InlineData("HTTP_URL", "/foo", (int)UriMatchPart.Path)] [InlineData("HTTP_URL", "http://example.com/foo?bar=1", (int)UriMatchPart.Full)] [InlineData("QUERY_STRING", "bar=1", (int)UriMatchPart.Path)] [InlineData("REQUEST_FILENAME", "/foo", (int)UriMatchPart.Path)] [InlineData("REQUEST_URI", "/foo", (int)UriMatchPart.Path)] [InlineData("REQUEST_URI", "http://example.com/foo?bar=1", (int)UriMatchPart.Full)] [InlineData("REQUEST_METHOD", "GET", (int)UriMatchPart.Full)] [InlineData("SERVER_NAME", "example.com", (int)UriMatchPart.Full)] public void CheckServerVariableFeatureIsntUsedWhenDisabled(string variable, string expected, int uriMatchPart) { // Arrange and Act var testParserContext = new ParserContext("test"); var serverVar = ServerVariables.FindServerVariable(variable, testParserContext, (UriMatchPart)uriMatchPart, true); var httpContext = CreateTestHttpContext(); httpContext.Features.Set<IServerVariablesFeature>(new TestServerVariablesFeature(new Dictionary<string, string> { ["CONTENT_LENGTH"] = "20", ["CONTENT_TYPE"] = "text/xml", ["HTTP_ACCEPT"] = "other-accept", ["HTTP_COOKIE"] = "other-cookie", ["HTTP_HOST"] = "otherexample.com", ["HTTP_REFERER"] = "other-referer", ["HTTP_USER_AGENT"] = "other-useragent", ["HTTP_CONNECTION"] = "other-connection", ["HTTP_URL"] = "http://otherexample.com/other-foo?bar=2", ["QUERY_STRING"] = "bar=2", ["REQUEST_FILENAME"] = "/other-foo", ["REQUEST_URI"] = "/other-foo", ["REQUEST_METHOD"] = "POST" })); var rewriteContext = CreateTestRewriteContext(httpContext); var lookup = serverVar.Evaluate(rewriteContext, CreateTestRuleMatch().BackReferences, CreateTestCondMatch().BackReferences); // Assert Assert.Equal(expected, lookup); } private static HttpContext CreateTestHttpContext() { var context = new DefaultHttpContext(); context.Request.Method = HttpMethods.Get; context.Request.Scheme = "http"; context.Request.Host = new HostString("example.com"); context.Request.Path = PathString.FromUriComponent("/foo"); context.Request.QueryString = QueryString.FromUriComponent("?bar=1"); context.Request.ContentLength = 10; context.Request.ContentType = "json"; context.Request.Headers.Accept = "accept"; context.Request.Headers.Cookie = "cookie"; context.Request.Headers.Referer = "referer"; context.Request.Headers.UserAgent = "useragent"; context.Request.Headers.Connection = "connection"; return context; } private RewriteContext CreateTestRewriteContext(HttpContext context = null) { return new RewriteContext { HttpContext = context ?? CreateTestHttpContext() }; } private static MatchResults CreateTestRuleMatch() { var match = Regex.Match("foo/bar/baz", "(.*)/(.*)/(.*)"); return new MatchResults(match.Success, new BackReferenceCollection(match.Groups)); } private static MatchResults CreateTestCondMatch() { var match = Regex.Match("foo/bar/baz", "(.*)/(.*)/(.*)"); return new MatchResults(match.Success, new BackReferenceCollection(match.Groups)); } [Fact] private void EmptyQueryStringCheck() { var context = new DefaultHttpContext(); var rewriteContext = new RewriteContext { HttpContext = context }; var testParserContext = new ParserContext("test"); var serverVar = ServerVariables.FindServerVariable("QUERY_STRING", testParserContext, UriMatchPart.Path, true); var lookup = serverVar.Evaluate(rewriteContext, CreateTestRuleMatch().BackReferences, CreateTestCondMatch().BackReferences); Assert.Equal(string.Empty, lookup); } }