~bigbes/sr-ht-spec

ref: 8219ede1804c144de2a2f2e42f3f476bff4b622a sr-ht-spec/db/stamps_test.go -rw-r--r-- 2.5 KiB
8219ede1 — Eugene Blikh feat(web,service): the owner mints and revokes agent tokens in a browser 13 days ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
package db

import (
	"context"
	"errors"
	"testing"
	"time"
)

func TestIndexStamp(t *testing.T) {
	s, _, cleanup := newTestStore(t)
	defer cleanup()
	ctx := context.Background()

	space := mkSpace(t, s, ctx, "bigbes", "rfcs")

	// Never indexed is ErrNotFound, not a zero rev: the reconciler must read it
	// as stale.
	if _, err := s.GetIndexStamp(ctx, space.ID); !errors.Is(err, ErrNotFound) {
		t.Fatalf("unindexed space = %v, want ErrNotFound", err)
	}

	st, err := s.SetIndexStamp(ctx, space.ID, "rev1")
	if err != nil {
		t.Fatalf("set stamp: %v", err)
	}
	if st.SpaceID != space.ID || st.Rev != "rev1" || st.IndexedAt.IsZero() {
		t.Fatalf("unexpected stamp: %+v", st)
	}

	got, err := s.GetIndexStamp(ctx, space.ID)
	if err != nil {
		t.Fatalf("get stamp: %v", err)
	}
	if got.Rev != "rev1" {
		t.Fatalf("rev = %q, want rev1", got.Rev)
	}

	// Re-stamping the same space updates in place.
	if _, err := s.SetIndexStamp(ctx, space.ID, "rev2"); err != nil {
		t.Fatalf("re-stamp: %v", err)
	}
	got, err = s.GetIndexStamp(ctx, space.ID)
	if err != nil {
		t.Fatalf("get stamp: %v", err)
	}
	if got.Rev != "rev2" {
		t.Fatalf("rev = %q, want rev2", got.Rev)
	}
	if !got.IndexedAt.After(st.IndexedAt) && !got.IndexedAt.Equal(st.IndexedAt) {
		t.Fatalf("indexed_at went backwards: %v -> %v", st.IndexedAt, got.IndexedAt)
	}

	// The stamp is per space and cascades with it.
	other := mkSpace(t, s, ctx, "bigbes", "notes")
	if _, err := s.GetIndexStamp(ctx, other.ID); !errors.Is(err, ErrNotFound) {
		t.Fatalf("other space stamp = %v, want ErrNotFound", err)
	}
}

func TestDigestMark(t *testing.T) {
	s, _, cleanup := newTestStore(t)
	defer cleanup()
	ctx := context.Background()

	if _, err := s.GetDigestMark(ctx, "bigbes"); !errors.Is(err, ErrNotFound) {
		t.Fatalf("never looked = %v, want ErrNotFound", err)
	}

	first := time.Now().UTC().Add(-time.Hour).Truncate(time.Microsecond)
	if err := s.SetDigestMark(ctx, "bigbes", first); err != nil {
		t.Fatalf("set mark: %v", err)
	}
	got, err := s.GetDigestMark(ctx, "bigbes")
	if err != nil {
		t.Fatalf("get mark: %v", err)
	}
	if !got.Equal(first) {
		t.Fatalf("mark = %v, want %v", got, first)
	}

	second := first.Add(30 * time.Minute)
	if err := s.SetDigestMark(ctx, "bigbes", second); err != nil {
		t.Fatalf("move mark: %v", err)
	}
	got, err = s.GetDigestMark(ctx, "bigbes")
	if err != nil {
		t.Fatalf("get mark: %v", err)
	}
	if !got.Equal(second) {
		t.Fatalf("mark = %v, want %v", got, second)
	}

	if _, err := s.GetDigestMark(ctx, "someone"); !errors.Is(err, ErrNotFound) {
		t.Fatalf("other owner = %v, want ErrNotFound", err)
	}
}