This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
package collector
|
||||
|
||||
import (
|
||||
"github.com/google/uuid"
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
|
||||
func TestManagerStatusRecoversAfterSuccessfulRead(t *testing.T) {
|
||||
m := NewManager(nil, nil)
|
||||
id := uuid.New()
|
||||
|
||||
m.MarkConnected(id)
|
||||
online, offline := m.Times(id)
|
||||
if m.Status(id) != "connected" || online == nil || offline != nil {
|
||||
t.Fatalf("expected connected status with online timestamp, got status=%q online=%v offline=%v", m.Status(id), online, offline)
|
||||
}
|
||||
firstOnline := *online
|
||||
|
||||
m.MarkDisconnected(id)
|
||||
if m.Status(id) != "disconnected" {
|
||||
t.Fatalf("expected disconnected status, got %q", m.Status(id))
|
||||
}
|
||||
_, offline = m.Times(id)
|
||||
if offline == nil {
|
||||
t.Fatal("expected offline timestamp after disconnect")
|
||||
}
|
||||
|
||||
time.Sleep(2 * time.Millisecond)
|
||||
m.MarkConnected(id)
|
||||
online, offline = m.Times(id)
|
||||
if m.Status(id) != "connected" || online == nil || offline == nil {
|
||||
t.Fatalf("expected recovered connected status, got status=%q online=%v offline=%v", m.Status(id), online, offline)
|
||||
}
|
||||
if !online.After(firstOnline) {
|
||||
t.Fatalf("expected reconnect to refresh online timestamp: first=%v current=%v", firstOnline, *online)
|
||||
}
|
||||
}
|
||||
|
||||
func TestManagerRepeatedConnectedDoesNotRefreshOnlineTimestamp(t *testing.T) {
|
||||
m := NewManager(nil, nil)
|
||||
id := uuid.New()
|
||||
m.MarkConnected(id)
|
||||
first, _ := m.Times(id)
|
||||
m.MarkConnected(id)
|
||||
second, _ := m.Times(id)
|
||||
if first == nil || second == nil || !first.Equal(*second) {
|
||||
t.Fatalf("repeated connected mark changed online timestamp: first=%v second=%v", first, second)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user