func TestReplaceImage(t *testing.T) { proxy := gopensslproxy.NewProxyHttpServer() panda := getImage("test_data/panda.png", t) football := getImage("test_data/football.png", t) proxy.OnResponse(gopensslproxy.UrlIs("/test_data/panda.png")).Do(gopensslproxy_image.HandleImage(func(img image.Image, ctx *gopensslproxy.ProxyCtx) image.Image { return football })) proxy.OnResponse(gopensslproxy.UrlIs("/test_data/football.png")).Do(gopensslproxy_image.HandleImage(func(img image.Image, ctx *gopensslproxy.ProxyCtx) image.Image { return panda })) client, l := oneShotProxy(proxy, t) defer l.Close() imgByPandaReq, _, err := image.Decode(bytes.NewReader(getOrFail(localFile("test_data/panda.png"), client, t))) fatalOnErr(err, "decode panda", t) compareImage(football, imgByPandaReq, t) imgByFootballReq, _, err := image.Decode(bytes.NewReader(getOrFail(localFile("test_data/football.png"), client, t))) fatalOnErr(err, "decode football", t) compareImage(panda, imgByFootballReq, t) }
func TestReplaceReponseForUrl(t *testing.T) { proxy := gopensslproxy.NewProxyHttpServer() proxy.OnResponse(gopensslproxy.UrlIs("/koko")).DoFunc(func(resp *http.Response, ctx *gopensslproxy.ProxyCtx) *http.Response { resp.StatusCode = http.StatusOK resp.Body = ioutil.NopCloser(bytes.NewBufferString("chico")) return resp }) client, l := oneShotProxy(proxy, t) defer l.Close() if result := string(getOrFail(srv.URL+("/koko"), client, t)); result != "chico" { t.Error("hooked 'koko', should be chico, instead:", result) } if result := string(getOrFail(srv.URL+("/bobo"), client, t)); result != "bobo" { t.Error("still, bobo should stay as usual, instead:", result) } }
func TestImageHandler(t *testing.T) { proxy := gopensslproxy.NewProxyHttpServer() football := getImage("test_data/football.png", t) proxy.OnResponse(gopensslproxy.UrlIs("/test_data/panda.png")).Do(gopensslproxy_image.HandleImage(func(img image.Image, ctx *gopensslproxy.ProxyCtx) image.Image { return football })) client, l := oneShotProxy(proxy, t) defer l.Close() resp, err := client.Get(localFile("test_data/panda.png")) if err != nil { t.Fatal("Cannot get panda.png", err) } img, _, err := image.Decode(resp.Body) if err != nil { t.Error("decode", err) } else { compareImage(football, img, t) } // and again resp, err = client.Get(localFile("test_data/panda.png")) if err != nil { t.Fatal("Cannot get panda.png", err) } img, _, err = image.Decode(resp.Body) if err != nil { t.Error("decode", err) } else { compareImage(football, img, t) } }