public void CanRecordRequestThatThrowsExceptionOnGetResponse() { // ARRANGE // this url causes GetResponse() to throw a WebException - Protocol Error. it also // conveniently returns a valid Response. var unauthorizedUri = new Uri("https://accounts.google.com/o/oauth2/auth"); var request = new HttpWebRequestWrapperRecorder(unauthorizedUri); // ACT var responseException = Record.Exception(() => request.GetResponse()); // ASSERT responseException.ShouldNotBeNull(); request.RecordedRequests.Count.ShouldEqual(1); request.RecordedRequests[0].ResponseException.ShouldNotBeNull(); request.RecordedRequests[0].ResponseException.Message.ShouldContain("Bad Request"); request.RecordedRequests[0].ResponseException.Type.ShouldEqual(typeof(WebException)); request.RecordedRequests[0].ResponseException.WebExceptionStatus.ShouldEqual(WebExceptionStatus.ProtocolError); // make sure we recorded the response as well request.RecordedRequests[0].ResponseBody.SerializedStream.ShouldContain("<html"); request.RecordedRequests[0].ResponseStatusCode.ShouldEqual(HttpStatusCode.BadRequest); request.RecordedRequests[0].ResponseHeaders.Count.ShouldBeGreaterThan(0); }
public void CanRecordPostWithFormUrlEncoding() { // ARRANGE var url = new Uri("https://www.github.com"); var payload = "thing1=1&thing2=2"; var request = new HttpWebRequestWrapperRecorder(url) { Method = "POST", ContentType = "application/x-www-form-urlencoded" }; using (var sw = new StreamWriter(request.GetRequestStream())) sw.Write(payload); // ACT var response = request.GetResponse(); // ASSERT response.ShouldNotBeNull(); request.RecordedRequests.Count.ShouldEqual(1); request.RecordedRequests[0].RequestPayload.IsEncoded.ShouldBeFalse(); request.RecordedRequests[0].RequestPayload.SerializedStream.ShouldEqual(payload); }
public void CanPlaybackRecordingSessionFromRecorder() { // ARRANGE var requestUrl = new Uri("http://www.github.com"); var recordingSession = new RecordingSession(); var liveRequest = new HttpWebRequestWrapperRecorder(recordingSession, requestUrl); var liveResponse = (HttpWebResponse)liveRequest.GetResponse(); var playbackRequestCreator = new HttpWebRequestWrapperInterceptorCreator( new RecordingSessionInterceptorRequestBuilder(recordingSession)); var playbackRequest = playbackRequestCreator.Create(requestUrl); // ACT var playbackResponse = (HttpWebResponse)playbackRequest.GetResponse(); string liveResponseBody; using (var sr = new StreamReader(liveResponse.GetResponseStream())) liveResponseBody = sr.ReadToEnd(); string playbackResponseBody; using (var sr = new StreamReader(playbackResponse.GetResponseStream())) playbackResponseBody = sr.ReadToEnd(); // ASSERT playbackResponse.StatusCode.ShouldEqual(liveResponse.StatusCode); playbackResponseBody.ShouldEqual(liveResponseBody); playbackResponse.Headers.ShouldEqual(liveResponse.Headers); }
/// <summary> /// Since these tests rely on live web requests - run as few /// as possible. This makes the test a little harder to read /// but should improve build speed / consistency. /// </summary> public GitHubHomePageRequestFixture() { // necessary for requests to github to work ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; RequestBody = "Hello World"; var requestUri = new Uri("http://www.github.com"); var requestCookie = new Cookie("test", "test") { Domain = requestUri.Host }; // first make a request using the real HttpWebRequest var realHttRequestCreator = (IWebRequestCreate) // use reflection in case HttpWebRequestWrapperSession has changed // the PrefixList Activator.CreateInstance( typeof(HttpWebRequest).Assembly.GetType("System.Net.HttpRequestCreator")); RealRequest = (HttpWebRequest)realHttRequestCreator.Create(requestUri); RealRequest.CookieContainer = new CookieContainer(); RealRequest.CookieContainer.Add(requestCookie); RealRequest.Method = "POST"; using (var sw = new StreamWriter(RealRequest.GetRequestStream())) sw.Write(RequestBody); RealResponse = (HttpWebResponse)RealRequest.GetResponse(); using (var sr = new StreamReader(RealResponse.GetResponseStream())) RealResponseBody = sr.ReadToEnd(); // then make the same request using the recorder RecorderRequest = new HttpWebRequestWrapperRecorder(requestUri) { CookieContainer = new CookieContainer() }; RecorderRequest.CookieContainer.Add(requestCookie); RecorderRequest.Method = "POST"; using (var sw = new StreamWriter(RecorderRequest.GetRequestStream())) sw.Write(RequestBody); RecorderResponse = (HttpWebResponse)RecorderRequest.GetResponse(); using (var sr = new StreamReader(RecorderResponse.GetResponseStream())) RecorderResponseBody = sr.ReadToEnd(); RecorderRecording = RecorderRequest.RecordedRequests.First(); }
public async Task CanRecordAsyncResponse() { // ARRANGE var request = new HttpWebRequestWrapperRecorder(new Uri("http://www.github.com")); // ACT var response = (HttpWebResponse)await request.GetResponseAsync(); // ASSERT response.ShouldNotBeNull(); using (var sr = new StreamReader(response.GetResponseStream())) sr.ReadToEnd().ShouldContain("<html"); request.RecordedRequests.First().ResponseBody.SerializedStream.ShouldContain("<html"); }
public void CanRecordImageFileInResponse() { // ARRANGE var uriToBinaryFile = new Uri("https://upload.wikimedia.org/wikipedia/commons/thumb/3/35/Tacos_de_Pescado.jpg/320px-Tacos_de_Pescado.jpg"); var request = new HttpWebRequestWrapperRecorder(uriToBinaryFile); // ACT var response = request.GetResponse(); // ASSERT response.ShouldNotBeNull(); request.RecordedRequests[0].ResponseBody.ShouldNotBeNull(); request.RecordedRequests[0].ResponseBody.SerializedStream.ShouldNotBeNull(); request.RecordedRequests[0].ResponseBody.IsEncoded.ShouldBeTrue(); }
public void CanRecordHttpsRequest() { // ARRANGE var secureUri = new Uri("https://www.github.com"); var request = new HttpWebRequestWrapperRecorder(secureUri); // ACT var response = request.GetResponse(); // ASSERT response.ShouldNotBeNull(); using (var sr = new StreamReader(response.GetResponseStream())) sr.ReadToEnd().ShouldContain("<html"); request.RecordedRequests.First().Url.ShouldEqual(secureUri.ToString()); request.RecordedRequests.First().ResponseBody.SerializedStream.ShouldContain("<html"); }
public void CanRecordAsyncRequest() { // ARRANGE var requestPayload = "Test Request"; var request = new HttpWebRequestWrapperRecorder(new Uri("http://www.github.com")) { Method = "POST" }; // ACT var asyncResult = request.BeginGetRequestStream( req => { var requestStream = (req.AsyncState as HttpWebRequest).EndGetRequestStream(req); using (var sw = new StreamWriter(requestStream)) sw.Write(requestPayload); }, request); if (!asyncResult.IsCompleted) { Thread.Sleep(TimeSpan.FromMilliseconds(750)); } if (!asyncResult.IsCompleted) { throw new Exception("Web Response didn't come back in reasonable time frame"); } var response = request.GetResponse(); // ASSERT response.ShouldNotBeNull(); using (var sr = new StreamReader(response.GetResponseStream())) sr.ReadToEnd().ShouldContain("<html"); request.RecordedRequests.First().RequestPayload.ShouldEqual(requestPayload); request.RecordedRequests.First().ResponseBody.SerializedStream.ShouldContain("<html"); }
public void CanRecordImageFileInRequest() { var requestUrl = new Uri("http://www.github.com"); var request = new HttpWebRequestWrapperRecorder(requestUrl); var memoryStream = new MemoryStream(); var image = new Bitmap(60, 60); var graphic = Graphics.FromImage(image); graphic.DrawEllipse(new Pen(Color.Blue), new Rectangle(20, 20, 10, 10)); graphic.Save(); image.Save(memoryStream, ImageFormat.Bmp); memoryStream.Seek(0, SeekOrigin.Begin); // ACT request.Method = "POST"; request.ContentType = "images/png"; memoryStream.CopyTo(request.GetRequestStream()); var response = request.GetResponse(); // ASSERT response.ShouldNotBeNull(); request.RecordedRequests[0].RequestPayload.ShouldNotBeNull(); request.RecordedRequests[0].RequestPayload.IsEncoded.ShouldBeTrue(); request.RecordedRequests[0].RequestPayload.SerializedStream.ShouldNotBeNull(); request.RecordedRequests[0].RequestPayload.SerializedStream.ShouldStartWith("Qk12"); // make sure we can reload the request payload as an image var requestImage = Image.FromStream(request.RecordedRequests[0].RequestPayload.ToStream()); requestImage.Height.ShouldEqual(image.Height); }