예제 #1
0
        public async Task ShouldSucceedIfSomeEndpointsAreOnline()
        {
            using (var http = InitializeInvalidHostHelper(
                       (xh, xr) =>
            {
                if (xr.RequestUri.ToString().StartsWith(Uri2.ToString()))
                {
                    return(xh.ResponseQueue.Any()
                            ? xh.ResponseQueue.Dequeue()
                            : new HttpResponseMessage(HttpStatusCode.OK)
                    {
                        Content = new StringContent(string.Empty)
                    });
                }
                throw new SocketException();
            }))
            {
                http.RespondWith("etc 1.2.3");
                http.RespondWith("etc 1.2.3");
                http.RespondWith("etc 1.2.3");
                http.RespondWith("etc 1.2.3");
                http.RespondWith("etc 1.2.3");

                var epool = await CreateSut(VerificationStrategy)
                            .VerifyAndBuild(Uris);

                epool.Should().NotBeNull();

                epool.OnlineEndpoints.Should().HaveCount(1);
                var endpoint = epool.OnlineEndpoints.First();
                endpoint.Uri
                .Should()
                .BeSameAs(Uri2);
            }
        }
예제 #2
0
        public async Task Download_ReturnsFalse_ForUnsupportedProtocol()
        {
            var href = "http://example.org/test";
            var fakeResponseHandler = new FakeResponseHandler();

            fakeResponseHandler.AddHtmlResponse(new Uri(href), HttpStatusCode.OK, "Foo content", 123456L);

            var url        = new Uri2(href);
            var resource   = new Resource(url, false);
            var downloader = new Downloader(fakeResponseHandler);

            //var toAwait = downloader.Download(resource);
            //await toAwait;

            await downloader.Download(resource);

            Assert.AreEqual("Foo content", resource.Content);
            Assert.AreEqual("text/html", resource.ContentType);
            Assert.AreEqual("utf-8", resource.ContentEncoding);
            Assert.AreEqual(123456L, resource.ContentLength);

            //var result = downloader.IsProtocolSupported;

            //Assert.IsTrue(result);
        }
예제 #3
0
        public void AddItem_Adds1ItemWhen2OnlyDifferByCase_WhenCaseInsensitive()
        {
            var log = new ResourceLog();

            var urlA = new Uri2("http://www.foo.com/page.html");
            var urlB = new Uri2("http://www.foo.com/Page.html");

            log.AddItem(urlA);
            log.AddItem(urlB);

            Assert.AreEqual(1, log.ItemCount);
        }
예제 #4
0
        public void AddItem_AddsTheItemToTheLog_WhenCalled()
        {
            var log = new ResourceLog();

            log.CaseSensitive = true;

            var url = new Uri2("http://www.foo.com/Page.html");

            log.AddItem(url);

            Assert.AreEqual(1, log.ItemCount);
        }
예제 #5
0
        public void AddItem_Adds2ItemsThatOnlyDifferByCase_WhenCaseSensitive()
        {
            var log = new ResourceLog();

            log.CaseSensitive = true;

            var urlA = new Uri2("http://www.foo.com/page.html");
            var urlB = new Uri2("http://www.foo.com/Page.html");

            log.AddItem(urlA);
            log.AddItem(urlB);

            Assert.AreEqual(2, log.ItemCount);
        }
예제 #6
0
        public void AllProperties_AreSet_WhenValidUrlAndBaseUrlPassedToCtor()
        {
            var relativeUri = "bar?baz=qux#hash";
            var baseUrl     = new Uri2("http://www.foo.com");
            var url         = new Uri2(baseUrl, relativeUri);

            Assert.AreEqual("http", url.Scheme);
            Assert.AreEqual("", url.UserInfo);
            Assert.AreEqual("www.foo.com", url.Host);
            Assert.AreEqual("www.foo.com", url.Authority);
            Assert.AreEqual(80, url.Port);
            Assert.AreEqual("/bar?baz=qux", url.PathAndQuery);
            Assert.AreEqual("?baz=qux", url.Query);
            Assert.AreEqual("#hash", url.Fragment);
        }