Skip to content

Commit 157cbe1

Browse files
committed
Unit test
1 parent 395d64b commit 157cbe1

File tree

4 files changed

+91
-9
lines changed

4 files changed

+91
-9
lines changed

coderd/coderd.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -345,7 +345,6 @@ func New(options *Options) *API {
345345
}
346346

347347
licenseMetrics, err := prometheusmetrics.NewLicenseMetrics(&prometheusmetrics.LicenseMetricsOptions{
348-
Database: options.Database,
349348
Logger: options.Logger,
350349
Registry: options.PrometheusRegistry,
351350
})

coderd/prometheusmetrics/license.go

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,13 @@ import (
77
"time"
88

99
"github.com/prometheus/client_golang/prometheus"
10-
"golang.org/x/xerrors"
1110

1211
"cdr.dev/slog"
1312

14-
"github.com/coder/coder/v2/coderd/database"
1513
"github.com/coder/coder/v2/codersdk"
1614
)
1715

1816
type LicenseMetrics struct {
19-
db database.Store
2017
interval time.Duration
2118
logger slog.Logger
2219
registry *prometheus.Registry
@@ -26,7 +23,6 @@ type LicenseMetrics struct {
2623

2724
type LicenseMetricsOptions struct {
2825
Interval time.Duration
29-
Database database.Store
3026
Logger slog.Logger
3127
Registry *prometheus.Registry
3228
}
@@ -35,15 +31,11 @@ func NewLicenseMetrics(opts *LicenseMetricsOptions) (*LicenseMetrics, error) {
3531
if opts.Interval == 0 {
3632
opts.Interval = 1 * time.Minute
3733
}
38-
if opts.Database == nil {
39-
return nil, xerrors.Errorf("database is required")
40-
}
4134
if opts.Registry == nil {
4235
opts.Registry = prometheus.NewRegistry()
4336
}
4437

4538
return &LicenseMetrics{
46-
db: opts.Database,
4739
interval: opts.Interval,
4840
logger: opts.Logger,
4941
registry: opts.Registry,
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
package prometheusmetrics
2+
3+
import (
4+
"context"
5+
"encoding/json"
6+
"os"
7+
"reflect"
8+
"testing"
9+
"time"
10+
11+
"github.com/aws/smithy-go/ptr"
12+
"github.com/prometheus/client_golang/prometheus"
13+
"github.com/stretchr/testify/assert"
14+
"github.com/stretchr/testify/require"
15+
16+
"cdr.dev/slog"
17+
"cdr.dev/slog/sloggers/slogtest"
18+
"github.com/coder/coder/v2/codersdk"
19+
"github.com/coder/coder/v2/testutil"
20+
)
21+
22+
func TestCollectLicenseMetrics(t *testing.T) {
23+
t.Parallel()
24+
25+
// Given
26+
registry := prometheus.NewRegistry()
27+
sut, err := NewLicenseMetrics(&LicenseMetricsOptions{
28+
Interval: time.Millisecond,
29+
Logger: slogtest.Make(t, nil).Leveled(slog.LevelDebug),
30+
Registry: registry,
31+
})
32+
require.NoError(t, err)
33+
34+
ctx, cancelFunc := context.WithCancel(context.Background())
35+
t.Cleanup(cancelFunc)
36+
37+
const (
38+
actualUsers = 4
39+
userLimit = 7
40+
)
41+
sut.Entitlements.Store(&codersdk.Entitlements{
42+
Features: map[codersdk.FeatureName]codersdk.Feature{
43+
codersdk.FeatureUserLimit: {
44+
Enabled: true,
45+
Actual: ptr.Int64(actualUsers),
46+
Limit: ptr.Int64(userLimit),
47+
},
48+
},
49+
})
50+
51+
// When
52+
closeFunc, err := sut.Collect(ctx)
53+
require.NoError(t, err)
54+
t.Cleanup(closeFunc)
55+
56+
// Then
57+
goldenFile, err := os.ReadFile("testdata/license-metrics.json")
58+
require.NoError(t, err)
59+
golden := map[string]int{}
60+
err = json.Unmarshal(goldenFile, &golden)
61+
require.NoError(t, err)
62+
63+
collected := map[string]int{}
64+
65+
assert.Eventually(t, func() bool {
66+
metrics, err := registry.Gather()
67+
assert.NoError(t, err)
68+
69+
if len(metrics) < 1 {
70+
return false
71+
}
72+
73+
for _, metric := range metrics {
74+
switch metric.GetName() {
75+
case "coderd_license_active_users", "coderd_license_user_limit":
76+
for _, m := range metric.Metric {
77+
collected[m.Label[0].GetValue()+":"+metric.GetName()] = int(m.Gauge.GetValue())
78+
}
79+
default:
80+
require.FailNowf(t, "unexpected metric collected", "metric: %s", metric.GetName())
81+
}
82+
}
83+
return reflect.DeepEqual(golden, collected)
84+
}, testutil.WaitShort, testutil.IntervalFast)
85+
86+
assert.EqualValues(t, golden, collected)
87+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"true:coderd_license_active_users": 4,
3+
"true:coderd_license_user_limit": 7
4+
}

0 commit comments

Comments
 (0)