Пример #1
0
        public void ProtocolViolationException_Saved()
        {
            // Setup

            var webRequest1  = new Mock <IHttpWebRequestImplementation>(MockBehavior.Strict);
            var webResponse1 = new Mock <IHttpWebResponseImplementation>(MockBehavior.Strict);

            webRequest1.Setup(x => x.Create(new Uri("http://target/1", UriKind.Absolute))).Returns(webRequest1.Object);
            webRequest1.Setup(x => x.GetResponse()).Throws(new System.Net.ProtocolViolationException("ProtocolViolationException"));

            // Test

            var pingback = new Pingback(webRequest1.Object);

            var url = new Uri("http://target/1");

            var parameters = new LinkbackSendParameters
            {
                SourceUrl = new Uri("http://source/1"),
                TargetUrl = new Uri("http://target/1")
            };

            var result = pingback.Send(url, parameters);

            // Verify

            webRequest1.VerifyAll();
            webResponse1.VerifyAll();

            Assert.False(result.Success);
            Assert.Equal(0, result.Code);
            Assert.True(String.IsNullOrEmpty(result.Message));
            Assert.IsType <System.Net.ProtocolViolationException>(result.SendException);
        }
Пример #2
0
        public ActionResult Send(ILinkback linkback, int id, string url, bool?autodiscovery)
        {
            var post = _db.Post.First(x => x.Id == id);

            string source_url = Url.AbsoluteRouteUrl("Post", new { id });

            var parameters = new LinkbackSendParameters
            {
                // Trackback
                Title         = post.Title,
                Excerpt       = post.Content,
                Url           = new Uri(source_url),
                BlogName      = "Linkback.NET Demo",
                AutoDiscovery = autodiscovery,

                // Linkback
                SourceUrl = new Uri(source_url),
                TargetUrl = new Uri(url)
            };

            var result = linkback.Send(new Uri(url), parameters);

            TempData["Linkback-Send-Result"] = result.Success
                ? String.Format("{0} for {1} sent", linkback.Name, url)
                : String.Format("Error: {0}({1})", result.Message, result.Code);

            return(RedirectToRoute(String.Format("{0}-Send", linkback.Name), new { id }));
        }
Пример #3
0
        public void Http_Error_LinkbackSendExceptions_Saved()
        {
            // Setup

            var webRequest1  = new Mock <IHttpWebRequestImplementation>(MockBehavior.Strict);
            var webResponse1 = new Mock <IHttpWebResponseImplementation>(MockBehavior.Strict);

            webRequest1.Setup(x => x.Create(new Uri("http://target/1", UriKind.Absolute))).Returns(webRequest1.Object);
            webRequest1.Setup(x => x.GetResponse()).Returns(webResponse1.Object);

            webResponse1.Setup(x => x.Close());
            webResponse1.SetupGet(x => x.IsHttpStatusCode2XX).Returns(true);
            webResponse1.SetupGet(x => x.Headers).Returns(
                new System.Net.WebHeaderCollection {
                { "X-Pingback", "http://target/pingback" }
            });

            var webRequest2  = new Mock <IHttpWebRequestImplementation>(MockBehavior.Strict);
            var webResponse2 = new Mock <IHttpWebResponseImplementation>(MockBehavior.Strict);

            webRequest1.Setup(x => x.Create(new Uri("http://target/pingback", UriKind.Absolute))).Returns(webRequest2.Object);
            webRequest2.SetupSet(x => x.Method        = "POST");
            webRequest2.SetupSet(x => x.ContentType   = "text/xml");
            webRequest2.SetupSet(x => x.ContentLength = 225);
            var requestStream = new MemoryStream();

            webRequest2.Setup(x => x.GetRequestStream()).Returns(requestStream);
            webRequest2.Setup(x => x.GetResponse()).Returns(webResponse2.Object);

            webResponse2.Setup(x => x.Close());
            webResponse2.SetupGet(x => x.IsHttpStatusCode2XX).Returns(false);

            // Test

            var pingback = new Pingback(webRequest1.Object);

            var url = new Uri("http://target/1");

            var parameters = new LinkbackSendParameters
            {
                SourceUrl = new Uri("http://source/1"),
                TargetUrl = new Uri("http://target/1")
            };

            var result = pingback.Send(url, parameters);

            // Verify

            webRequest1.VerifyAll();
            webResponse1.VerifyAll();
            webRequest2.VerifyAll();
            webResponse2.VerifyAll();

            Assert.False(result.Success);
            Assert.Equal(0, result.Code);
            Assert.True(String.IsNullOrEmpty(result.Message));
            Assert.IsType <LinkbackSendException>(result.SendException);
            Assert.Equal("Http error while sending Pingback for http://target/pingback", result.SendException.Message);
        }
