Files
orca/internal/cli/cert_smoke_test.go
T
Jon Chery 04d9dccd41 fix(P01): register orca cert command tree + cert_repo tests (REQ-053)
The `orca cert` command (ca-init, gen, show, renew, fingerprint) was
fully implemented in internal/cli/cert.go but never registered on
rootCmd — unreachable from the CLI. Added init() registration (AD-022).
Added cert_test.go (regression) + cert_smoke_test.go (e2e). Added
cert_repo_test.go (11 tests) + migration 0007 (UNIQUE serial_hex, I-107).

---ci---
project: orca
phase: 1
milestone: v0.7
status: verify
requirements:
  covered: [REQ-053]
  partial: []
---/ci---
2026-08-04 00:05:10 +00:00

122 lines
2.9 KiB
Go

package cli
import (
"bytes"
"os"
"path/filepath"
"strings"
"testing"
)
func runCertArgs(t *testing.T, args []string) (string, error) {
t.Helper()
var buf bytes.Buffer
rootCmd.SetOut(&buf)
rootCmd.SetErr(&buf)
rootCmd.SetArgs(args)
defer func() {
rootCmd.SetArgs(nil)
rootCmd.SetOut(os.Stdout)
rootCmd.SetErr(os.Stderr)
}()
err := rootCmd.Execute()
return buf.String(), err
}
func TestCertSmoke(t *testing.T) {
t.Setenv("ORCA_HOME", t.TempDir())
t.Run("ca-init", func(t *testing.T) {
out, err := runCertArgs(t, []string{"cert", "ca-init", "--cn", "test-ca"})
if err != nil {
t.Fatalf("ca-init: %v\n%s", err, out)
}
if !strings.Contains(out, "CA initialized") {
t.Errorf("ca-init output unexpected: %s", out)
}
})
t.Run("gen", func(t *testing.T) {
out, err := runCertArgs(t, []string{"cert", "gen", "--cn", "test-server", "--san", "localhost", "--san", "127.0.0.1"})
if err != nil {
t.Fatalf("gen: %v\n%s", err, out)
}
if !strings.Contains(out, "Server cert generated") {
t.Errorf("gen output unexpected: %s", out)
}
})
t.Run("show", func(t *testing.T) {
out, err := runCertArgs(t, []string{"cert", "show"})
if err != nil {
t.Fatalf("show: %v\n%s", err, out)
}
if strings.Contains(out, "PRIVATE KEY") {
t.Errorf("show leaked private key material (REQ-035):\n%s", out)
}
})
t.Run("fingerprint_ca", func(t *testing.T) {
out, err := runCertArgs(t, []string{"cert", "fingerprint", "--which", "ca"})
if err != nil {
t.Fatalf("fingerprint ca: %v\n%s", err, out)
}
fp := strings.TrimSpace(out)
if len(fp) != 64 || !isHex(fp) {
t.Errorf("ca fingerprint = %q, want 64 hex chars", fp)
}
})
t.Run("fingerprint_server", func(t *testing.T) {
out, err := runCertArgs(t, []string{"cert", "fingerprint", "--which", "server"})
if err != nil {
t.Fatalf("fingerprint server: %v\n%s", err, out)
}
fp := strings.TrimSpace(out)
if len(fp) != 64 || !isHex(fp) {
t.Errorf("server fingerprint = %q, want 64 hex chars", fp)
}
})
t.Run("renew", func(t *testing.T) {
out, err := runCertArgs(t, []string{"cert", "renew"})
if err != nil {
t.Fatalf("renew: %v\n%s", err, out)
}
if !strings.Contains(out, "rotated") {
t.Errorf("renew output unexpected: %s", out)
}
})
t.Run("file_modes", func(t *testing.T) {
dir := os.Getenv("ORCA_HOME")
checks := []struct {
path string
want os.FileMode
}{
{"ca.crt", 0o644},
{"ca.key", 0o600},
{"server.crt", 0o644},
{"server.key", 0o600},
}
for _, c := range checks {
info, err := os.Stat(filepath.Join(dir, c.path))
if err != nil {
t.Fatalf("stat %s: %v", c.path, err)
}
if got := info.Mode().Perm(); got != c.want {
t.Errorf("mode %s = %04o, want %04o (REQ-033)", c.path, got, c.want)
}
}
})
}
func isHex(s string) bool {
for _, r := range s {
if !((r >= '0' && r <= '9') || (r >= 'a' && r <= 'f') || (r >= 'A' && r <= 'F')) {
return false
}
}
return true
}