public void TestValidHttpDateFormats()
        {
            DateTime parsedDate;

            var httpDate = "Fri, 23 Jan 2015 23:55:58 GMT";

            Assert.True(NScrapeUtility.TryParseHttpDate(httpDate, out parsedDate));
            Assert.Equal(DateTimeKind.Utc, parsedDate.Kind);
            Assert.Equal(httpDate, parsedDate.ToString("r"));

            httpDate = "Tue, 15 Nov 1994 08:12:31 GMT";
            Assert.True(NScrapeUtility.TryParseHttpDate(httpDate, out parsedDate));
            Assert.Equal(DateTimeKind.Utc, parsedDate.Kind);
            Assert.Equal(httpDate, parsedDate.ToString("r"));

            httpDate = "Thu, 01 Jan 1970 00:00:00 GMT";
            Assert.True(NScrapeUtility.TryParseHttpDate(httpDate, out parsedDate));
            Assert.Equal(DateTimeKind.Utc, parsedDate.Kind);
            Assert.Equal(httpDate, parsedDate.ToString("r"));

            httpDate = "Mon, 15 Jun 2009 20:45:30 GMT";
            Assert.True(NScrapeUtility.TryParseHttpDate(httpDate, out parsedDate));
            Assert.Equal(DateTimeKind.Utc, parsedDate.Kind);
            Assert.Equal(httpDate, parsedDate.ToString("r"));
        }
        // http://tools.ietf.org/html/rfc7231#section-7.1.1.1
        public void TestPreferredAndObsoleteHttpDateFormats()
        {
            const string preferredFormatHttpDate = "Sun, 06 Nov 1994 08:49:37 GMT";

            DateTime parsedDate;

            // Preferred format
            var httpDate = preferredFormatHttpDate;

            Assert.True(NScrapeUtility.TryParseHttpDate(httpDate, out parsedDate));
            Assert.Equal(DateTimeKind.Utc, parsedDate.Kind);
            Assert.Equal(preferredFormatHttpDate, parsedDate.ToString("r"));

            // Obsolete RFC 850 format
            httpDate = "Sunday, 06-Nov-94 08:49:37 GMT";
            Assert.True(NScrapeUtility.TryParseHttpDate(httpDate, out parsedDate));
            Assert.Equal(DateTimeKind.Utc, parsedDate.Kind);
            Assert.Equal(preferredFormatHttpDate, parsedDate.ToString("r"));

            // Obsolete ANSI C's asctime() format
            httpDate = "Sun Nov  6 08:49:37 1994";
            Assert.True(NScrapeUtility.TryParseHttpDate(httpDate, out parsedDate));
            Assert.Equal(DateTimeKind.Utc, parsedDate.Kind);
            Assert.Equal(preferredFormatHttpDate, parsedDate.ToString("r"));
        }
        public void TestInvalidButParseableHttpDateFormats()
        {
            const string preferredFormatHttpDate = "Sun, 02 Jul 2017 22:07:33 GMT";

            DateTime parsedDate;

            var httpDate = "Sun, 02-Jul-17 22:07:33 GMT";

            Assert.True(NScrapeUtility.TryParseHttpDate(httpDate, out parsedDate));
            Assert.Equal(DateTimeKind.Utc, parsedDate.Kind);
            Assert.Equal(preferredFormatHttpDate, parsedDate.ToString("r"));

            httpDate = "Sunday, July 2, 2017 10:07:33pm";
            Assert.True(NScrapeUtility.TryParseHttpDate(httpDate, out parsedDate));
            Assert.Equal(DateTimeKind.Utc, parsedDate.Kind);
            Assert.Equal(preferredFormatHttpDate, parsedDate.ToString("r"));

            httpDate = "Sun, 02 Jul 2017 22:07:33 -0000";
            Assert.True(NScrapeUtility.TryParseHttpDate(httpDate, out parsedDate));
            Assert.Equal(DateTimeKind.Utc, parsedDate.Kind);
            Assert.Equal(preferredFormatHttpDate, parsedDate.ToString("r"));

            httpDate = "Sun, 02 Jul 2017 22:07:33 +0000";
            Assert.True(NScrapeUtility.TryParseHttpDate(httpDate, out parsedDate));
            Assert.Equal(DateTimeKind.Utc, parsedDate.Kind);
            Assert.Equal(preferredFormatHttpDate, parsedDate.ToString("r"));
        }
Beispiel #4
0
        public void MultipleCookieTest()
        {
            var header = string.Join(",", CookieGithub1, CookieGithub2, CookieGithub3);

            var cookies = NScrapeUtility.ParseSetCookieHeader(header, DefaultDomain).ToList();

            Assert.Equal(3, cookies.Count);
            CookieGithub1Test(cookies[0]);
            CookieGithub2Test(cookies[1]);
            CookieGithub3Test(cookies[2]);
        }
