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") } } }