50 lines
1.7 KiB
Go
50 lines
1.7 KiB
Go
//go:build integration
|
|
|
|
package inventory
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestAWalksRestIsReadFromEachMachinesOwnSend(t *testing.T) {
|
|
inv := ForTest(t)
|
|
ctx := t.Context()
|
|
record, err := inv.AddNode(ctx, "g14")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if _, err := inv.NextSequence(ctx, record.ID); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := inv.RecordSent(ctx, record.ID, "d-582", map[string]string{"build-agent": "c1"}); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
sent, found, err := inv.SentTo(ctx, "g14")
|
|
if err != nil || !found || sent.At.IsZero() || sent.Digest != "d-582" {
|
|
t.Fatalf("the machine's own send time: %+v %v %v", sent, found, err)
|
|
}
|
|
if _, ok, err := inv.FirstAppliedAfter(ctx, "g14", sent, sent.At.Add(20*time.Second)); err != nil || ok {
|
|
t.Fatalf("no report yet: %v %v", ok, err)
|
|
}
|
|
if err := inv.RecordApplyDuration(ctx, "g14", "d-582", OutcomeApplied); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
// The walk's record of its send, 20 s after the machine's own: still found, by the machine's own send.
|
|
r, ok, err := inv.FirstAppliedAfter(ctx, "g14", sent, sent.At.Add(20*time.Second))
|
|
if err != nil || !ok || r.Outcome != OutcomeApplied || r.At.Before(sent.At) {
|
|
t.Fatalf("the machine's own report of its send: %+v %v %v", r, ok, err)
|
|
}
|
|
// A later send, reported: never this walk's.
|
|
if err := inv.RecordSent(ctx, record.ID, "d-next", map[string]string{"build-agent": "c2"}); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := inv.RecordApplyDuration(ctx, "g14", "d-next", OutcomeApplied); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
again, _, _ := inv.FirstAppliedAfter(ctx, "g14", sent, sent.At.Add(20*time.Second))
|
|
if !again.At.Equal(r.At) {
|
|
t.Fatalf("a later send's report read as this walk's: %+v, was %+v", again, r)
|
|
}
|
|
}
|