Beispiel #5
0
        public void OddExpiresDateFailingTests()
        {
            var cookies = NScrapeUtility.ParseSetCookieHeader(string.Join(",", CookieOddExpiresDate1, CookieOddExpiresDate2), DefaultDomain).ToList();

            Assert.Equal(2, cookies.Count);
            CookieOddExpiresDateTest(cookies[0]);
            CookieOddExpiresDateTest(cookies[1]);

            cookies = NScrapeUtility.ParseSetCookieHeader(string.Join(",", CookieOddExpiresDate2, CookieOddExpiresDate1), DefaultDomain).ToList();
            Assert.Equal(2, cookies.Count);
            CookieOddExpiresDateTest(cookies[0]);
            CookieOddExpiresDateTest(cookies[1]);
        }
Beispiel #6
0
        public void NullAndEmptyArgumentsCornerCaseTests()
        {
            // Null arguments
            var cookies = NScrapeUtility.ParseSetCookieHeader(null, DefaultDomain);

            Assert.Equal(0, cookies.Count());

            var ex = Assert.Throws <ArgumentException>(() => NScrapeUtility.ParseSetCookieHeader(null, null));

            Assert.Equal(ex.ParamName, "hostName");

            // Empty arguments
            cookies = NScrapeUtility.ParseSetCookieHeader(string.Empty, DefaultDomain);
            Assert.Equal(0, cookies.Count());

            ex = Assert.Throws <ArgumentException>(() => NScrapeUtility.ParseSetCookieHeader(string.Empty, string.Empty));
            Assert.Equal(ex.ParamName, "hostName");
        }
Beispiel #7
0
        public void OddExpiresDateTests()
        {
            var cookies = NScrapeUtility.ParseSetCookieHeader(CookieOddExpiresDate1, DefaultDomain).ToList();

            Assert.Equal(1, cookies.Count);
            CookieOddExpiresDateTest(cookies[0]);

            cookies = NScrapeUtility.ParseSetCookieHeader(CookieOddExpiresDate2, DefaultDomain).ToList();
            Assert.Equal(1, cookies.Count);
            CookieOddExpiresDateTest(cookies[0]);

            cookies = NScrapeUtility.ParseSetCookieHeader(CookieOddExpiresDateAnsiCasctime, DefaultDomain).ToList();
            Assert.Equal(1, cookies.Count);
            CookieOddExpiresDateTest(cookies[0]);

            cookies = NScrapeUtility.ParseSetCookieHeader(CookieOddExpiresDateRfc850, DefaultDomain).ToList();
            Assert.Equal(1, cookies.Count);
            CookieOddExpiresDateTest(cookies[0]);
        }
        public void TestInvalidHttpDateFormats()
        {
            DateTime parsedDate;

            string httpDate = null;

            // ReSharper disable once ExpressionIsAlwaysNull
            Assert.False(NScrapeUtility.TryParseHttpDate(httpDate, out parsedDate));
            Assert.Equal(new DateTime(), parsedDate);

            httpDate = string.Empty;
            Assert.False(NScrapeUtility.TryParseHttpDate(httpDate, out parsedDate));
            Assert.Equal(new DateTime(), parsedDate);

            httpDate = "Xxx, 00-Xxx-00 00:00:00 GMT";
            Assert.False(NScrapeUtility.TryParseHttpDate(httpDate, out parsedDate));
            Assert.Equal(new DateTime(), parsedDate);

            httpDate = "ks alkdjf alkd falk flka flakf";
            Assert.False(NScrapeUtility.TryParseHttpDate(httpDate, out parsedDate));
            Assert.Equal(new DateTime(), parsedDate);
        }
Beispiel #9
0
        public void SingleCookieTests()
        {
            var cookies = NScrapeUtility.ParseSetCookieHeader(CookieGithub1, DefaultDomain).ToList();

            Assert.Equal(1, cookies.Count);
            CookieGithub1Test(cookies[0]);

            cookies = NScrapeUtility.ParseSetCookieHeader(CookieGithub2, DefaultDomain).ToList();
            Assert.Equal(1, cookies.Count);
            CookieGithub2Test(cookies[0]);

            cookies = NScrapeUtility.ParseSetCookieHeader(CookieGithub3, DefaultDomain).ToList();
            Assert.Equal(1, cookies.Count);
            CookieGithub3Test(cookies[0]);

            cookies = NScrapeUtility.ParseSetCookieHeader(CookieStackOverflow, DefaultDomain).ToList();
            Assert.Equal(1, cookies.Count);
            CookieStackOverflowTest(cookies[0]);

            cookies = NScrapeUtility.ParseSetCookieHeader(CookieFrederik, DefaultDomain).ToList();
            Assert.Equal(1, cookies.Count);
            CookieFrederikTest(cookies[0]);
        }