Пример #4
0
        public void Discovery_Header()
        {
            // Setup

            var webRequest1  = new Mock <IHttpWebRequestImplementation>(MockBehavior.Strict);
            var webResponse1 = new Mock <IHttpWebResponseImplementation>(MockBehavior.Strict);

            webRequest1.Setup(x => x.Create(new Uri("http://target/1", UriKind.Absolute))).Returns(webRequest1.Object);
            webRequest1.Setup(x => x.GetResponse()).Returns(webResponse1.Object);

            webResponse1.Setup(x => x.Close());
            webResponse1.SetupGet(x => x.IsHttpStatusCode2XX).Returns(true);
            webResponse1.SetupGet(x => x.Headers).Returns(
                new System.Net.WebHeaderCollection {
                { "X-Pingback", "http://target/pingback" }
            });

            var webRequest2  = new Mock <IHttpWebRequestImplementation>(MockBehavior.Strict);
            var webResponse2 = new Mock <IHttpWebResponseImplementation>(MockBehavior.Strict);

            webRequest1.Setup(x => x.Create(new Uri("http://target/pingback", UriKind.Absolute))).Returns(webRequest2.Object);
            webRequest2.SetupSet(x => x.Method        = "POST");
            webRequest2.SetupSet(x => x.ContentType   = "text/xml");
            webRequest2.SetupSet(x => x.ContentLength = 225);
            var requestStream = new MemoryStream();

            webRequest2.Setup(x => x.GetRequestStream()).Returns(requestStream);
            webRequest2.Setup(x => x.GetResponse()).Returns(webResponse2.Object);

            webResponse2.Setup(x => x.Close());
            webResponse2.SetupGet(x => x.IsHttpStatusCode2XX).Returns(true);
            webResponse2.SetupGet(x => x.ContentEncoding).Returns(String.Empty);
            webResponse2.Setup(x => x.GetResponseStream()).Returns(new MemoryStream(new UTF8Encoding().GetBytes("<?xml version=\"1.0\"?><methodResponse><params><param><value><string>ok</string></value></param></params></methodResponse>")));

            // Test

            var pingback = new Pingback(webRequest1.Object);

            var url = new Uri("http://target/1");

            var parameters = new LinkbackSendParameters
            {
                SourceUrl = new Uri("http://source/1"),
                TargetUrl = new Uri("http://target/1")
            };

            var result = pingback.Send(url, parameters);

            // Verify

            webRequest1.VerifyAll();
            webResponse1.VerifyAll();
            webRequest2.VerifyAll();
            webResponse2.VerifyAll();

            Assert.True(result.Success);
            Assert.Equal(0, result.Code);
            Assert.True(String.IsNullOrEmpty(result.Message));
        }
Пример #5
0
        public void LinkbackSendParameters_SetupRequestForPingback_SourceUrl_Null_Throws_InvalidOperationException()
        {
            var parameters = new LinkbackSendParameters();

            parameters.SourceUrl = null;
            parameters.TargetUrl = new Uri("http://localhost");

            var requestImplementation = new Mock <IHttpWebRequestImplementation>();
            var request = new HttpWebRequestAbstraction(requestImplementation.Object);

            Assert.Throws <InvalidOperationException>(() => {
                parameters.SetupRequestForPingback(request);
            });
        }
