diff --git a/internal/cache/cache_test.go b/internal/cache/cache_test.go new file mode 100644 index 0000000..3f97266 --- /dev/null +++ b/internal/cache/cache_test.go @@ -0,0 +1,48 @@ +package cache + +import ( + "bytes" + "fmt" + "net/http" + "net/http/httptest" + "os" + "path/filepath" + "testing" +) + +func newTestServer(t *testing.T, handler http.HandlerFunc) *httptest.Server { + t.Helper() + svr := httptest.NewServer(handler) + t.Cleanup(func() { svr.Close() }) + return svr +} + +func newTestCache(t *testing.T, mirrorURL string) *Cache { + t.Helper() + return NewCache(t.TempDir(), mirrorURL) +} + +func TestFetchFileExists(t *testing.T) { + const expected = "This is fake file contents" + + svr := newTestServer(t, http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + fmt.Fprint(w, expected) + })) + + c := newTestCache(t, svr.URL+"/") + + err := c.Fetch("fakefile") + if err != nil { + t.Fatalf("Fetch failed %v", err) + } + + fakefilepath := filepath.Join(c.cacheRoot, "fakefile") + + data, err := os.ReadFile(fakefilepath) + if err != nil { + t.Fatalf("Error reading file back: %v", err) + } + if !bytes.Equal(data, []byte(expected)) { + t.Errorf("expected file to contain %s got %s", expected, data) + } +}