From 9f99bf70e2e285e705afa5463a2e8230dba821ae Mon Sep 17 00:00:00 2001 From: Antoine Pelisse Date: Fri, 4 Aug 2017 08:52:49 -0700 Subject: [PATCH] c-go/transport: Add test for CacheRoundTripper Kubernetes-commit: d6348cc1ff72be719e0830da2c64ef1689499956 --- transport/round_trippers_test.go | 61 ++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/transport/round_trippers_test.go b/transport/round_trippers_test.go index d5ffc6bd..c1e30c3f 100644 --- a/transport/round_trippers_test.go +++ b/transport/round_trippers_test.go @@ -17,7 +17,11 @@ limitations under the License. package transport import ( + "bytes" + "io/ioutil" "net/http" + "net/url" + "os" "reflect" "strings" "testing" @@ -216,3 +220,60 @@ func TestAuthProxyRoundTripper(t *testing.T) { } } } + +func TestCacheRoundTripper(t *testing.T) { + rt := &testRoundTripper{} + cacheDir, err := ioutil.TempDir("", "cache-rt") + defer os.RemoveAll(cacheDir) + if err != nil { + t.Fatal(err) + } + cache := NewCacheRoundTripper(cacheDir, rt) + + // First call, caches the response + req := &http.Request{ + Method: http.MethodGet, + URL: &url.URL{Host: "localhost"}, + } + rt.Response = &http.Response{ + Header: http.Header{"ETag": []string{`"123456"`}}, + Body: ioutil.NopCloser(bytes.NewReader([]byte("Content"))), + StatusCode: http.StatusOK, + } + resp, err := cache.RoundTrip(req) + if err != nil { + t.Fatal(err) + } + content, err := ioutil.ReadAll(resp.Body) + if err != nil { + t.Fatal(err) + } + if string(content) != "Content" { + t.Errorf(`Expected Body to be "Content", got %q`, string(content)) + } + + // Second call, returns cached response + req = &http.Request{ + Method: http.MethodGet, + URL: &url.URL{Host: "localhost"}, + } + rt.Response = &http.Response{ + StatusCode: http.StatusNotModified, + Body: ioutil.NopCloser(bytes.NewReader([]byte("Other Content"))), + } + + resp, err = cache.RoundTrip(req) + if err != nil { + t.Fatal(err) + } + + // Read body and make sure we have the initial content + content, err = ioutil.ReadAll(resp.Body) + resp.Body.Close() + if err != nil { + t.Fatal(err) + } + if string(content) != "Content" { + t.Errorf("Invalid content read from cache %q", string(content)) + } +}