Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
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);
        }
Ejemplo n.º 4
0
            /// <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();
            }
Ejemplo n.º 5
0
        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");
        }
Ejemplo n.º 6
0
        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();
        }
Ejemplo n.º 7
0
        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");
        }
Ejemplo n.º 8
0
        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");
        }
Ejemplo n.º 9
0
        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);
        }