mirror of
https://github.com/kubernetes/client-go.git
synced 2025-06-23 05:37:13 +00:00
c-go/transport: Add test for CacheRoundTripper
Kubernetes-commit: d6348cc1ff72be719e0830da2c64ef1689499956
This commit is contained in:
parent
10908324c6
commit
9f99bf70e2
@ -17,7 +17,11 @@ limitations under the License.
|
|||||||
package transport
|
package transport
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bytes"
|
||||||
|
"io/ioutil"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"net/url"
|
||||||
|
"os"
|
||||||
"reflect"
|
"reflect"
|
||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"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))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user