1
0
Fork 0
mirror of https://github.com/imjasonh/terraform-playground synced 2026-07-08 07:44:57 +00:00
terraform-playground/pymage/internal/cache/cache_test.go
Cursor Agent 4100e12b20
perf: speed up no-op builds (resolve base once, cache interpreter detection)
A no-op build's ~2-3s was almost all registry I/O:
- the base index was fetched 3x (BasePlatforms + remote.Image per platform)
- the base's top layer was downloaded once per platform every build to read
  /etc/apko.json for interpreter detection (Chainguard has no PYTHON_VERSION)

Changes:
- build.BaseSet resolves the base reference once and serves per-platform child
  images memoized (index fetched once; verified by TestBaseSet)
- cache the detected interpreter version by base digest in a default per-user
  metadata cache (cache.GetText/PutText), so repeat builds skip the apko layer
  download
- lazy wheel-cache dir creation; wheelhouse.Resolve defaults to the per-user
  cache dir

Tests: TestBaseSet (index fetched once + per-platform memoized), TestCachedInterpreter
(write + cache-hit short-circuit), cache text round-trip.

Co-authored-by: Jason Hall <imjasonh@users.noreply.github.com>
2026-06-11 00:34:16 +00:00

59 lines
1.1 KiB
Go

package cache
import (
"testing"
"github.com/imjasonh/terraform-playground/pymage/internal/ptar"
)
func TestTextRoundTrip(t *testing.T) {
c, err := New(t.TempDir())
if err != nil {
t.Fatal(err)
}
if _, ok := c.GetText("k"); ok {
t.Fatal("expected miss before PutText")
}
if err := c.PutText("k", "3.14"); err != nil {
t.Fatal(err)
}
if v, ok := c.GetText("k"); !ok || v != "3.14" {
t.Fatalf("GetText = %q,%v; want 3.14,true", v, ok)
}
}
func TestPutGetRoundTrip(t *testing.T) {
c, err := New(t.TempDir())
if err != nil {
t.Fatal(err)
}
layer, err := ptar.Layer([]ptar.File{{Path: "site/foo.py", Data: []byte("X=1\n")}})
if err != nil {
t.Fatal(err)
}
want, err := layer.Digest()
if err != nil {
t.Fatal(err)
}
const key = "wheel|1|abc|/app/.venv|python3.12"
if _, ok := c.Get(key); ok {
t.Fatal("expected a miss before Put")
}
if err := c.Put(key, layer); err != nil {
t.Fatal(err)
}
cached, ok := c.Get(key)
if !ok {
t.Fatal("expected a hit after Put")
}
got, err := cached.Digest()
if err != nil {
t.Fatal(err)
}
if got != want {
t.Fatalf("cached layer digest %s != original %s", got, want)
}
}