Beispiel #10
0
        public void BadSetCookieHeaderTests()
        {
            // Bad header
            var cookies = NScrapeUtility.ParseSetCookieHeader("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", DefaultDomain).ToList();

            Assert.Equal(0, cookies.Count);

            // Bad header with commas
            cookies = NScrapeUtility.ParseSetCookieHeader("xxxxxxxxxxxxxxxxxx,xxxxxxxxxxxxxxxxxxx,xxxxxxxxxxxxxxx", DefaultDomain).ToList();
            Assert.Equal(0, cookies.Count);

            // Bad header with commas and semicolons
            cookies = NScrapeUtility.ParseSetCookieHeader("xxxxxxxx; xxxxxxxxxx,xxxxxxx; xxxxxxxxxxxx,xxxxx; xxxxxxxxxx", DefaultDomain).ToList();
            Assert.Equal(0, cookies.Count);

            // Valid cookie but invalid attributes
            cookies = NScrapeUtility.ParseSetCookieHeader("foo=bar; xxxxxxxxxx; xxxxxxx; xxxxx; xxxxxxxxxx", DefaultDomain).ToList();
            Assert.Equal(1, cookies.Count);
            var cookie = cookies[0];

            Assert.Equal(string.Empty, cookie.Comment);
            Assert.Null(cookie.CommentUri);
            Assert.False(cookie.Discard);
            Assert.Equal(DefaultDomain, cookie.Domain);
            Assert.False(cookie.Expired);
            Assert.Equal(new DateTime(1, 1, 1, 0, 0, 0), cookie.Expires);
            Assert.False(cookie.HttpOnly);
            Assert.Equal("foo", cookie.Name);
            Assert.Equal("/", cookie.Path);
            Assert.Equal(string.Empty, cookie.Port);
            Assert.False(cookie.Secure);
            var timeStamp = DateTime.Now;

            Assert.True(timeStamp.Subtract(cookie.TimeStamp).TotalSeconds < 1.0);                 // just a few milliseconds between parse and test
            Assert.Equal("bar", cookie.Value);
            Assert.Equal(0, cookie.Version);
        }
Beispiel #11
0
        public void BadExpiresDateTest()
        {
            var cookies = NScrapeUtility.ParseSetCookieHeader("foo=bar; expires=Xxx, 00-Xxx-00 00:00:00 GMT; path=/", DefaultDomain).ToList();

            Assert.Equal(1, cookies.Count);
            var cookie = cookies[0];

            Assert.Equal(string.Empty, cookie.Comment);
            Assert.Null(cookie.CommentUri);
            Assert.False(cookie.Discard);
            Assert.Equal(DefaultDomain, cookie.Domain);
            Assert.False(cookie.Expired);
            Assert.Equal(new DateTime(1, 1, 1, 0, 0, 0), cookie.Expires);
            Assert.False(cookie.HttpOnly);
            Assert.Equal("foo", cookie.Name);
            Assert.Equal("/", cookie.Path);
            Assert.Equal(string.Empty, cookie.Port);
            Assert.False(cookie.Secure);
            var timeStamp = DateTime.Now;

            Assert.True(timeStamp.Subtract(cookie.TimeStamp).TotalSeconds < 1.0);                 // just a few milliseconds between parse and test
            Assert.Equal("bar", cookie.Value);
            Assert.Equal(0, cookie.Version);
        }
Beispiel #12
0
        public void NewlinesTest()
        {
            var cookies = NScrapeUtility.ParseSetCookieHeader("foo=\rline1\nline2\rline3\r\nline4\r\rline5\n", DefaultDomain).ToList();

            Assert.Equal(1, cookies.Count);
            var cookie = cookies[0];

            Assert.Equal(string.Empty, cookie.Comment);
            Assert.Null(cookie.CommentUri);
            Assert.False(cookie.Discard);
            Assert.Equal(DefaultDomain, cookie.Domain);
            Assert.False(cookie.Expired);
            Assert.Equal(new DateTime(1, 1, 1, 0, 0, 0), cookie.Expires);
            Assert.False(cookie.HttpOnly);
            Assert.Equal("foo", cookie.Name);
            Assert.Equal("/", cookie.Path);
            Assert.Equal(string.Empty, cookie.Port);
            Assert.False(cookie.Secure);
            var timeStamp = DateTime.Now;

            Assert.True(timeStamp.Subtract(cookie.TimeStamp).TotalSeconds < 1.0);                 // just a few milliseconds between parse and test
            Assert.Equal("line1line2line3line4line5", cookie.Value);
            Assert.Equal(0, cookie.Version);
        }