mirror of https://github.com/grafana/grafana.git
				
				
				
			
		
			
				
	
	
		
			132 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			132 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Go
		
	
	
	
| package sqlstore
 | |
| 
 | |
| import (
 | |
| 	"context"
 | |
| 	"fmt"
 | |
| 	"testing"
 | |
| 
 | |
| 	"github.com/grafana/grafana/pkg/models"
 | |
| 	"github.com/grafana/grafana/pkg/services/org"
 | |
| 	"github.com/grafana/grafana/pkg/services/user"
 | |
| 	"github.com/stretchr/testify/assert"
 | |
| 	"github.com/stretchr/testify/require"
 | |
| )
 | |
| 
 | |
| func TestIntegrationStatsDataAccess(t *testing.T) {
 | |
| 	if testing.Short() {
 | |
| 		t.Skip("skipping integration test")
 | |
| 	}
 | |
| 	sqlStore := InitTestDB(t)
 | |
| 	populateDB(t, sqlStore)
 | |
| 
 | |
| 	t.Run("Get system stats should not results in error", func(t *testing.T) {
 | |
| 		query := models.GetSystemStatsQuery{}
 | |
| 		err := sqlStore.GetSystemStats(context.Background(), &query)
 | |
| 		require.NoError(t, err)
 | |
| 		assert.Equal(t, int64(3), query.Result.Users)
 | |
| 		assert.Equal(t, int64(0), query.Result.Editors)
 | |
| 		assert.Equal(t, int64(0), query.Result.Viewers)
 | |
| 		assert.Equal(t, int64(3), query.Result.Admins)
 | |
| 		assert.Equal(t, int64(0), query.Result.LibraryPanels)
 | |
| 		assert.Equal(t, int64(0), query.Result.LibraryVariables)
 | |
| 		assert.Equal(t, int64(0), query.Result.APIKeys)
 | |
| 	})
 | |
| 
 | |
| 	t.Run("Get system user count stats should not results in error", func(t *testing.T) {
 | |
| 		query := models.GetSystemUserCountStatsQuery{}
 | |
| 		err := sqlStore.GetSystemUserCountStats(context.Background(), &query)
 | |
| 		assert.NoError(t, err)
 | |
| 	})
 | |
| 
 | |
| 	t.Run("Get datasource stats should not results in error", func(t *testing.T) {
 | |
| 		query := models.GetDataSourceStatsQuery{}
 | |
| 		err := sqlStore.GetDataSourceStats(context.Background(), &query)
 | |
| 		assert.NoError(t, err)
 | |
| 	})
 | |
| 
 | |
| 	t.Run("Get datasource access stats should not results in error", func(t *testing.T) {
 | |
| 		query := models.GetDataSourceAccessStatsQuery{}
 | |
| 		err := sqlStore.GetDataSourceAccessStats(context.Background(), &query)
 | |
| 		assert.NoError(t, err)
 | |
| 	})
 | |
| 
 | |
| 	t.Run("Get alert notifier stats should not results in error", func(t *testing.T) {
 | |
| 		query := models.GetAlertNotifierUsageStatsQuery{}
 | |
| 		err := sqlStore.GetAlertNotifiersUsageStats(context.Background(), &query)
 | |
| 		assert.NoError(t, err)
 | |
| 	})
 | |
| 
 | |
| 	t.Run("Get admin stats should not result in error", func(t *testing.T) {
 | |
| 		query := models.GetAdminStatsQuery{}
 | |
| 		err := sqlStore.GetAdminStats(context.Background(), &query)
 | |
| 		assert.NoError(t, err)
 | |
| 	})
 | |
| }
 | |
| 
 | |
| func populateDB(t *testing.T, sqlStore *SQLStore) {
 | |
| 	t.Helper()
 | |
| 
 | |
| 	users := make([]user.User, 3)
 | |
| 	for i := range users {
 | |
| 		cmd := user.CreateUserCommand{
 | |
| 			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),
 | |
| 		}
 | |
| 		user, err := sqlStore.CreateUser(context.Background(), cmd)
 | |
| 		require.NoError(t, err)
 | |
| 		users[i] = *user
 | |
| 	}
 | |
| 
 | |
| 	// get 1st user's organisation
 | |
| 	getOrgByIdQuery := &models.GetOrgByIdQuery{Id: users[0].OrgID}
 | |
| 	err := sqlStore.GetOrgById(context.Background(), getOrgByIdQuery)
 | |
| 	require.NoError(t, err)
 | |
| 	orga := getOrgByIdQuery.Result
 | |
| 
 | |
| 	// add 2nd user as editor
 | |
| 	cmd := &models.AddOrgUserCommand{
 | |
| 		OrgId:  orga.Id,
 | |
| 		UserId: users[1].ID,
 | |
| 		Role:   org.RoleEditor,
 | |
| 	}
 | |
| 	err = sqlStore.AddOrgUser(context.Background(), cmd)
 | |
| 	require.NoError(t, err)
 | |
| 
 | |
| 	// add 3rd user as viewer
 | |
| 	cmd = &models.AddOrgUserCommand{
 | |
| 		OrgId:  orga.Id,
 | |
| 		UserId: users[2].ID,
 | |
| 		Role:   org.RoleViewer,
 | |
| 	}
 | |
| 	err = sqlStore.AddOrgUser(context.Background(), cmd)
 | |
| 	require.NoError(t, err)
 | |
| 
 | |
| 	// get 2nd user's organisation
 | |
| 	getOrgByIdQuery = &models.GetOrgByIdQuery{Id: users[1].OrgID}
 | |
| 	err = sqlStore.GetOrgById(context.Background(), getOrgByIdQuery)
 | |
| 	require.NoError(t, err)
 | |
| 	orga = getOrgByIdQuery.Result
 | |
| 
 | |
| 	// add 1st user as admin
 | |
| 	cmd = &models.AddOrgUserCommand{
 | |
| 		OrgId:  orga.Id,
 | |
| 		UserId: users[0].ID,
 | |
| 		Role:   org.RoleAdmin,
 | |
| 	}
 | |
| 	err = sqlStore.AddOrgUser(context.Background(), cmd)
 | |
| 	require.NoError(t, err)
 | |
| 
 | |
| 	// update 1st user last seen at
 | |
| 	updateUserLastSeenAtCmd := &models.UpdateUserLastSeenAtCommand{
 | |
| 		UserId: users[0].ID,
 | |
| 	}
 | |
| 	err = sqlStore.UpdateUserLastSeenAt(context.Background(), updateUserLastSeenAtCmd)
 | |
| 	require.NoError(t, err)
 | |
| 
 | |
| 	// force renewal of user stats
 | |
| 	err = sqlStore.updateUserRoleCountsIfNecessary(context.Background(), true)
 | |
| 	require.NoError(t, err)
 | |
| }
 |