53 lines
1.4 KiB
Go
53 lines
1.4 KiB
Go
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)
|
|
}
|
|
}
|