Files
server-deploy/internal/cli/environment_test.go
T

44 lines
1.9 KiB
Go

package cli
import (
"encoding/json"
"strings"
"testing"
"server-deploy/internal/installplan"
"server-deploy/internal/preflight"
)
func TestEnvironmentPlanCLI(t *testing.T) {
r := preflight.Collect()
suite, arch := "resolute", "amd64"
if r.Runtime.OS == "linux" {
suite = r.Distribution.Codename
arch = r.Runtime.Architecture
}
if suite != "resolute" && suite != "noble" && suite != "jammy" {
t.Skip("local Linux distribution outside initial lock policy")
}
l := installplan.Lock{ProtocolVersion: 1, Repository: "https://download.docker.com/linux/ubuntu", Suite: suite, Architecture: arch, ReleaseDigest: "sha256:" + strings.Repeat("a", 64), Packages: []installplan.Package{}}
for _, name := range []string{"docker-ce", "docker-ce-cli", "containerd.io", "docker-buildx-plugin", "docker-compose-plugin"} {
l.Packages = append(l.Packages, installplan.Package{Name: name, Version: "1.2.3-1", Filename: "dists/" + suite + "/pool/stable/" + arch + "/" + name + "_1.2.3-1_" + arch + ".deb", Digest: "sha256:" + strings.Repeat("b", 64), Size: 123})
}
raw, _ := json.Marshal(struct {
Lock installplan.Lock `json:"lock"`
}{l})
code, out, diagnostics := run([]string{"plan-environment"}, string(raw))
var result struct {
Mode string `json:"mode"`
Draft installplan.Draft `json:"draft"`
}
if code != 0 || json.Unmarshal([]byte(out), &result) != nil || result.Mode != "local-environment-draft" || result.Draft.Executable || result.Draft.RepositoryAuthenticated || len(result.Draft.RequestedPackages) != 5 || len(result.Draft.Blockers) == 0 {
t.Fatalf("bad draft %s %s", out, diagnostics)
}
for _, bad := range []string{`{}`, strings.Replace(string(raw), `"1.2.3-1"`, `"secret;reboot"`, 1)} {
code, out, diagnostics := run([]string{"plan-environment"}, bad)
if code == 0 || out != "" || strings.Contains(diagnostics, "secret") {
t.Fatal("invalid request accepted or leaked")
}
}
}