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()); }
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); }
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); }
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); }
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)); }
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); }
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); }
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)); }
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); }
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); }
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); }