my-homelab-configs/cmd/jeannie-core/main_test.go

91 lines
2.4 KiB
Go

package main
import (
"bytes"
"context"
"os"
"path/filepath"
"strings"
"testing"
)
func TestReportRenderProblemsOnly(t *testing.T) {
input := strings.Join([]string{
"ok\tArea\tHealthy\tok\t\t\tgraph\tquery",
"warn\tArea\tWarning\tneeds attention\tdetail\tfix\tgraph\tquery",
"",
}, "\n")
var output bytes.Buffer
if err := runReportRender([]string{"--title", "Unit Report", "--only", "problems"}, strings.NewReader(input), &output); err != nil {
t.Fatal(err)
}
got := output.String()
if strings.Contains(got, "Healthy") {
t.Fatalf("problems-only report included ok row:\n%s", got)
}
for _, want := range []string{"Unit Report", "warn=1", "Warning", "Next Fix", "fix"} {
if !strings.Contains(got, want) {
t.Fatalf("report missing %q:\n%s", want, got)
}
}
}
func TestReportRenderHidesOKGraphAndQuery(t *testing.T) {
input := "ok\tArea\tHealthy\tok\tdetail\tfix\tgraph\tquery\n"
var output bytes.Buffer
if err := runReportRender([]string{"--title", "Unit Report", "--only", "all", "--details"}, strings.NewReader(input), &output); err != nil {
t.Fatal(err)
}
got := output.String()
if strings.Contains(got, "graph:") || strings.Contains(got, "query:") {
t.Fatalf("ok row leaked graph/query links:\n%s", got)
}
}
func TestExecuteDAGRespectsDependencies(t *testing.T) {
dir := t.TempDir()
first := filepath.Join(dir, "first")
second := filepath.Join(dir, "second")
spec := dagSpec{
Parallelism: 2,
Tasks: []dagTask{
{
ID: "first",
Command: []string{"sh", "-c", "printf first > \"$1\"", "sh", first},
},
{
ID: "second",
Needs: []string{"first"},
Command: []string{"sh", "-c", "test -f \"$1\" && printf second > \"$2\"", "sh", first, second},
},
},
}
var output bytes.Buffer
if err := executeDAG(context.Background(), spec, &output, &output); err != nil {
t.Fatal(err)
}
if _, err := os.Stat(second); err != nil {
t.Fatalf("dependent task did not run after dependency: %v\n%s", err, output.String())
}
}
func TestExecuteDAGReturnsFailedTask(t *testing.T) {
spec := dagSpec{
Parallelism: 2,
Tasks: []dagTask{
{ID: "bad", Command: []string{"sh", "-c", "exit 7"}},
},
}
var output bytes.Buffer
err := executeDAG(context.Background(), spec, &output, &output)
if err == nil || !strings.Contains(err.Error(), `dag task "bad" failed`) {
t.Fatalf("expected failed task error, got %v\n%s", err, output.String())
}
}