(t *testing.T)
| 1432 | } |
| 1433 | |
| 1434 | func TestTelemetry_BoundaryUsageSummary(t *testing.T) { |
| 1435 | t.Parallel() |
| 1436 | |
| 1437 | t.Run("IncludedInSnapshot", func(t *testing.T) { |
| 1438 | t.Parallel() |
| 1439 | |
| 1440 | db, _ := dbtestutil.NewDB(t) |
| 1441 | ctx := testutil.Context(t, testutil.WaitMedium) |
| 1442 | |
| 1443 | tracker := boundaryusage.NewTracker() |
| 1444 | workspace1, workspace2 := uuid.New(), uuid.New() |
| 1445 | user1, user2 := uuid.New(), uuid.New() |
| 1446 | replicaID := uuid.New() |
| 1447 | |
| 1448 | tracker.Track(workspace1, user1, 10, 2) |
| 1449 | tracker.Track(workspace2, user1, 5, 1) |
| 1450 | tracker.Track(workspace2, user2, 3, 0) |
| 1451 | |
| 1452 | // Flush the tracker to the database. |
| 1453 | err := tracker.FlushToDB(ctx, db, replicaID) |
| 1454 | require.NoError(t, err) |
| 1455 | |
| 1456 | // Collect a snapshot and verify boundary usage is included. |
| 1457 | clock := quartz.NewMock(t) |
| 1458 | clock.Set(dbtime.Now()) |
| 1459 | |
| 1460 | _, snapshot := collectSnapshot(ctx, t, db, func(opts telemetry.Options) telemetry.Options { |
| 1461 | opts.Clock = clock |
| 1462 | return opts |
| 1463 | }) |
| 1464 | |
| 1465 | require.NotNil(t, snapshot.BoundaryUsageSummary) |
| 1466 | require.Equal(t, int64(2), snapshot.BoundaryUsageSummary.UniqueWorkspaces) |
| 1467 | require.Equal(t, int64(2), snapshot.BoundaryUsageSummary.UniqueUsers) |
| 1468 | require.Equal(t, int64(10+5+3), snapshot.BoundaryUsageSummary.AllowedRequests) |
| 1469 | require.Equal(t, int64(2+1+0), snapshot.BoundaryUsageSummary.DeniedRequests) |
| 1470 | require.Equal(t, clock.Now().Add(-telemetry.DefaultSnapshotFrequency), snapshot.BoundaryUsageSummary.PeriodStart) |
| 1471 | require.Equal(t, int64(telemetry.DefaultSnapshotFrequency/time.Millisecond), snapshot.BoundaryUsageSummary.PeriodDurationMilliseconds) |
| 1472 | }) |
| 1473 | |
| 1474 | t.Run("ResetAfterCollection", func(t *testing.T) { |
| 1475 | t.Parallel() |
| 1476 | |
| 1477 | db, _ := dbtestutil.NewDB(t) |
| 1478 | ctx := testutil.Context(t, testutil.WaitMedium) |
| 1479 | |
| 1480 | tracker := boundaryusage.NewTracker() |
| 1481 | replicaID := uuid.New() |
| 1482 | |
| 1483 | tracker.Track(uuid.New(), uuid.New(), 5, 1) |
| 1484 | err := tracker.FlushToDB(ctx, db, replicaID) |
| 1485 | require.NoError(t, err) |
| 1486 | |
| 1487 | clock := quartz.NewMock(t) |
| 1488 | clock.Set(dbtime.Now()) |
| 1489 | |
| 1490 | // First snapshot should have the data. |
| 1491 | _, snapshot1 := collectSnapshot(ctx, t, db, func(opts telemetry.Options) telemetry.Options { |
nothing calls this directly
no test coverage detected