A machine whose presence says online is heard now; last heard is otherwise the later of last_seen and the presence time (issue 1156)
This commit is contained in:
@@ -70,7 +70,7 @@ func TestAStuckPresenceKeyIsTheSilentVerdict(t *testing.T) { // 1156/AC2
|
||||
f := calm(now)
|
||||
f.machines = append(f.machines, aMachineHeardAt(now, 10*time.Second))
|
||||
notMoved := sdkdelivery.Stuck{Bucket: sdkdelivery.PresenceBucket, Key: "laptop", Waited: "its return", Since: now.Add(-3 * time.Minute)}
|
||||
applyPresence(&f.machines[1], ¬Moved, now.Add(-3*time.Minute))
|
||||
applyPresence(&f.machines[1], ¬Moved, nil, now)
|
||||
got := watchHeartbeats(f)
|
||||
if len(got) != 1 || got[0].Machine != "laptop" || got[0].Kind != "silent" {
|
||||
t.Fatalf("a presence key not moved: %+v", got)
|
||||
@@ -85,24 +85,38 @@ func TestAStuckPresenceKeyIsTheSilentVerdict(t *testing.T) { // 1156/AC2
|
||||
f.machines[1].lastHeard = now.Add(-2 * time.Hour)
|
||||
moved := notMoved
|
||||
moved.Moved = true
|
||||
applyPresence(&f.machines[1], &moved, now.Add(-time.Minute))
|
||||
applyPresence(&f.machines[1], &moved, nil, now)
|
||||
if got := watchHeartbeats(f); len(got) != 0 {
|
||||
t.Fatalf("a presence key that moved raised %+v", got)
|
||||
}
|
||||
}
|
||||
|
||||
// 1156/AC3: a machine's last heard is the presence key's entry time when there is one, and last_seen when there is none.
|
||||
func TestLastHeardIsThePresenceKeysTimeWhenThereIsOne(t *testing.T) { // 1156/AC3
|
||||
// 1156/AC3: with a presence entry that says offline, last heard is the later of last_seen and the entry's time; with none,
|
||||
// last_seen. An entry that says online counts as heard now: the watchman writes it only when it changes, so its time is
|
||||
// when the machine connected, and a machine online for hours with no stuck key is not silent, whatever last_seen says.
|
||||
func TestLastHeardFollowsThePresenceEntry(t *testing.T) { // 1156/AC3
|
||||
now := time.Now()
|
||||
seen := now.Add(-time.Hour)
|
||||
m := machineFacts{name: "laptop", lastHeard: seen}
|
||||
applyPresence(&m, nil, time.Time{})
|
||||
m := machineFacts{name: "laptop", lastHeard: seen, every: time.Minute}
|
||||
applyPresence(&m, nil, nil, now)
|
||||
if !m.lastHeard.Equal(seen) {
|
||||
t.Fatalf("with no presence key last heard is %v, want last_seen %v", m.lastHeard, seen)
|
||||
t.Fatalf("with no presence entry last heard is %v, want last_seen %v", m.lastHeard, seen)
|
||||
}
|
||||
at := now.Add(-5 * time.Minute)
|
||||
applyPresence(&m, nil, at)
|
||||
if !m.lastHeard.Equal(at) {
|
||||
t.Fatalf("with a presence key last heard is %v, want %v", m.lastHeard, at)
|
||||
offlineAt := now.Add(-5 * time.Minute)
|
||||
applyPresence(&m, nil, &presenceEntry{Online: false, At: offlineAt}, now)
|
||||
if !m.lastHeard.Equal(offlineAt) {
|
||||
t.Fatalf("offline since %v: last heard is %v", offlineAt, m.lastHeard)
|
||||
}
|
||||
m = machineFacts{name: "laptop", lastHeard: now.Add(-time.Minute), every: time.Minute}
|
||||
applyPresence(&m, nil, &presenceEntry{Online: false, At: now.Add(-time.Hour)}, now)
|
||||
if !m.lastHeard.Equal(now.Add(-time.Minute)) {
|
||||
t.Fatalf("an older entry replaced a newer last_seen: %v", m.lastHeard)
|
||||
}
|
||||
for _, lastSeen := range []time.Duration{10 * time.Second, 5 * time.Hour} {
|
||||
m := machineFacts{name: "laptop", lastHeard: now.Add(-lastSeen), every: time.Minute}
|
||||
applyPresence(&m, nil, &presenceEntry{Online: true, At: now.Add(-6 * time.Hour)}, now)
|
||||
if m.silent(now) {
|
||||
t.Fatalf("a machine online since hours ago (last_seen %v ago) with no stuck key is silent", lastSeen)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user