97b88a703c
orca ns inherit <name> --parent (cycle detection), ns set-constraint <key>=value>. Deprecation warnings on orca cert ca-init/gen/renew (step-ca replaces) and .hcl jobspec (R-013). --no-deprecation-warnings suppresses all. ---ci--- project: orca phase: 13 milestone: v0.11 status: execute ---/ci---
178 lines
5.4 KiB
Go
178 lines
5.4 KiB
Go
package cli
|
|
|
|
import (
|
|
"bytes"
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
// runWithSlog executes the given args against rootCmd, capturing the
|
|
// slog output (where warnDeprecated writes). It returns the captured
|
|
// slog buffer and the command stdout buffer.
|
|
func runWithSlog(t *testing.T, args []string, suppressWarnings bool) (slogOut, stdOut string, err error) {
|
|
t.Helper()
|
|
_, cleanup := initTestEnv(t)
|
|
defer cleanup()
|
|
resetRootFlags(t)
|
|
|
|
buf, restore := captureSlog(t)
|
|
defer restore()
|
|
|
|
if suppressWarnings {
|
|
_ = rootCmd.PersistentFlags().Set("no-deprecation-warnings", "true")
|
|
}
|
|
|
|
var out bytes.Buffer
|
|
rootCmd.SetOut(&out)
|
|
rootCmd.SetErr(&out)
|
|
rootCmd.SetArgs(args)
|
|
err = rootCmd.Execute()
|
|
return buf.String(), out.String(), err
|
|
}
|
|
|
|
func TestDeprecationDaemonEmitsWarning(t *testing.T) {
|
|
slogOut, _ := runDaemonHermetic(t, false)
|
|
if !strings.Contains(slogOut, "orca daemon is deprecated in v0.9") {
|
|
t.Errorf("expected daemon deprecation warning, got:\n%s", slogOut)
|
|
}
|
|
}
|
|
|
|
func TestDeprecationCertCAInitEmitsWarning(t *testing.T) {
|
|
slogOut, _, err := runWithSlog(t, []string{"cert", "ca-init", "--cn", "dep-test"}, false)
|
|
if err != nil {
|
|
t.Fatalf("cert ca-init: %v", err)
|
|
}
|
|
if !strings.Contains(slogOut, "orca cert ca-init is deprecated") {
|
|
t.Errorf("expected cert ca-init deprecation warning, got:\n%s", slogOut)
|
|
}
|
|
if !strings.Contains(slogOut, "step-ca") {
|
|
t.Errorf("deprecation warning should mention step-ca, got:\n%s", slogOut)
|
|
}
|
|
}
|
|
|
|
func TestDeprecationCertGenEmitsWarning(t *testing.T) {
|
|
// gen requires a CA; we only assert the warning fires (before the
|
|
// error path).
|
|
slogOut, _, _ := runWithSlog(t, []string{"cert", "gen", "--cn", "dep-gen"}, false)
|
|
if !strings.Contains(slogOut, "orca cert gen is deprecated") {
|
|
t.Errorf("expected cert gen deprecation warning, got:\n%s", slogOut)
|
|
}
|
|
}
|
|
|
|
func TestDeprecationCertRenewEmitsWarning(t *testing.T) {
|
|
// renew requires a CA; we only assert the warning fires (before the
|
|
// error path).
|
|
slogOut, _, _ := runWithSlog(t, []string{"cert", "renew"}, false)
|
|
if !strings.Contains(slogOut, "orca cert renew is deprecated") {
|
|
t.Errorf("expected cert renew deprecation warning, got:\n%s", slogOut)
|
|
}
|
|
}
|
|
|
|
func TestDeprecationCertShowNoWarning(t *testing.T) {
|
|
slogOut, _, err := runWithSlog(t, []string{"cert", "show"}, false)
|
|
// show may fail if no cert exists; we only assert no deprecation.
|
|
_ = err
|
|
if strings.Contains(slogOut, "deprecated") {
|
|
t.Errorf("cert show must NOT emit deprecation warning, got:\n%s", slogOut)
|
|
}
|
|
}
|
|
|
|
func TestDeprecationCertFingerprintNoWarning(t *testing.T) {
|
|
// Need a CA first so fingerprint has something to read.
|
|
_, cleanup := initTestEnv(t)
|
|
defer cleanup()
|
|
resetRootFlags(t)
|
|
var b bytes.Buffer
|
|
rootCmd.SetOut(&b)
|
|
rootCmd.SetErr(&b)
|
|
rootCmd.SetArgs([]string{"cert", "ca-init", "--cn", "fp-test"})
|
|
if err := rootCmd.Execute(); err != nil {
|
|
t.Fatalf("cert ca-init: %v", err)
|
|
}
|
|
|
|
slogBuf, restore := captureSlog(t)
|
|
defer restore()
|
|
|
|
resetRootFlags(t)
|
|
var out bytes.Buffer
|
|
rootCmd.SetOut(&out)
|
|
rootCmd.SetErr(&out)
|
|
rootCmd.SetArgs([]string{"cert", "fingerprint", "--which", "ca"})
|
|
_ = rootCmd.Execute()
|
|
|
|
if strings.Contains(slogBuf.String(), "deprecated") {
|
|
t.Errorf("cert fingerprint must NOT emit deprecation warning, got:\n%s", slogBuf.String())
|
|
}
|
|
}
|
|
|
|
func TestDeprecationJobRunHCLEmitsWarning(t *testing.T) {
|
|
dir := t.TempDir()
|
|
specPath := filepath.Join(dir, "old-spec.hcl")
|
|
if err := os.WriteFile(specPath, []byte(`job "true" {}
|
|
task "t" {
|
|
command = "/bin/true"
|
|
}
|
|
`), 0o644); err != nil {
|
|
t.Fatalf("write spec: %v", err)
|
|
}
|
|
slogOut, _, err := runWithSlog(t, []string{"job", "run", specPath}, false)
|
|
if err != nil {
|
|
t.Fatalf("job run: %v", err)
|
|
}
|
|
if !strings.Contains(slogOut, ".hcl jobspec is legacy") {
|
|
t.Errorf("expected .hcl deprecation warning, got:\n%s", slogOut)
|
|
}
|
|
if !strings.Contains(slogOut, "R-013") {
|
|
t.Errorf("deprecation warning should reference R-013, got:\n%s", slogOut)
|
|
}
|
|
}
|
|
|
|
func TestDeprecationJobRunMDNoWarning(t *testing.T) {
|
|
dir := t.TempDir()
|
|
specPath := filepath.Join(dir, "spec.md")
|
|
if err := os.WriteFile(specPath, []byte("---\nkind: Workload\nname: md-job\n---\n"), 0o644); err != nil {
|
|
t.Fatalf("write spec: %v", err)
|
|
}
|
|
slogOut, _, _ := runWithSlog(t, []string{"job", "run", specPath}, false)
|
|
if strings.Contains(slogOut, ".hcl jobspec is legacy") {
|
|
t.Errorf(".md jobspec must NOT emit .hcl deprecation warning, got:\n%s", slogOut)
|
|
}
|
|
}
|
|
|
|
func TestDeprecationWarningsSuppressedByFlag(t *testing.T) {
|
|
// daemon
|
|
slogOut, _ := runDaemonHermetic(t, true)
|
|
if strings.Contains(slogOut, "deprecated in v0.9") {
|
|
t.Errorf("--no-deprecation-warnings should suppress daemon warning, got:\n%s", slogOut)
|
|
}
|
|
|
|
// cert ca-init
|
|
slogOut2, _, err := runWithSlog(t, []string{"cert", "ca-init", "--cn", "sup-test"}, true)
|
|
if err != nil {
|
|
t.Fatalf("cert ca-init: %v", err)
|
|
}
|
|
if strings.Contains(slogOut2, "deprecated") {
|
|
t.Errorf("--no-deprecation-warnings should suppress cert warning, got:\n%s", slogOut2)
|
|
}
|
|
|
|
// job run .hcl
|
|
dir := t.TempDir()
|
|
specPath := filepath.Join(dir, "old-spec.hcl")
|
|
if err := os.WriteFile(specPath, []byte(`job "true" {}
|
|
task "t" {
|
|
command = "/bin/true"
|
|
}
|
|
`), 0o644); err != nil {
|
|
t.Fatalf("write spec: %v", err)
|
|
}
|
|
slogOut3, _, err := runWithSlog(t, []string{"job", "run", specPath}, true)
|
|
if err != nil {
|
|
t.Fatalf("job run: %v", err)
|
|
}
|
|
if strings.Contains(slogOut3, "deprecated") {
|
|
t.Errorf("--no-deprecation-warnings should suppress .hcl warning, got:\n%s", slogOut3)
|
|
}
|
|
}
|