Пример #6
0
        public void Discovery_Both_Header_And_Link_Not_Found_Then_LinkbackSendException_Saved()
        {
            // Setup

            var webRequest1  = new Mock <IHttpWebRequestImplementation>(MockBehavior.Strict);
            var webResponse1 = new Mock <IHttpWebResponseImplementation>(MockBehavior.Strict);

            webRequest1.Setup(x => x.Create(new Uri("http://target/1", UriKind.Absolute))).Returns(webRequest1.Object);
            webRequest1.Setup(x => x.GetResponse()).Returns(webResponse1.Object);

            webResponse1.Setup(x => x.Close());
            webResponse1.SetupGet(x => x.IsHttpStatusCode2XX).Returns(true);
            webResponse1.SetupGet(x => x.ContentEncoding).Returns(String.Empty);
            webResponse1.SetupGet(x => x.Headers).Returns(new System.Net.WebHeaderCollection {
            });
            string response_content = "...";

            webResponse1.Setup(x => x.GetResponseStream()).Returns(new MemoryStream(new UTF8Encoding().GetBytes(response_content)));

            // Test

            var pingback = new Pingback(webRequest1.Object);

            var url = new Uri("http://target/1");

            var parameters = new LinkbackSendParameters
            {
                SourceUrl = new Uri("http://source/1"),
                TargetUrl = new Uri("http://target/1")
            };

            var result = pingback.Send(url, parameters);

            // Verify

            webRequest1.VerifyAll();
            webResponse1.VerifyAll();

            Assert.False(result.Success);
            Assert.Equal(0, result.Code);
            Assert.True(String.IsNullOrEmpty(result.Message));
            Assert.IsType <LinkbackSendException>(result.SendException);
            Assert.Equal("Pingback url discovering failed for http://target/1", result.SendException.Message);
        }
Пример #7
0
        public void Discovery_Http_Error_Then_LinkbackSendException_Saved()
        {
            // Setup

            var webRequest1  = new Mock <IHttpWebRequestImplementation>(MockBehavior.Strict);
            var webResponse1 = new Mock <IHttpWebResponseImplementation>(MockBehavior.Strict);

            webRequest1.Setup(x => x.Create(new Uri("http://target/1", UriKind.Absolute))).Returns(webRequest1.Object);
            webRequest1.Setup(x => x.GetResponse()).Returns(webResponse1.Object);

            webResponse1.Setup(x => x.Close());
            webResponse1.SetupGet(x => x.IsHttpStatusCode2XX).Returns(false);

            // Test

            var pingback = new Pingback(webRequest1.Object);

            var url = new Uri("http://target/1");

            var parameters = new LinkbackSendParameters
            {
                SourceUrl = new Uri("http://source/1"),
                TargetUrl = new Uri("http://target/1")
            };

            var result = pingback.Send(url, parameters);

            // Verify

            webRequest1.VerifyAll();
            webResponse1.VerifyAll();

            Assert.False(result.Success);
            Assert.Equal(0, result.Code);
            Assert.True(String.IsNullOrEmpty(result.Message));
            Assert.IsType <LinkbackSendException>(result.SendException);
            Assert.Equal("Http error while discovering Pingback url for http://target/1", result.SendException.Message);
        }
Пример #8
0
        public void Unknown_Exceptions_Are_Not_Handled()
        {
            // Setup

            var webRequest1  = new Mock <IHttpWebRequestImplementation>(MockBehavior.Strict);
            var webResponse1 = new Mock <IHttpWebResponseImplementation>(MockBehavior.Strict);

            webRequest1.Setup(x => x.Create(new Uri("http://target/1", UriKind.Absolute))).Returns(webRequest1.Object);
            webRequest1.Setup(x => x.GetResponse()).Throws(new InvalidOperationException());

            // Test

            var pingback = new Pingback(webRequest1.Object);

            var url = new Uri("http://target/1");

            var parameters = new LinkbackSendParameters
            {
                SourceUrl = new Uri("http://source/1"),
                TargetUrl = new Uri("http://target/1")
            };

            InvalidOperationException exception = null;

            try
            {
                pingback.Send(url, parameters);
            }
            catch (InvalidOperationException ex)
            {
                exception = ex;
            }

            // Verify

            Assert.NotNull(exception);
        }
