mirror of https://github.com/k3s-io/k3s
c-go/transport: Add test for CacheRoundTripper
parent
e77d298f83
commit
d6348cc1ff
|
@ -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