//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) } }