Files
distributor/internal/cli/root_test.go

110 lines
2.7 KiB
Go

package cli
import (
"bytes"
"context"
"os"
"path/filepath"
"strings"
"testing"
)
func TestExecuteRootHelp(t *testing.T) {
var stdout, stderr bytes.Buffer
code := Execute(context.Background(), []string{"--help"}, &stdout, &stderr)
if code != exitOK {
t.Fatalf("exit code = %d, want %d", code, exitOK)
}
if !strings.Contains(stdout.String(), "Usage:") {
t.Fatalf("stdout = %q, want help text", stdout.String())
}
if stderr.Len() != 0 {
t.Fatalf("stderr = %q, want empty", stderr.String())
}
}
func TestExecuteVersion(t *testing.T) {
var stdout, stderr bytes.Buffer
code := Execute(context.Background(), []string{"version"}, &stdout, &stderr)
if code != exitOK {
t.Fatalf("exit code = %d, want %d", code, exitOK)
}
if got, want := stdout.String(), "distributor dev\n"; got != want {
t.Fatalf("stdout = %q, want %q", got, want)
}
if stderr.Len() != 0 {
t.Fatalf("stderr = %q, want empty", stderr.String())
}
}
func TestPlaceholderCommandsFailClearly(t *testing.T) {
tests := []string{"run", "validate", "inspect"}
for _, command := range tests {
t.Run(command, func(t *testing.T) {
var stdout, stderr bytes.Buffer
code := Execute(context.Background(), []string{command}, &stdout, &stderr)
if code != exitError {
t.Fatalf("exit code = %d, want %d", code, exitError)
}
if stdout.Len() != 0 {
t.Fatalf("stdout = %q, want empty", stdout.String())
}
if !strings.Contains(stderr.String(), "not implemented") {
t.Fatalf("stderr = %q, want not implemented error", stderr.String())
}
})
}
}
func TestExecuteRunDryRun(t *testing.T) {
configPath := filepath.Join(t.TempDir(), "config.yml")
err := os.WriteFile(configPath, []byte(`
pipelines:
- id: reports
source:
backend: local
path: /source
destinations:
- id: archive
backend: local
path: /archive
`), 0o600)
if err != nil {
t.Fatalf("write config: %v", err)
}
var stdout, stderr bytes.Buffer
code := Execute(context.Background(), []string{"run", "--config", configPath, "--dry-run"}, &stdout, &stderr)
if code != exitOK {
t.Fatalf("exit code = %d, want %d; stderr = %q", code, exitOK, stderr.String())
}
if !strings.Contains(stdout.String(), "Configured pipelines: 1") {
t.Fatalf("stdout = %q, want config summary", stdout.String())
}
if stderr.Len() != 0 {
t.Fatalf("stderr = %q, want empty", stderr.String())
}
}
func TestUnknownCommandIsUsageError(t *testing.T) {
var stdout, stderr bytes.Buffer
code := Execute(context.Background(), []string{"nope"}, &stdout, &stderr)
if code != exitUsage {
t.Fatalf("exit code = %d, want %d", code, exitUsage)
}
if !strings.Contains(stderr.String(), "unknown command") {
t.Fatalf("stderr = %q, want unknown command error", stderr.String())
}
}