After searching around, I came across Vaurien, the Chaos TCP Proxy. It's seriously cool. As its name suggests, it's a TCP proxy server that you can route a local connection through to a backend server. In TCP mode, it can delay packets, insert bad data, or drop packets, testing the socks (pun intended) off your application.
It also supports the application-level protocols: HTTP, Memcache, MySQL, Redis, and SMTP, and its architecture is very modular, so it's easy to plug in new protocols.
For example, here's how I can run it in HTTP mode:
$ vaurien --protocol http --proxy 127.0.0.1:8888 \ --backend www.google.com:80 --behavior 50:errorThis says to run an HTTP proxy that connects to google.com on the backend and return a 5xx HTTP error code 50% of the time. Testing it out with curl:
$ curl --head -H "Host: www.google.com" http://127.0.0.1:8888/ HTTP/1.1 200 OK ... $ curl --head -H "Host: www.google.com" http://127.0.0.1:8888/ HTTP/1.1 500 Internal Server Error Content-Type: text/html; charset=UTF-8 $ curl --head -H "Host: www.google.com" http://127.0.0.1:8888/ HTTP/1.1 502 Bad Gateway Content-Type: text/html; charset=UTF-8
Filed this away as a super useful tool.