package pi import ( "os" "path/filepath" "strings" "testing" ) func TestReadPinnedVersionReadsTheSingleDefaultPiArg(t *testing.T) { root := t.TempDir() writeCoreDockerfile(t, root, "ARG PI_VERSION=0.81.0\nARG PI_VERSION\n") got, err := ReadPinnedVersion(root) if err != nil { t.Fatal(err) } if got != "0.81.0" { t.Fatalf("ReadPinnedVersion() = %q, want 0.81.0", got) } } func TestReadPinnedVersionRejectsMissingDuplicateAndMalformedPins(t *testing.T) { for _, test := range []struct { name string file string want string }{ {name: "missing", file: "# no default\n", want: "one default PI_VERSION"}, {name: "duplicate", file: "ARG PI_VERSION=0.80.3\nARG PI_VERSION=0.81.0\n", want: "one default PI_VERSION"}, {name: "malformed", file: "ARG PI_VERSION=latest\n", want: "invalid Pi version"}, } { t.Run(test.name, func(t *testing.T) { root := t.TempDir() writeCoreDockerfile(t, root, test.file) _, err := ReadPinnedVersion(root) if err == nil || !strings.Contains(err.Error(), test.want) { t.Fatalf("ReadPinnedVersion() error = %v, want %q", err, test.want) } }) } } func writeCoreDockerfile(t *testing.T, root, contents string) { t.Helper() if err := os.MkdirAll(filepath.Join(root, "docker"), 0o755); err != nil { t.Fatal(err) } if err := os.WriteFile(filepath.Join(root, "docker", "core.Dockerfile"), []byte(contents), 0o600); err != nil { t.Fatal(err) } }