Created
November 15, 2012 15:51
-
-
Save timiles/4079321 to your computer and use it in GitHub Desktop.
MockWebProxyHelper - a wrapper around Fiddler Core to assist with unit testing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Net; | |
// http://www.fiddler2.com/fiddler/Core/ | |
using Fiddler; | |
public static class MockWebProxyHelper | |
{ | |
public enum HttpMethods | |
{ | |
GET, POST, PUT, Unknown | |
} | |
public class Response | |
{ | |
public Response(string header = "HTTP/1.1 200 OK", string body = "", string contentType = "application/json") | |
{ | |
Header = header; | |
Body = body; | |
ContentType = contentType; | |
} | |
public string Header { get; private set; } | |
public string Body { get; private set; } | |
public string ContentType { get; private set; } | |
} | |
public static Func<HttpMethods, string, Response> GetMockResponse = delegate { return new Response(); }; | |
public static Func<HttpMethods, string, bool> InterceptRequest = delegate { return true; }; | |
public static void SetUp(bool registerAsSystemProxy = false) | |
{ | |
const int port = 18833; | |
FiddlerApplication.Startup(port, FiddlerCoreStartupFlags.DecryptSSL | |
| (registerAsSystemProxy ? FiddlerCoreStartupFlags.RegisterAsSystemProxy : FiddlerCoreStartupFlags.None)); | |
WebRequest.DefaultWebProxy = new WebProxy("localhost", port); | |
FiddlerApplication.BeforeRequest += BeforeRequest; | |
} | |
private static void BeforeRequest(Session session) | |
{ | |
var httpMethod = GetHttpMethod(session); | |
var url = session.url; | |
if (InterceptRequest(httpMethod, url)) | |
{ | |
session.utilCreateResponseAndBypassServer(); | |
var response = GetMockResponse(httpMethod, url); | |
session.oResponse.headers = Parser.ParseResponse(response.Header); | |
session.oResponse.headers.Add("Content-Type", response.ContentType); | |
session.utilSetResponseBody(response.Body); | |
} | |
} | |
private static HttpMethods GetHttpMethod(Session session) | |
{ | |
return session.HTTPMethodIs("GET") ? HttpMethods.GET | |
: session.HTTPMethodIs("POST") ? HttpMethods.POST | |
: session.HTTPMethodIs("PUT") ? HttpMethods.PUT : HttpMethods.Unknown; | |
} | |
public static void TearDown() | |
{ | |
FiddlerApplication.BeforeRequest -= BeforeRequest; | |
FiddlerApplication.oProxy.Detach(); | |
FiddlerApplication.Shutdown(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment