From 01498828dc7bacf6ffae124d0817301ceaf01a8d Mon Sep 17 00:00:00 2001 From: Umputun Date: Sun, 20 May 2018 14:03:23 -0500 Subject: [PATCH] more tests for proxy --- app/rest/proxy/image.go | 5 ++++ app/rest/proxy/image_test.go | 51 ++++++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+) diff --git a/app/rest/proxy/image.go b/app/rest/proxy/image.go index ea10ea3b..e668420b 100644 --- a/app/rest/proxy/image.go +++ b/app/rest/proxy/image.go @@ -59,6 +59,11 @@ func (p Image) Routes() chi.Router { } }() + if resp.StatusCode != http.StatusOK { + w.WriteHeader(resp.StatusCode) + return + } + for k, v := range resp.Header { if strings.EqualFold(k, "Content-Type") { w.Header().Set(k, v[0]) diff --git a/app/rest/proxy/image_test.go b/app/rest/proxy/image_test.go index bc8cedde..31d48498 100644 --- a/app/rest/proxy/image_test.go +++ b/app/rest/proxy/image_test.go @@ -1,9 +1,14 @@ package proxy import ( + "encoding/base64" + "fmt" + "net/http" + "net/http/httptest" "testing" "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" ) func TestPicture_Extract(t *testing.T) { @@ -52,3 +57,49 @@ func TestPicture_Replace(t *testing.T) { []string{"http://radio-t.com/img3.png", "http://images.pexels.com/67636/img4.jpeg"}) assert.Equal(t, ` xyz `, r) } + +func TestImage_Routes(t *testing.T) { + img := Image{Enabled: true, RemarkURL: "https://demo.remark42.com", RoutePath: "/api/v1/proxy"} + router := img.Routes() + + httpSrv := imgHttpServer(t) + defer httpSrv.Close() + ts := httptest.NewServer(router) + defer ts.Close() + + encodedImgURL := base64.URLEncoding.EncodeToString([]byte(httpSrv.URL + "/image/img1.png")) + + resp, err := http.Get(ts.URL + "/?src=" + encodedImgURL) + require.Nil(t, err) + assert.Equal(t, 200, resp.StatusCode) + t.Logf("%+v", resp.Header) + assert.Equal(t, "123", resp.Header["Content-Length"][0]) + assert.Equal(t, "image/png", resp.Header["Content-Type"][0]) + + encodedImgURL = base64.URLEncoding.EncodeToString([]byte(httpSrv.URL + "/image/no-such-image.png")) + resp, err = http.Get(ts.URL + "/?src=" + encodedImgURL) + require.Nil(t, err) + assert.Equal(t, 404, resp.StatusCode) +} + +func TestPicture_Convert(t *testing.T) { + img := Image{Enabled: true, RoutePath: "/img"} + r := img.Convert(` xyz `) + assert.Equal(t, ` xyz `, r) +} + +func imgHttpServer(t *testing.T) *httptest.Server { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.URL.Path == "/image/img1.png" { + t.Log("http img request", r.URL) + w.Header().Add("Content-Length", "123") + w.Header().Add("Content-Type", "image/png") + w.Write([]byte(fmt.Sprintf("%123s", "X"))) + return + } + t.Log("http img request - not found", r.URL) + w.WriteHeader(404) + })) + + return ts +}