Пример #9
0
        public void Send_Response_Is_GZipped()
        {
            // Setup

            var webRequest1  = new Mock <IHttpWebRequestImplementation>(MockBehavior.Strict);
            var webResponse1 = new Mock <IHttpWebResponseImplementation>(MockBehavior.Strict);

            webRequest1.Setup(x => x.Create(new Uri("http://target/1", UriKind.Absolute))).Returns(webRequest1.Object);
            webRequest1.Setup(x => x.GetResponse()).Returns(webResponse1.Object);

            webResponse1.Setup(x => x.Close());
            webResponse1.SetupGet(x => x.IsHttpStatusCode2XX).Returns(true);
            webResponse1.SetupGet(x => x.Headers).Returns(new System.Net.WebHeaderCollection {
            });
            webResponse1.SetupGet(x => x.ContentEncoding).Returns("gzip");
            string response_content       = @"
...
<p>
<link rel=""pingback"" href=""http://target/pingback"">
</p>
...";
            var    response_content_bytes = new UTF8Encoding().GetBytes(response_content);
            var    memoryStream           = new MemoryStream();
            var    gzippedStream          = new GZipStream(memoryStream, CompressionMode.Compress, true);

            gzippedStream.Write(response_content_bytes, 0, response_content_bytes.Length);
            gzippedStream.Close();
            memoryStream.Position = 0;

            webResponse1.Setup(x => x.GetResponseStream()).Returns(memoryStream);

            var webRequest2  = new Mock <IHttpWebRequestImplementation>(MockBehavior.Strict);
            var webResponse2 = new Mock <IHttpWebResponseImplementation>(MockBehavior.Strict);

            webRequest1.Setup(x => x.Create(new Uri("http://target/pingback", UriKind.Absolute))).Returns(webRequest2.Object);
            webRequest2.SetupSet(x => x.Method        = "POST");
            webRequest2.SetupSet(x => x.ContentType   = "text/xml");
            webRequest2.SetupSet(x => x.ContentLength = 225);
            var requestStream = new MemoryStream();

            webRequest2.Setup(x => x.GetRequestStream()).Returns(requestStream);
            webRequest2.Setup(x => x.GetResponse()).Returns(webResponse2.Object);

            webResponse2.Setup(x => x.Close());
            webResponse2.SetupGet(x => x.IsHttpStatusCode2XX).Returns(true);
            webResponse2.SetupGet(x => x.ContentEncoding).Returns("gzip");

            string responseContent       = "<?xml version=\"1.0\"?><methodResponse><params><param><value><string>ok</string></value></param></params></methodResponse>";
            var    responseContentBytes  = new UTF8Encoding().GetBytes(responseContent);
            var    responseMemoryStream  = new MemoryStream();
            var    gzippedResponseStream = new GZipStream(responseMemoryStream, CompressionMode.Compress, true);

            gzippedResponseStream.Write(responseContentBytes, 0, responseContentBytes.Length);
            gzippedResponseStream.Close();
            responseMemoryStream.Position = 0;

            webResponse2.Setup(x => x.GetResponseStream()).Returns(responseMemoryStream);

            // Test

            var pingback = new Pingback(webRequest1.Object);

            var url = new Uri("http://target/1");

            var parameters = new LinkbackSendParameters
            {
                SourceUrl = new Uri("http://source/1"),
                TargetUrl = new Uri("http://target/1")
            };

            var result = pingback.Send(url, parameters);

            // Verify

            webRequest1.VerifyAll();
            webResponse1.VerifyAll();
            webRequest2.VerifyAll();
            webResponse2.VerifyAll();

            Assert.True(result.Success);
            Assert.Equal(0, result.Code);
            Assert.True(String.IsNullOrEmpty(result.Message));
        }