108 lines
3.0 KiB
Go
108 lines
3.0 KiB
Go
package testing
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"math"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"github.com/grafana/grafana/pkg/models"
|
|
"github.com/grafana/grafana/pkg/services/accesscontrol"
|
|
"github.com/grafana/grafana/pkg/services/sqlstore"
|
|
)
|
|
|
|
const (
|
|
usernamePrefix = "user"
|
|
teamPrefix = "team"
|
|
PermissionsPerRole = 10
|
|
UsersPerTeam = 10
|
|
)
|
|
|
|
func GenerateRoles(b *testing.B, db *sqlstore.SQLStore, ac accesscontrol.Store, rolesPerUser, users int) {
|
|
numberOfTeams := int(math.Ceil(float64(users) / UsersPerTeam))
|
|
globalUserId := 0
|
|
for i := 0; i < numberOfTeams; i++ {
|
|
// Create team
|
|
teamName := fmt.Sprintf("%s%v", teamPrefix, i)
|
|
teamEmail := fmt.Sprintf("%s@test.com", teamName)
|
|
team, err := db.CreateTeam(teamName, teamEmail, 1)
|
|
require.NoError(b, err)
|
|
teamId := team.Id
|
|
|
|
// Create team roles
|
|
for j := 0; j < rolesPerUser; j++ {
|
|
roleName := fmt.Sprintf("role_%s_%v", teamName, j)
|
|
createRoleCmd := accesscontrol.CreateRoleCommand{OrgID: 1, Name: roleName}
|
|
role, err := ac.CreateRole(context.Background(), createRoleCmd)
|
|
require.NoError(b, err)
|
|
|
|
for k := 0; k < PermissionsPerRole; k++ {
|
|
permission := fmt.Sprintf("permission_%v", k)
|
|
scope := fmt.Sprintf("scope_%v", k)
|
|
permCmd := accesscontrol.CreatePermissionCommand{
|
|
RoleID: role.ID,
|
|
Permission: permission,
|
|
Scope: scope,
|
|
}
|
|
|
|
_, err := ac.CreatePermission(context.Background(), permCmd)
|
|
require.NoError(b, err)
|
|
}
|
|
|
|
addTeamRoleCmd := accesscontrol.AddTeamRoleCommand{
|
|
OrgID: 1,
|
|
RoleUID: role.UID,
|
|
TeamID: teamId,
|
|
}
|
|
err = ac.AddTeamRole(&addTeamRoleCmd)
|
|
require.NoError(b, err)
|
|
}
|
|
|
|
// Create team users
|
|
for u := 0; u < UsersPerTeam; u++ {
|
|
userName := fmt.Sprintf("%s%v", usernamePrefix, globalUserId)
|
|
userEmail := fmt.Sprintf("%s@test.com", userName)
|
|
createUserCmd := models.CreateUserCommand{Email: userEmail, Name: userName, Login: userName, OrgId: 1}
|
|
|
|
user, err := db.CreateUser(context.Background(), createUserCmd)
|
|
require.NoError(b, err)
|
|
userId := user.Id
|
|
globalUserId++
|
|
|
|
// Create user roles
|
|
for j := 0; j < rolesPerUser; j++ {
|
|
roleName := fmt.Sprintf("role_%s_%v", userName, j)
|
|
createRoleCmd := accesscontrol.CreateRoleCommand{OrgID: 1, Name: roleName}
|
|
role, err := ac.CreateRole(context.Background(), createRoleCmd)
|
|
require.NoError(b, err)
|
|
|
|
for k := 0; k < PermissionsPerRole; k++ {
|
|
permission := fmt.Sprintf("permission_%v", k)
|
|
scope := fmt.Sprintf("scope_%v", k)
|
|
permCmd := accesscontrol.CreatePermissionCommand{
|
|
RoleID: role.ID,
|
|
Permission: permission,
|
|
Scope: scope,
|
|
}
|
|
|
|
_, err := ac.CreatePermission(context.Background(), permCmd)
|
|
require.NoError(b, err)
|
|
}
|
|
|
|
addUserRoleCmd := accesscontrol.AddUserRoleCommand{
|
|
OrgID: 1,
|
|
RoleUID: role.UID,
|
|
UserID: userId,
|
|
}
|
|
err = ac.AddUserRole(&addUserRoleCmd)
|
|
require.NoError(b, err)
|
|
}
|
|
|
|
err = db.AddTeamMember(userId, 1, teamId, false, 1)
|
|
require.NoError(b, err)
|
|
}
|
|
}
|
|
}
|