52 lines
1.7 KiB
Go
52 lines
1.7 KiB
Go
//go:build integration
|
|
|
|
package main
|
|
|
|
import (
|
|
"encoding/json"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/novox/mesh-controller/internal/inventory"
|
|
)
|
|
|
|
func TestNodeShowAndStatusReadTheLastSendFromTheStore(t *testing.T) {
|
|
open := aMesh(t)
|
|
ctx := t.Context()
|
|
record, err := open.inventory.NodeByName(ctx, "laptop")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := open.inventory.RecordSentWith(ctx, record.ID, "d12", nil, 57, 40, inventory.Send{Sequence: 12,
|
|
Epoch: 57, Sender: "a one-shot push by jochen at a shell on anchor", Generation: 40, Digest: "d12",
|
|
Modules: []string{"docker", "sudo"}}); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if _, err := open.inventory.RecordDoing(ctx, record.ID, inventory.Doing{Outcome: inventory.OutcomeRefused,
|
|
Declared: "d12", Refused: "unknown field \"generation\""}); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
shown := printed(t, func() error { return showNode(ctx, open, "laptop") })
|
|
for _, want := range []string{"a one-shot push by jochen at a shell on anchor", "lease epoch 57", "generation 40",
|
|
"docker, sudo", "unknown field \"generation\""} {
|
|
if !strings.Contains(shown, want) {
|
|
t.Errorf("node show laptop does not say %q:\n%s", want, shown)
|
|
}
|
|
}
|
|
body := printed(t, func() error { return statusFor(ctx, open, true) })
|
|
var got struct {
|
|
LastSent []struct {
|
|
Node string `json:"node"`
|
|
Sender string `json:"sender"`
|
|
Answer string `json:"answer"`
|
|
} `json:"lastSent"`
|
|
}
|
|
if err := json.Unmarshal([]byte(body), &got); err != nil {
|
|
t.Fatalf("%v:\n%s", err, body)
|
|
}
|
|
if len(got.LastSent) != 1 || got.LastSent[0].Node != "laptop" || got.LastSent[0].Answer != "refused" ||
|
|
got.LastSent[0].Sender != "a one-shot push by jochen at a shell on anchor" {
|
|
t.Fatalf("status --json's last sends read %+v", got.LastSent)
|
|
}
|
|
}
|