2018-05-25 20:33:37 +08:00
|
|
|
package sqlstore
|
|
|
|
|
|
|
|
|
|
import (
|
2018-06-11 05:17:18 +08:00
|
|
|
"context"
|
2019-12-02 16:14:20 +08:00
|
|
|
"fmt"
|
2018-05-25 20:33:37 +08:00
|
|
|
"testing"
|
|
|
|
|
|
2019-04-24 19:18:16 +08:00
|
|
|
"github.com/grafana/grafana/pkg/models"
|
2022-06-28 20:32:25 +08:00
|
|
|
"github.com/grafana/grafana/pkg/services/user"
|
2019-12-02 16:14:20 +08:00
|
|
|
"github.com/stretchr/testify/assert"
|
2020-03-05 19:34:44 +08:00
|
|
|
"github.com/stretchr/testify/require"
|
2018-05-25 20:33:37 +08:00
|
|
|
)
|
|
|
|
|
|
2022-05-24 17:04:03 +08:00
|
|
|
func TestIntegrationStatsDataAccess(t *testing.T) {
|
2022-06-10 23:46:21 +08:00
|
|
|
if testing.Short() {
|
|
|
|
|
t.Skip("skipping integration test")
|
|
|
|
|
}
|
2021-03-17 23:06:10 +08:00
|
|
|
sqlStore := InitTestDB(t)
|
|
|
|
|
populateDB(t, sqlStore)
|
2020-08-24 17:23:14 +08:00
|
|
|
|
|
|
|
|
t.Run("Get system stats should not results in error", func(t *testing.T) {
|
|
|
|
|
query := models.GetSystemStatsQuery{}
|
2022-02-11 21:04:15 +08:00
|
|
|
err := sqlStore.GetSystemStats(context.Background(), &query)
|
2020-08-24 17:23:14 +08:00
|
|
|
require.NoError(t, err)
|
|
|
|
|
assert.Equal(t, int64(3), query.Result.Users)
|
2021-09-14 20:57:12 +08:00
|
|
|
assert.Equal(t, int64(0), query.Result.Editors)
|
|
|
|
|
assert.Equal(t, int64(0), query.Result.Viewers)
|
|
|
|
|
assert.Equal(t, int64(3), query.Result.Admins)
|
2021-05-24 12:11:01 +08:00
|
|
|
assert.Equal(t, int64(0), query.Result.LibraryPanels)
|
|
|
|
|
assert.Equal(t, int64(0), query.Result.LibraryVariables)
|
2021-12-23 00:37:45 +08:00
|
|
|
assert.Equal(t, int64(1), query.Result.APIKeys)
|
2020-08-24 17:23:14 +08:00
|
|
|
})
|
|
|
|
|
|
|
|
|
|
t.Run("Get system user count stats should not results in error", func(t *testing.T) {
|
|
|
|
|
query := models.GetSystemUserCountStatsQuery{}
|
2022-02-17 23:59:09 +08:00
|
|
|
err := sqlStore.GetSystemUserCountStats(context.Background(), &query)
|
2020-08-24 17:23:14 +08:00
|
|
|
assert.NoError(t, err)
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
t.Run("Get datasource stats should not results in error", func(t *testing.T) {
|
|
|
|
|
query := models.GetDataSourceStatsQuery{}
|
2022-02-11 21:04:15 +08:00
|
|
|
err := sqlStore.GetDataSourceStats(context.Background(), &query)
|
2020-08-24 17:23:14 +08:00
|
|
|
assert.NoError(t, err)
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
t.Run("Get datasource access stats should not results in error", func(t *testing.T) {
|
|
|
|
|
query := models.GetDataSourceAccessStatsQuery{}
|
2022-02-11 21:04:15 +08:00
|
|
|
err := sqlStore.GetDataSourceAccessStats(context.Background(), &query)
|
2020-08-24 17:23:14 +08:00
|
|
|
assert.NoError(t, err)
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
t.Run("Get alert notifier stats should not results in error", func(t *testing.T) {
|
|
|
|
|
query := models.GetAlertNotifierUsageStatsQuery{}
|
2022-02-11 21:04:15 +08:00
|
|
|
err := sqlStore.GetAlertNotifiersUsageStats(context.Background(), &query)
|
2020-08-24 17:23:14 +08:00
|
|
|
assert.NoError(t, err)
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
t.Run("Get admin stats should not result in error", func(t *testing.T) {
|
|
|
|
|
query := models.GetAdminStatsQuery{}
|
2022-02-05 00:53:58 +08:00
|
|
|
err := sqlStore.GetAdminStats(context.Background(), &query)
|
2020-08-24 17:23:14 +08:00
|
|
|
assert.NoError(t, err)
|
|
|
|
|
})
|
2018-05-25 20:33:37 +08:00
|
|
|
}
|
2019-12-02 16:14:20 +08:00
|
|
|
|
2021-03-17 23:06:10 +08:00
|
|
|
func populateDB(t *testing.T, sqlStore *SQLStore) {
|
|
|
|
|
t.Helper()
|
|
|
|
|
|
2022-06-28 20:32:25 +08:00
|
|
|
users := make([]user.User, 3)
|
2019-12-02 16:14:20 +08:00
|
|
|
for i := range users {
|
2022-06-28 20:32:25 +08:00
|
|
|
cmd := user.CreateUserCommand{
|
2019-12-02 16:14:20 +08:00
|
|
|
Email: fmt.Sprintf("usertest%v@test.com", i),
|
|
|
|
|
Name: fmt.Sprintf("user name %v", i),
|
|
|
|
|
Login: fmt.Sprintf("user_test_%v_login", i),
|
|
|
|
|
OrgName: fmt.Sprintf("Org #%v", i),
|
|
|
|
|
}
|
2021-03-17 23:06:10 +08:00
|
|
|
user, err := sqlStore.CreateUser(context.Background(), cmd)
|
2020-03-05 19:34:44 +08:00
|
|
|
require.NoError(t, err)
|
2021-03-17 23:06:10 +08:00
|
|
|
users[i] = *user
|
2019-12-02 16:14:20 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// get 1st user's organisation
|
2022-06-28 20:32:25 +08:00
|
|
|
getOrgByIdQuery := &models.GetOrgByIdQuery{Id: users[0].OrgID}
|
2022-02-23 18:12:37 +08:00
|
|
|
err := sqlStore.GetOrgById(context.Background(), getOrgByIdQuery)
|
2020-03-05 19:34:44 +08:00
|
|
|
require.NoError(t, err)
|
2019-12-02 16:14:20 +08:00
|
|
|
org := getOrgByIdQuery.Result
|
|
|
|
|
|
|
|
|
|
// add 2nd user as editor
|
|
|
|
|
cmd := &models.AddOrgUserCommand{
|
|
|
|
|
OrgId: org.Id,
|
2022-06-28 20:32:25 +08:00
|
|
|
UserId: users[1].ID,
|
2019-12-02 16:14:20 +08:00
|
|
|
Role: models.ROLE_EDITOR,
|
|
|
|
|
}
|
2021-09-27 22:43:16 +08:00
|
|
|
err = sqlStore.AddOrgUser(context.Background(), cmd)
|
2020-03-05 19:34:44 +08:00
|
|
|
require.NoError(t, err)
|
2019-12-02 16:14:20 +08:00
|
|
|
|
|
|
|
|
// add 3rd user as viewer
|
|
|
|
|
cmd = &models.AddOrgUserCommand{
|
|
|
|
|
OrgId: org.Id,
|
2022-06-28 20:32:25 +08:00
|
|
|
UserId: users[2].ID,
|
2019-12-02 16:14:20 +08:00
|
|
|
Role: models.ROLE_VIEWER,
|
|
|
|
|
}
|
2021-09-27 22:43:16 +08:00
|
|
|
err = sqlStore.AddOrgUser(context.Background(), cmd)
|
2020-03-05 19:34:44 +08:00
|
|
|
require.NoError(t, err)
|
2019-12-02 16:14:20 +08:00
|
|
|
|
|
|
|
|
// get 2nd user's organisation
|
2022-06-28 20:32:25 +08:00
|
|
|
getOrgByIdQuery = &models.GetOrgByIdQuery{Id: users[1].OrgID}
|
2022-02-23 18:12:37 +08:00
|
|
|
err = sqlStore.GetOrgById(context.Background(), getOrgByIdQuery)
|
2020-03-05 19:34:44 +08:00
|
|
|
require.NoError(t, err)
|
2019-12-02 16:14:20 +08:00
|
|
|
org = getOrgByIdQuery.Result
|
|
|
|
|
|
|
|
|
|
// add 1st user as admin
|
|
|
|
|
cmd = &models.AddOrgUserCommand{
|
|
|
|
|
OrgId: org.Id,
|
2022-06-28 20:32:25 +08:00
|
|
|
UserId: users[0].ID,
|
2019-12-02 16:14:20 +08:00
|
|
|
Role: models.ROLE_ADMIN,
|
|
|
|
|
}
|
2021-09-27 22:43:16 +08:00
|
|
|
err = sqlStore.AddOrgUser(context.Background(), cmd)
|
2020-03-05 19:34:44 +08:00
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
|
|
// update 1st user last seen at
|
|
|
|
|
updateUserLastSeenAtCmd := &models.UpdateUserLastSeenAtCommand{
|
2022-06-28 20:32:25 +08:00
|
|
|
UserId: users[0].ID,
|
2020-03-05 19:34:44 +08:00
|
|
|
}
|
2022-01-11 00:28:41 +08:00
|
|
|
err = sqlStore.UpdateUserLastSeenAt(context.Background(), updateUserLastSeenAtCmd)
|
2020-03-05 19:34:44 +08:00
|
|
|
require.NoError(t, err)
|
2020-08-24 17:23:14 +08:00
|
|
|
|
|
|
|
|
// force renewal of user stats
|
2022-02-17 23:59:09 +08:00
|
|
|
err = sqlStore.updateUserRoleCountsIfNecessary(context.Background(), true)
|
2020-08-24 17:23:14 +08:00
|
|
|
require.NoError(t, err)
|
2021-12-23 00:37:45 +08:00
|
|
|
|
|
|
|
|
// add 1st api key
|
|
|
|
|
addAPIKeyCmd := &models.AddApiKeyCommand{OrgId: org.Id, Name: "Test key 1", Key: "secret-key", Role: models.ROLE_VIEWER}
|
|
|
|
|
err = sqlStore.AddAPIKey(context.Background(), addAPIKeyCmd)
|
|
|
|
|
require.NoError(t, err)
|
2019-12-02 16:14:20 +08:00
|
|
|
}
|