示例#1
0
        public void OriginTest()
        {
            const string source = "CONNECT www.example.com:80 HTTP/1.1\r\n";

            HttpRequestLine.TryParse(source, out var line);
            line.Source.Is(line.Source);
            line.GetOrigin().IsNot(line.GetOrigin());
        }
示例#2
0
        public void BrokenRequestLineTest()
        {
            const string source      = "hogeeeee\r\n";
            var          isSucceeded = HttpRequestLine.TryParse(source, out var line);

            isSucceeded.IsFalse();
            line.Source.Is(source);
            line.ToString().Is(source);
        }
示例#3
0
        public void AsteriskFormTest()
        {
            const string source = "OPTIONS * HTTP/1.1\r\n";

            HttpRequestLine.TryParse(source, out var line);
            line.Method.Is(HttpMethod.Options);
            line.HttpVersion.Is(HttpVersion.Version11);
            line.RequestTargetForm.Is(RequestTargetForm.AsteriskForm);
            line.RequestTarget.Is("*");
            line.ToString().Is(source);
        }
示例#4
0
        public void AuthorityForm()
        {
            const string source = "CONNECT www.example.com:80 HTTP/1.1\r\n";

            HttpRequestLine.TryParse(source, out var line);
            line.Method.Is(new HttpMethod("CONNECT"));
            line.HttpVersion.Is(HttpVersion.Version11);
            line.RequestTargetForm.Is(RequestTargetForm.AuthorityForm);
            line.RequestTarget.Is("www.example.com:80");
            line.ToString().Is(source);
        }
示例#5
0
        public void AbsoluteFormTest()
        {
            const string source = "GET http://www.example.org/pub/WWW/TheProject.html HTTP/1.1\r\n";

            HttpRequestLine.TryParse(source, out var line);
            line.Method.Is(HttpMethod.Get);
            line.HttpVersion.Is(HttpVersion.Version11);
            line.RequestTargetForm.Is(RequestTargetForm.AbsoluteForm);
            line.RequestTarget.Is("http://www.example.org/pub/WWW/TheProject.html");
            line.ToString().Is(source);
        }
示例#6
0
        public void OriginFormTest()
        {
            const string source = "GET /where?q=now HTTP/1.1\r\n";

            HttpRequestLine.TryParse(source, out var line);
            line.Method.Is(HttpMethod.Get);
            line.HttpVersion.Is(HttpVersion.Version11);
            line.RequestTargetForm.Is(RequestTargetForm.OriginForm);
            line.RequestTarget.Is("/where?q=now");
            line.ToString().Is(source);
        }
示例#7
0
        /// <summary>
        /// スタートラインを解釈
        /// </summary>
        /// <param name="startLine"></param>
        protected override void ParseStartLine(string startLine)
        {
            var isParseSucceeded = HttpRequestLine.TryParse(startLine, out var requestLine);

            this.RequestLine = requestLine;
            if (!isParseSucceeded)
            {
                Debug.WriteLine($"###start###{startLine}###end###");
                throw new BadRequestException("Invalid Request Line", this.GetRequest());
            }
        }
示例#8
0
        public void OriginTest()
        {
            const string lineSource = "GET / HTTP/1.1\r\n";

            HttpRequestLine.TryParse(lineSource, out var line);
            var headers = HttpHeaders.Empty;

            headers.Host.Value = "example.com";
            var request = new HttpRequest(line, headers, new byte[0], HttpHeaders.Empty);

            // Request 系は BadRequest への対処として Source プロパティを持つ
            request.Source.Is(request.Source);
            request.GetOrigin().IsNot(request.GetOrigin());
        }
示例#9
0
        public void GetOriginTest()
        {
            const string lineSource = "GET / HTTP/1.1\r\n";

            HttpRequestLine.TryParse(lineSource, out var line);
            HttpHeaders.TryParse("Host: example.com\r\n", out var headers);
            headers.Host.Value = "example2.com";
            var request = new HttpRequest(line, headers, new byte[0], HttpHeaders.Empty);

            request.GetOrigin().ToString().Is(
                @"GET / HTTP/1.1
Host: example.com

");
        }
示例#10
0
        public void ChangeRequestTargetTest()
        {
            const string lineSource = "GET /hoge?fuga=piyo HTTP/1.1\r\n";

            HttpRequestLine.TryParse(lineSource, out var line);
            HttpHeaders.TryParse("Host: example.com\r\n", out var headers);
            var request = new HttpRequest(line, headers, new byte[0], HttpHeaders.Empty);

            request.RequestTargetUri.ToString().Is("http://example.com/hoge?fuga=piyo");
            request.RequestLine.RequestTargetForm.Is(RequestTargetForm.OriginForm);

            request.ChangeRequestTarget("http://absolute.example.com/hoge?fuga=piyo");
            request.RequestTargetUri.ToString().Is("http://absolute.example.com/hoge?fuga=piyo");
            request.RequestLine.RequestTargetForm.Is(RequestTargetForm.AbsoluteForm);
        }
示例#11
0
        public void HeadersAsByteTest()
        {
            const string lineSource = "GET / HTTP/1.1\r\n";

            HttpRequestLine.TryParse(lineSource, out var line);
            var headers = HttpHeaders.Empty;

            headers.Host.Value = "example.com";
            var request = new HttpRequest(line, headers, new byte[0], HttpHeaders.Empty);

            request.HeadersAsByte().Is(Encoding.ASCII.GetBytes(
                                           @"GET / HTTP/1.1
Host: example.com

"));
        }
示例#12
0
        public void CreateOptionsInstanceTest()
        {
            const string lineSource = "OPTIONS * HTTP/1.1\r\n";

            HttpRequestLine.TryParse(lineSource, out var line);
            var headers = HttpHeaders.Empty;

            headers.Host.Value = "example.com";
            var request = new HttpRequest(line, headers, new byte[0], HttpHeaders.Empty);

            request.ToString().Is(
                @"OPTIONS * HTTP/1.1
Host: example.com

");
            request.RequestTargetUri.ToString().Is("*");
            request.RequestLine.RequestTargetForm.Is(RequestTargetForm.AsteriskForm);
        }
示例#13
0
        public void CreateConnectInstanceTest()
        {
            const string lineSource = "CONNECT authority.example.com:8443 HTTP/1.1\r\n";

            HttpRequestLine.TryParse(lineSource, out var line);
            var headers = HttpHeaders.Empty;

            headers.Host.Value = "authority.example.com";
            var request = new HttpRequest(line, headers, new byte[0], HttpHeaders.Empty);

            request.ToString().Is(
                @"CONNECT authority.example.com:8443 HTTP/1.1
Host: authority.example.com

");
            request.RequestTargetUri.ToString().Is("https://authority.example.com:8443/");
            request.RequestLine.RequestTargetForm.Is(RequestTargetForm.AuthorityForm);
        }
示例#14
0
        public void CreateInstanceTest()
        {
            const string lineSource = "GET / HTTP/1.1\r\n";

            HttpRequestLine.TryParse(lineSource, out var line);
            var headers = HttpHeaders.Empty;

            headers.Host.Value = "example.com";
            var request = new HttpRequest(line, headers, new byte[0], HttpHeaders.Empty);

            request.ToString().Is(
                @"GET / HTTP/1.1
Host: example.com

");
            request.RequestTargetUri.ToString().Is("http://example.com/");
            request.RequestLine.RequestTargetForm.Is(RequestTargetForm.OriginForm);
        }