51 lines
1.5 KiB
Go
51 lines
1.5 KiB
Go
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)
|
|
}
|
|
}
|