public void ChangeHeaders()
        {
            ChangeHeaderInterceptor interceptor = new ChangeHeaderInterceptor();

            requestFactory = new InterceptingClientHttpRequestFactory(requestFactoryMock,
                                                                      new IClientHttpRequestInterceptor[] { interceptor });

            IClientHttpRequest request = requestFactory.CreateRequest(new Uri("http://example.com"), HttpMethod.GET);

            Assert.IsNotNull(requestMock.Headers.Get("AfterCreation"));
            Assert.IsNull(requestMock.Headers.Get("BeforeSyncExecution"));
            Assert.IsNull(responseMock.Headers.Get("AfterSyncExecution"));

            request.Execute();

            Assert.IsNotNull(requestMock.Headers.Get("BeforeSyncExecution"));
            Assert.IsNotNull(responseMock.Headers.Get("AfterSyncExecution"));
        }
        public void AsyncExecution()
        {
            ManualResetEvent manualEvent = new ManualResetEvent(false);
            Exception        exception   = null;

            NoOpRequestAsyncInterceptor interceptor1 = new NoOpRequestAsyncInterceptor();
            ChangeHeaderInterceptor     interceptor2 = new ChangeHeaderInterceptor();

            requestFactory = new InterceptingClientHttpRequestFactory(requestFactoryMock,
                                                                      new IClientHttpRequestInterceptor[] { interceptor1, interceptor2 });

            IClientHttpRequest request = requestFactory.CreateRequest(new Uri("http://example.com"), HttpMethod.GET);

            request.ExecuteAsync(null, delegate(ClientHttpRequestCompletedEventArgs args)
            {
                try
                {
                    Assert.IsNull(args.Error, "Invalid response");
                    Assert.IsFalse(args.Cancelled, "Invalid response");
                    Assert.AreSame(this.responseMock, args.Response, "Invalid response");
                    Assert.IsNotNull(args.Response.Headers.Get("AfterAsyncExecution"));
                }
                catch (Exception ex)
                {
                    exception = ex;
                }
                finally
                {
                    manualEvent.Set();
                }
            });

            manualEvent.WaitOne();
            if (exception != null)
            {
                throw exception;
            }

            Assert.IsTrue(interceptor1.invoked);
            Assert.IsTrue(this.requestMock.executed);
            Assert.IsNotNull(responseMock.Headers.Get("AfterAsyncExecution"));
        }
        public void AsyncExecution()
        {
            ManualResetEvent manualEvent = new ManualResetEvent(false);
            Exception exception = null;

            NoOpRequestAsyncInterceptor interceptor1 = new NoOpRequestAsyncInterceptor();
            ChangeHeaderInterceptor interceptor2 = new ChangeHeaderInterceptor();
            requestFactory = new InterceptingClientHttpRequestFactory(requestFactoryMock,
                new IClientHttpRequestInterceptor[] { interceptor1, interceptor2 });

            IClientHttpRequest request = requestFactory.CreateRequest(new Uri("http://example.com"), HttpMethod.GET);
            request.ExecuteAsync(null, delegate(ClientHttpRequestCompletedEventArgs args)
            {
                try
                {
                    Assert.IsNull(args.Error, "Invalid response");
                    Assert.IsFalse(args.Cancelled, "Invalid response");
                    Assert.AreSame(this.responseMock, args.Response, "Invalid response");
                    Assert.IsNotNull(args.Response.Headers.Get("AfterAsyncExecution"));
                }
                catch (Exception ex)
                {
                    exception = ex;
                }
                finally
                {
                    manualEvent.Set();
                }
            });

            manualEvent.WaitOne();
            if (exception != null)
            {
                throw exception;
            }

            Assert.IsTrue(interceptor1.invoked);
            Assert.IsTrue(this.requestMock.executed);
            Assert.IsNotNull(responseMock.Headers.Get("AfterAsyncExecution"));
        }
        public void ChangeHeaders()
        {
            ChangeHeaderInterceptor interceptor = new ChangeHeaderInterceptor();
            requestFactory = new InterceptingClientHttpRequestFactory(requestFactoryMock,
                new IClientHttpRequestInterceptor[] { interceptor });

            IClientHttpRequest request = requestFactory.CreateRequest(new Uri("http://example.com"), HttpMethod.GET);

            Assert.IsNotNull(requestMock.Headers.Get("AfterCreation"));
            Assert.IsNull(requestMock.Headers.Get("BeforeSyncExecution"));
            Assert.IsNull(responseMock.Headers.Get("AfterSyncExecution"));

            request.Execute();

            Assert.IsNotNull(requestMock.Headers.Get("BeforeSyncExecution"));
            Assert.IsNotNull(responseMock.Headers.Get("AfterSyncExecution"));
        }