package relay import ( "context" "encoding/json" "testing" "time" ) func TestAuthorityRoundTrip(t *testing.T) { s := newMemStore(t) ctx := context.Background() a, _, err := ReadAuthority(ctx, s) if err != nil || a != nil { t.Fatalf("absent = %v %v, want nil,nil", a, err) } body, _ := json.Marshal(Authority{Apps: []AuthorityApp{{Account: "abc", App: "meet", Incarnation: "0123456789abcdef", Regions: []string{"eu-west-1"}}}, WrittenAt: time.Unix(1_800_000_000, 0).UTC()}) if _, err := s.Put(ctx, AuthorityKey, body, ""); err != nil { t.Fatal(err) } a, etag, err := ReadAuthority(ctx, s) if err != nil || etag == "" { t.Fatal(err) } if got, ok := a.Lookup("abc", "meet"); !ok || got.Incarnation != "0123456789abcdef" { t.Fatalf("lookup = %+v %v", got, ok) } if _, ok := a.Lookup("abc", "other"); ok { t.Fatal("unknown app found") } } func TestWriteHeartbeatTwice(t *testing.T) { s := newMemStore(t) ctx := context.Background() t0 := time.Unix(1_800_000_000, 0).UTC() if err := WriteHeartbeat(ctx, s, Heartbeat{Box: "box1", Region: "eu-west-1", ReadAt: t0}); err != nil { t.Fatalf("first write: %v", err) } t1 := t0.Add(30 * time.Second) if err := WriteHeartbeat(ctx, s, Heartbeat{Box: "box1", Region: "eu-west-1", ReadAt: t1}); err != nil { t.Fatalf("second write: %v", err) } body, _, err := s.Get(ctx, HeartbeatKey("box1")) if err != nil { t.Fatal(err) } var got Heartbeat if err := json.Unmarshal(body, &got); err != nil { t.Fatal(err) } if !got.ReadAt.Equal(t1) { t.Fatalf("read_at = %v, want %v", got.ReadAt, t1) } } func TestLease(t *testing.T) { var l Lease t0 := time.Unix(1_800_000_000, 0) if l.Live(t0) { t.Fatal("never renewed should not be live") } l.Renew(t0) if !l.Live(t0.Add(14 * time.Minute)) { t.Fatal("14m should be live") } if l.Live(t0.Add(16 * time.Minute)) { t.Fatal("16m should not be live") } }