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