67 lines
2.5 KiB
Go
67 lines
2.5 KiB
Go
//go:build integration
|
|
|
|
package main
|
|
|
|
import (
|
|
"context"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/novox/mesh-controller/internal/link"
|
|
)
|
|
|
|
func TestAReadCallWritesNoJournalLine(t *testing.T) {
|
|
said := journalled(t)
|
|
ctx := link.WithCallID(context.Background(), "call-1")
|
|
ordinary := cliVerdict{why: "not the terminal"}
|
|
for _, line := range [][]string{{"plans"}, {"status"}, {"conditions"}, {"node", "list"}, {"builds"}, {"queue"},
|
|
{"settings", "show", "zsh"}, {"plans", "--json"}} {
|
|
if a := runForMeshCLI(ctx, "g14", cliAsked("jochen", 1000, line...), ordinary); a.Exit != 0 || a.Refused != "" {
|
|
t.Fatalf("%q did not run: %+v", line, a)
|
|
}
|
|
}
|
|
runForMeshCLI(ctx, "control", cliAsked("jochen", 1000, "plans"), cliVerdict{terminal: true, why: "the terminal"})
|
|
if len(*said) != 0 {
|
|
t.Fatalf("read calls wrote journal lines: %q", *said)
|
|
}
|
|
runForMeshCLI(ctx, "control", cliAsked("jochen", 1000, "assign", "g14", "zsh"), cliVerdict{terminal: true, why: "the terminal"})
|
|
if len(*said) != 1 || !strings.Contains((*said)[0], `asked "assign"`) {
|
|
t.Fatalf("a call that changes something was not said: %q", *said)
|
|
}
|
|
}
|
|
|
|
func TestAFailedOrRefusedReadIsSaid(t *testing.T) {
|
|
said := journalled(t)
|
|
runForMeshCLI(context.Background(), "g14", cliAsked("root", 0, "plans"), cliVerdict{refused: "root is not answered"})
|
|
t.Setenv(echoFails, "1")
|
|
a := runForMeshCLI(context.Background(), "g14", cliAsked("jochen", 1000, "plans"), cliVerdict{why: "not the terminal"})
|
|
if a.Exit == 0 {
|
|
t.Fatalf("the read did not fail: %+v", a)
|
|
}
|
|
if len(*said) != 2 || !strings.Contains((*said)[0], "refused") || !strings.Contains((*said)[1], "failed (exit 3)") {
|
|
t.Fatalf("the journal said %q", *said)
|
|
}
|
|
if line := cliReads.said(readCallsEvery); line != "" {
|
|
t.Fatalf("a failed read was counted as a read: %q", line)
|
|
}
|
|
}
|
|
|
|
func TestTheReadCallsAreCountedPerCaller(t *testing.T) {
|
|
said := journalled(t)
|
|
ordinary := cliVerdict{why: "not the terminal"}
|
|
for range 3 {
|
|
runForMeshCLI(context.Background(), "g14", cliAsked("jochen", 1000, "plans"), ordinary)
|
|
}
|
|
runForMeshCLI(context.Background(), "ace", cliAsked("jochen", 1000, "status"), ordinary)
|
|
if len(*said) != 0 {
|
|
t.Fatalf("read calls wrote lines: %q", *said)
|
|
}
|
|
line := cliReads.said(readCallsEvery)
|
|
if !strings.Contains(line, "jochen on ace 1, jochen on g14 3") || !strings.Contains(line, "1h0m0s") {
|
|
t.Fatalf("the hourly line said %q", line)
|
|
}
|
|
if again := cliReads.said(readCallsEvery); again != "" {
|
|
t.Fatalf("an hour with no read calls said %q", again)
|
|
}
|
|
}
|