示例#1
0
        public void Dicovery_Source_Empty()
        {
            // Setup

            var request = new Mock<HttpRequestBase>(MockBehavior.Strict);
            string request_content = String.Format("<?xml version=\"1.0\"?><methodCall><methodName>pingback.ping</methodName><params><param><value><string>{0}</string></value></param><param><value><string>{1}</string></value></param></params></methodCall>",
                "http://source/1", "http://target/1");
            request.SetupGet(x => x.InputStream).Returns(new MemoryStream(new UTF8Encoding().GetBytes(request_content)));

            var webRequest = new Mock<IHttpWebRequestImplementation>(MockBehavior.Strict);
            var webResponse = new Mock<IHttpWebResponseImplementation>(MockBehavior.Strict);

            webRequest.Setup(x => x.Create(new Uri("http://source/1", UriKind.Absolute))).Returns(webRequest.Object);
            webRequest.Setup(x => x.GetResponse()).Returns(webResponse.Object);

            webResponse.Setup(x => x.Close());
            webResponse.SetupGet(x => x.IsHttpStatusCode2XX).Returns(true);
            webResponse.Setup(x => x.GetResponseStream()).Returns(new MemoryStream(new UTF8Encoding().GetBytes("")));

            // Test

            var pingback = new Pingback(webRequest.Object);

            var result = pingback.Receive(request.Object, null);

            // Verify

            request.VerifyAll();
            webRequest.VerifyAll();
            webResponse.VerifyAll();

            Assert.False(result.Valid);
            Assert.Equal("http://source/1", result.SourceUri.ToString().ToLowerInvariant());
            Assert.Equal("http://target/1", result.TargetUri.ToString().ToLowerInvariant());
        }
示例#2
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);
        }
示例#3
0
        public void WebException_Saved()
        {
            // Setup

            var request = new Mock<HttpRequestBase>(MockBehavior.Strict);
            string request_content = String.Format("<?xml version=\"1.0\"?><methodCall><methodName>pingback.ping</methodName><params><param><value><string>{0}</string></value></param><param><value><string>{1}</string></value></param></params></methodCall>",
                "http://source/1", "http://target/1");
            request.SetupGet(x => x.InputStream).Returns(new MemoryStream(new UTF8Encoding().GetBytes(request_content)));

            var webRequest = new Mock<IHttpWebRequestImplementation>(MockBehavior.Strict);

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

            // Test

            var pingback = new Pingback(webRequest.Object);

            var result = pingback.Receive(request.Object, null);

            // Verify

            request.VerifyAll();
            webRequest.VerifyAll();

            Assert.False(result.Valid);
            Assert.IsType<System.Net.WebException>(result.ReceiveException);
            Assert.Equal("WebException", result.ReceiveException.Message);
        }
示例#4
0
        public void Request_Params_Not_Http_TargetURI()
        {
            // Setup

            var request = new Mock<HttpRequestBase>(MockBehavior.Strict);
            string request_content = String.Format("<?xml version=\"1.0\"?><methodCall><methodName>pingback.ping</methodName><params><param><value><string>{0}</string></value></param><param><value><string>{1}</string></value></param></params></methodCall>",
                "http://source/1", "ftp://target/1");
            request.SetupGet(x => x.InputStream).Returns(new MemoryStream(new UTF8Encoding().GetBytes(request_content)));

            var webRequest = new Mock<IHttpWebRequestImplementation>(MockBehavior.Strict);

            // Test

            var pingback = new Pingback(webRequest.Object);

            var result = pingback.Receive(request.Object, null);

            // Verify

            request.VerifyAll();
            webRequest.VerifyAll();

            Assert.False(result.Valid);
            Assert.Equal("http://source/1", result.SourceUri.ToString().ToLowerInvariant());
            Assert.Null(result.TargetUri);
        }
示例#5
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));
        }
示例#6
0
        public void WebException_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.WebException("WebException"));

            // 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.WebException>(result.SendException);
        }
示例#7
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);
        }
示例#8
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));
        }
示例#9
0
        public void Invalid_Response_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.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("... invalid response ...")));

            // 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("Invalid response received from http://target/pingback", result.SendException.Message);
        }
示例#10
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);
        }
示例#11
-1
        public void Receive()
        {
            // Setup

            var request = new Mock<HttpRequestBase>(MockBehavior.Strict);
            string request_content = String.Format("<?xml version=\"1.0\"?><methodCall><methodName>pingback.ping</methodName><params><param><value><string>{0}</string></value></param><param><value><string>{1}</string></value></param></params></methodCall>",
                "http://source/1", "http://target/1");
            request.SetupGet(x => x.InputStream).Returns(new MemoryStream(new UTF8Encoding().GetBytes(request_content)));

            var webRequest = new Mock<IHttpWebRequestImplementation>(MockBehavior.Strict);
            var webResponse = new Mock<IHttpWebResponseImplementation>(MockBehavior.Strict);

            webRequest.Setup(x => x.Create(new Uri("http://source/1", UriKind.Absolute))).Returns(webRequest.Object);
            webRequest.Setup(x => x.GetResponse()).Returns(webResponse.Object);

            webResponse.Setup(x => x.Close());
            webResponse.SetupGet(x => x.IsHttpStatusCode2XX).Returns(true);
            string source = @"
            ...
            <head>
            <title>Source Title</title>
            </head>
            <div>
            <p>
            This is a text <a href=""http://tarGet/1"">post1</a> with link
            </p>
            </div>
            ...
            ";
            webResponse.Setup(x => x.GetResponseStream()).Returns(new MemoryStream(new UTF8Encoding().GetBytes(source)));

            // Test

            var pingback = new Pingback(webRequest.Object);

            var result = pingback.Receive(request.Object, null);

            // Verify

            request.VerifyAll();
            webRequest.VerifyAll();
            webResponse.VerifyAll();

            Assert.True(result.Valid);
            Assert.Equal("http://source/1", result.SourceUri.ToString().ToLowerInvariant());
            Assert.Equal("http://target/1", result.TargetUri.ToString().ToLowerInvariant());
            Assert.Equal("Source Title", result.Title);
            Assert.Equal("Source Title", result.BlogName);
            Assert.Equal("This is a text post1 with link", result.Excerpt);
        }