MCPcopy Index your code
hub / github.com/coder/coder / TestTracker_TelemetryCycle

Function TestTracker_TelemetryCycle

coderd/boundaryusage/tracker_test.go:407–457  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

405}
406
407func TestTracker_TelemetryCycle(t *testing.T) {
408 t.Parallel()
409
410 db, _ := dbtestutil.NewDB(t)
411 ctx := testutil.Context(t, testutil.WaitShort)
412 boundaryCtx := dbauthz.AsBoundaryUsageTracker(ctx)
413
414 // Simulate 3 replicas.
415 tracker1 := boundaryusage.NewTracker()
416 tracker2 := boundaryusage.NewTracker()
417 tracker3 := boundaryusage.NewTracker()
418
419 replica1 := uuid.New()
420 replica2 := uuid.New()
421 replica3 := uuid.New()
422
423 // Each tracker records different workspaces/users.
424 tracker1.Track(uuid.New(), uuid.New(), 10, 1)
425 tracker1.Track(uuid.New(), uuid.New(), 15, 2)
426
427 tracker2.Track(uuid.New(), uuid.New(), 20, 3)
428 tracker2.Track(uuid.New(), uuid.New(), 25, 4)
429 tracker2.Track(uuid.New(), uuid.New(), 30, 5)
430
431 tracker3.Track(uuid.New(), uuid.New(), 5, 0)
432
433 // All replicas flush to database.
434 require.NoError(t, tracker1.FlushToDB(ctx, db, replica1))
435 require.NoError(t, tracker2.FlushToDB(ctx, db, replica2))
436 require.NoError(t, tracker3.FlushToDB(ctx, db, replica3))
437
438 // Telemetry aggregates and resets (simulating telemetry report sent).
439 summary, err := db.GetAndResetBoundaryUsageSummary(boundaryCtx, 60000)
440 require.NoError(t, err)
441
442 // Verify aggregation.
443 require.Equal(t, int64(6), summary.UniqueWorkspaces) // 2 + 3 + 1
444 require.Equal(t, int64(6), summary.UniqueUsers) // 2 + 3 + 1
445 require.Equal(t, int64(105), summary.AllowedRequests) // 25 + 75 + 5
446 require.Equal(t, int64(15), summary.DeniedRequests) // 3 + 12 + 0
447
448 // Next flush from trackers should detect new period.
449 tracker1.Track(uuid.New(), uuid.New(), 1, 0)
450 require.NoError(t, tracker1.FlushToDB(ctx, db, replica1))
451
452 // Verify trackers reset their in-memory state.
453 summary, err = db.GetAndResetBoundaryUsageSummary(boundaryCtx, 60000)
454 require.NoError(t, err)
455 require.Equal(t, int64(1), summary.UniqueWorkspaces)
456 require.Equal(t, int64(1), summary.AllowedRequests)
457}
458
459func TestTracker_FlushToDB_NoStaleDataAfterReset(t *testing.T) {
460 t.Parallel()

Callers

nothing calls this directly

Calls 9

TrackMethod · 0.95
FlushToDBMethod · 0.95
NewDBFunction · 0.92
ContextFunction · 0.92
AsBoundaryUsageTrackerFunction · 0.92
NewTrackerFunction · 0.92
NewMethod · 0.65
EqualMethod · 0.45

Tested by

no test coverage detected