91 lines
2.4 KiB
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())
|
|
}
|
|
}
|