mirror of
https://github.com/grafana/grafana.git
synced 2025-08-01 11:53:09 +08:00

* Anonymous: Add device limiter * break auth if limit reached * fix typo * refactored const to make it clearer with expiration * anon device limit for config --------- Co-authored-by: Eric Leijonmarck <eric.leijonmarck@gmail.com>
101 lines
2.7 KiB
Go
101 lines
2.7 KiB
Go
package anonstore
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"github.com/grafana/grafana/pkg/infra/db"
|
|
)
|
|
|
|
func TestIntegrationAnonStore_DeleteDevicesOlderThan(t *testing.T) {
|
|
store := db.InitTestDB(t)
|
|
anonDBStore := ProvideAnonDBStore(store, 0)
|
|
const keepFor = time.Hour * 24 * 61
|
|
|
|
anonDevice := &Device{
|
|
DeviceID: "32mdo31deeqwes",
|
|
ClientIP: "10.30.30.2",
|
|
UserAgent: "test",
|
|
UpdatedAt: time.Now().Add(-keepFor).Add(-time.Hour),
|
|
}
|
|
|
|
err := anonDBStore.CreateOrUpdateDevice(context.Background(), anonDevice)
|
|
require.NoError(t, err)
|
|
|
|
anonDevice.DeviceID = "keep"
|
|
anonDevice.UpdatedAt = time.Now().Add(-time.Hour)
|
|
|
|
err = anonDBStore.CreateOrUpdateDevice(context.Background(), anonDevice)
|
|
require.NoError(t, err)
|
|
|
|
from := time.Now().Add(-2 * keepFor)
|
|
to := time.Now()
|
|
|
|
count, err := anonDBStore.CountDevices(context.Background(), from, to)
|
|
require.NoError(t, err)
|
|
require.Equal(t, int64(2), count)
|
|
|
|
err = anonDBStore.DeleteDevicesOlderThan(context.Background(), time.Now().Add(-keepFor))
|
|
require.NoError(t, err)
|
|
|
|
devices, err := anonDBStore.ListDevices(context.Background(), &from, &to)
|
|
require.NoError(t, err)
|
|
require.Equal(t, 1, len(devices))
|
|
assert.Equal(t, "keep", devices[0].DeviceID)
|
|
}
|
|
|
|
func TestIntegrationBeyondDeviceLimit(t *testing.T) {
|
|
store := db.InitTestDB(t)
|
|
anonDBStore := ProvideAnonDBStore(store, 1)
|
|
|
|
anonDevice := &Device{
|
|
DeviceID: "32mdo31deeqwes",
|
|
ClientIP: "10.30.30.2",
|
|
UserAgent: "test",
|
|
UpdatedAt: time.Now().Add(-time.Hour),
|
|
}
|
|
|
|
err := anonDBStore.CreateOrUpdateDevice(context.Background(), anonDevice)
|
|
require.NoError(t, err)
|
|
|
|
anonDevice.DeviceID = "keep"
|
|
anonDevice.UpdatedAt = time.Now().Add(-time.Hour)
|
|
|
|
err = anonDBStore.CreateOrUpdateDevice(context.Background(), anonDevice)
|
|
require.ErrorIs(t, err, ErrDeviceLimitReached)
|
|
}
|
|
|
|
func TestIntegrationAnonStore_DeleteDevice(t *testing.T) {
|
|
store := db.InitTestDB(t)
|
|
anonDBStore := ProvideAnonDBStore(store, 0)
|
|
const keepFor = time.Hour * 24 * 61
|
|
|
|
anonDevice := &Device{
|
|
DeviceID: "32mdo31deeqwes",
|
|
ClientIP: "10.30.30.2",
|
|
UserAgent: "test",
|
|
UpdatedAt: time.Now().Add(-keepFor).Add(-time.Hour),
|
|
}
|
|
|
|
err := anonDBStore.CreateOrUpdateDevice(context.Background(), anonDevice)
|
|
require.NoError(t, err)
|
|
|
|
from := time.Now().Add(-2 * keepFor)
|
|
to := time.Now()
|
|
|
|
count, err := anonDBStore.CountDevices(context.Background(), from, to)
|
|
require.NoError(t, err)
|
|
require.Equal(t, int64(1), count)
|
|
|
|
err = anonDBStore.DeleteDevice(context.Background(), "32mdo31deeqwes")
|
|
require.NoError(t, err)
|
|
|
|
devices, err := anonDBStore.ListDevices(context.Background(), &from, &to)
|
|
require.NoError(t, err)
|
|
require.Equal(t, 0, len(devices))
|
|
}
|