44 lines
1.9 KiB
Go
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")
|
|
}
|
|
}
|
|
}
|