Skip to content

Commit b5c1662

Browse files
committed
Test metricscache more thoroughly
1 parent 7e9e5ef commit b5c1662

File tree

2 files changed

+83
-46
lines changed

2 files changed

+83
-46
lines changed

coderd/metricscache/cache.go

+3-1
Original file line numberDiff line numberDiff line change
@@ -114,8 +114,10 @@ func (c *Cache) Start(
114114
}
115115

116116
ticker := time.NewTicker(interval)
117+
defer ticker.Stop()
118+
117119
for {
118-
for r := retry.New(time.Second, time.Minute); r.Wait(ctx); {
120+
for r := retry.New(time.Millisecond*100, time.Minute); r.Wait(ctx); {
119121
start := time.Now()
120122
err := c.refresh(ctx)
121123
if err != nil {

coderd/metricscache/cache_test.go

+80-45
Original file line numberDiff line numberDiff line change
@@ -1,140 +1,175 @@
1-
package metricscache
1+
package metricscache_test
22

33
import (
4+
"context"
45
"reflect"
56
"testing"
67
"time"
78

9+
"github.com/google/uuid"
10+
11+
"cdr.dev/slog/sloggers/slogtest"
812
"github.com/coder/coder/coderd/database"
13+
"github.com/coder/coder/coderd/database/databasefake"
14+
"github.com/coder/coder/coderd/metricscache"
15+
"github.com/coder/coder/codersdk"
916
)
1017

1118
func date(year, month, day int) time.Time {
1219
return time.Date(year, time.Month(month), day, 0, 0, 0, 0, time.UTC)
1320
}
1421

15-
func Test_fillEmptyDAUDays(t *testing.T) {
22+
func TestCache(t *testing.T) {
1623
t.Parallel()
1724

25+
var (
26+
zebra = uuid.New()
27+
tiger = uuid.New()
28+
)
29+
1830
type args struct {
19-
rows []database.GetDAUsFromAgentStatsRow
31+
rows []database.InsertAgentStatParams
2032
}
2133
tests := []struct {
2234
name string
2335
args args
24-
want []database.GetDAUsFromAgentStatsRow
36+
want []codersdk.DAUEntry
2537
}{
2638
{"empty", args{}, nil},
2739
{"one hole", args{
28-
rows: []database.GetDAUsFromAgentStatsRow{
40+
rows: []database.InsertAgentStatParams{
2941
{
30-
Date: date(2022, 8, 27),
31-
Daus: 1,
42+
CreatedAt: date(2022, 8, 27),
43+
UserID: zebra,
3244
},
3345
{
34-
Date: date(2022, 8, 30),
35-
Daus: 1,
46+
CreatedAt: date(2022, 8, 30),
47+
UserID: zebra,
3648
},
3749
},
38-
}, []database.GetDAUsFromAgentStatsRow{
50+
}, []codersdk.DAUEntry{
3951
{
4052
Date: date(2022, 8, 27),
41-
Daus: 1,
53+
DAUs: 1,
4254
},
4355
{
4456
Date: date(2022, 8, 28),
45-
Daus: 0,
57+
DAUs: 0,
4658
},
4759
{
4860
Date: date(2022, 8, 29),
49-
Daus: 0,
61+
DAUs: 0,
5062
},
5163
{
5264
Date: date(2022, 8, 30),
53-
Daus: 1,
65+
DAUs: 1,
5466
},
5567
}},
5668
{"no holes", args{
57-
rows: []database.GetDAUsFromAgentStatsRow{
69+
rows: []database.InsertAgentStatParams{
5870
{
59-
Date: date(2022, 01, 01),
60-
Daus: 1,
71+
CreatedAt: date(2022, 8, 27),
72+
UserID: zebra,
6173
},
6274
{
63-
Date: date(2022, 01, 02),
64-
Daus: 1,
75+
CreatedAt: date(2022, 8, 28),
76+
UserID: zebra,
6577
},
6678
{
67-
Date: date(2022, 01, 03),
68-
Daus: 1,
79+
CreatedAt: date(2022, 8, 29),
80+
UserID: zebra,
6981
},
7082
},
71-
}, []database.GetDAUsFromAgentStatsRow{
83+
}, []codersdk.DAUEntry{
7284
{
73-
Date: date(2022, 01, 01),
74-
Daus: 1,
85+
Date: date(2022, 8, 27),
86+
DAUs: 1,
7587
},
7688
{
77-
Date: date(2022, 01, 02),
78-
Daus: 1,
89+
Date: date(2022, 8, 28),
90+
DAUs: 1,
7991
},
8092
{
81-
Date: date(2022, 01, 03),
82-
Daus: 1,
93+
Date: date(2022, 8, 29),
94+
DAUs: 1,
8395
},
8496
}},
8597
{"holes", args{
86-
rows: []database.GetDAUsFromAgentStatsRow{
98+
rows: []database.InsertAgentStatParams{
99+
{
100+
CreatedAt: date(2022, 1, 1),
101+
UserID: zebra,
102+
},
87103
{
88-
Date: date(2022, 1, 1),
89-
Daus: 3,
104+
CreatedAt: date(2022, 1, 1),
105+
UserID: tiger,
90106
},
91107
{
92-
Date: date(2022, 1, 4),
93-
Daus: 1,
108+
CreatedAt: date(2022, 1, 4),
109+
UserID: zebra,
94110
},
95111
{
96-
Date: date(2022, 1, 7),
97-
Daus: 3,
112+
CreatedAt: date(2022, 1, 7),
113+
UserID: zebra,
114+
},
115+
{
116+
CreatedAt: date(2022, 1, 7),
117+
UserID: tiger,
98118
},
99119
},
100-
}, []database.GetDAUsFromAgentStatsRow{
120+
}, []codersdk.DAUEntry{
101121
{
102122
Date: date(2022, 1, 1),
103-
Daus: 3,
123+
DAUs: 2,
104124
},
105125
{
106126
Date: date(2022, 1, 2),
107-
Daus: 0,
127+
DAUs: 0,
108128
},
109129
{
110130
Date: date(2022, 1, 3),
111-
Daus: 0,
131+
DAUs: 0,
112132
},
113133
{
114134
Date: date(2022, 1, 4),
115-
Daus: 1,
135+
DAUs: 1,
116136
},
117137
{
118138
Date: date(2022, 1, 5),
119-
Daus: 0,
139+
DAUs: 0,
120140
},
121141
{
122142
Date: date(2022, 1, 6),
123-
Daus: 0,
143+
DAUs: 0,
124144
},
125145
{
126146
Date: date(2022, 1, 7),
127-
Daus: 3,
147+
DAUs: 2,
128148
},
129149
}},
130150
}
151+
131152
for _, tt := range tests {
132153
tt := tt
133154
t.Run(tt.name, func(t *testing.T) {
134155
t.Parallel()
156+
var (
157+
db = databasefake.New()
158+
cache = metricscache.New(db, slogtest.Make(t, nil))
159+
)
160+
161+
cache.Start(context.Background())
162+
defer cache.Close()
163+
164+
for _, row := range tt.args.rows {
165+
db.InsertAgentStat(context.Background(), row)
166+
}
167+
168+
// Wait for value to refresh..
169+
time.Sleep(time.Second)
135170

136-
if got := fillEmptyDAUDays(tt.args.rows); !reflect.DeepEqual(got, tt.want) {
137-
t.Errorf("fillEmptyDAUDays() = %v, want %v", got, tt.want)
171+
if got := cache.GetDAUs(); !reflect.DeepEqual(got.Entries, tt.want) {
172+
t.Errorf("GetDAUs() = %v, want %v", got, tt.want)
138173
}
139174
})
140175
}

0 commit comments

Comments
 (0)