2021-11-11 15:10:24 +00:00
|
|
|
package tests
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"context"
|
|
|
|
|
"testing"
|
|
|
|
|
|
2022-10-19 09:02:15 -04:00
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
|
|
|
|
|
|
"github.com/grafana/grafana/pkg/infra/db"
|
2022-08-04 14:19:09 +02:00
|
|
|
"github.com/grafana/grafana/pkg/services/apikey"
|
2022-08-03 14:13:05 +02:00
|
|
|
"github.com/grafana/grafana/pkg/services/apikey/apikeyimpl"
|
2022-08-10 11:56:48 +02:00
|
|
|
"github.com/grafana/grafana/pkg/services/org"
|
2022-12-07 17:03:22 +01:00
|
|
|
"github.com/grafana/grafana/pkg/services/org/orgimpl"
|
|
|
|
|
"github.com/grafana/grafana/pkg/services/quota/quotaimpl"
|
2022-11-14 21:08:10 +02:00
|
|
|
"github.com/grafana/grafana/pkg/services/quota/quotatest"
|
2023-02-06 17:50:03 +01:00
|
|
|
"github.com/grafana/grafana/pkg/services/supportbundles/supportbundlestest"
|
2022-06-28 14:32:25 +02:00
|
|
|
"github.com/grafana/grafana/pkg/services/user"
|
2022-12-07 17:03:22 +01:00
|
|
|
"github.com/grafana/grafana/pkg/services/user/userimpl"
|
2024-04-04 15:04:47 +02:00
|
|
|
"github.com/grafana/grafana/pkg/setting"
|
2021-11-11 15:10:24 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
type TestUser struct {
|
2022-02-17 12:19:58 +00:00
|
|
|
Name string
|
|
|
|
|
Role string
|
2021-11-11 15:10:24 +00:00
|
|
|
Login string
|
|
|
|
|
IsServiceAccount bool
|
|
|
|
|
}
|
|
|
|
|
|
2022-06-15 15:59:40 +03:00
|
|
|
type TestApiKey struct {
|
2022-09-29 15:11:53 +04:00
|
|
|
Name string
|
|
|
|
|
Role org.RoleType
|
|
|
|
|
OrgId int64
|
|
|
|
|
Key string
|
|
|
|
|
IsExpired bool
|
|
|
|
|
ServiceAccountID *int64
|
2022-06-15 15:59:40 +03:00
|
|
|
}
|
|
|
|
|
|
2024-04-04 15:04:47 +02:00
|
|
|
func SetupUserServiceAccount(t *testing.T, db db.DB, cfg *setting.Cfg, testUser TestUser) *user.User {
|
2022-08-10 11:56:48 +02:00
|
|
|
role := string(org.RoleViewer)
|
2022-02-17 12:19:58 +00:00
|
|
|
if testUser.Role != "" {
|
|
|
|
|
role = testUser.Role
|
|
|
|
|
}
|
|
|
|
|
|
2024-04-04 15:04:47 +02:00
|
|
|
quotaService := quotaimpl.ProvideService(db, cfg)
|
|
|
|
|
orgService, err := orgimpl.ProvideService(db, cfg, quotaService)
|
2022-12-07 17:03:22 +01:00
|
|
|
require.NoError(t, err)
|
2024-04-04 15:04:47 +02:00
|
|
|
usrSvc, err := userimpl.ProvideService(db, orgService, cfg, nil, nil, quotaService, supportbundlestest.NewFakeBundleService())
|
2022-12-07 17:03:22 +01:00
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
2023-03-03 18:01:23 +02:00
|
|
|
org, err := orgService.CreateWithMember(context.Background(), &org.CreateOrgCommand{
|
|
|
|
|
Name: "test org",
|
|
|
|
|
})
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
|
|
u1, err := usrSvc.Create(context.Background(), &user.CreateUserCommand{
|
2021-11-11 15:10:24 +00:00
|
|
|
Login: testUser.Login,
|
|
|
|
|
IsServiceAccount: testUser.IsServiceAccount,
|
2022-02-17 12:19:58 +00:00
|
|
|
DefaultOrgRole: role,
|
|
|
|
|
Name: testUser.Name,
|
2023-03-03 18:01:23 +02:00
|
|
|
OrgID: org.ID,
|
2021-11-11 15:10:24 +00:00
|
|
|
})
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
return u1
|
|
|
|
|
}
|
|
|
|
|
|
2024-04-04 15:04:47 +02:00
|
|
|
func SetupApiKey(t *testing.T, store db.DB, cfg *setting.Cfg, testKey TestApiKey) *apikey.APIKey {
|
2022-08-10 11:56:48 +02:00
|
|
|
role := org.RoleViewer
|
2022-06-15 15:59:40 +03:00
|
|
|
if testKey.Role != "" {
|
|
|
|
|
role = testKey.Role
|
|
|
|
|
}
|
|
|
|
|
|
2022-08-04 14:19:09 +02:00
|
|
|
addKeyCmd := &apikey.AddCommand{
|
2022-09-29 15:11:53 +04:00
|
|
|
Name: testKey.Name,
|
|
|
|
|
Role: role,
|
2023-02-03 17:23:09 +01:00
|
|
|
OrgID: testKey.OrgId,
|
2022-09-29 15:11:53 +04:00
|
|
|
ServiceAccountID: testKey.ServiceAccountID,
|
2022-06-15 15:59:40 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if testKey.Key != "" {
|
|
|
|
|
addKeyCmd.Key = testKey.Key
|
|
|
|
|
} else {
|
|
|
|
|
addKeyCmd.Key = "secret"
|
|
|
|
|
}
|
2022-08-03 14:13:05 +02:00
|
|
|
|
2022-11-14 21:08:10 +02:00
|
|
|
quotaService := quotatest.New(false, nil)
|
2024-04-04 15:04:47 +02:00
|
|
|
apiKeyService, err := apikeyimpl.ProvideService(store, cfg, quotaService)
|
2022-11-14 21:08:10 +02:00
|
|
|
require.NoError(t, err)
|
2023-03-21 13:26:33 +01:00
|
|
|
key, err := apiKeyService.AddAPIKey(context.Background(), addKeyCmd)
|
2022-06-15 15:59:40 +03:00
|
|
|
require.NoError(t, err)
|
2022-06-16 17:01:50 +03:00
|
|
|
|
|
|
|
|
if testKey.IsExpired {
|
2024-04-04 15:04:47 +02:00
|
|
|
err := store.WithTransactionalDbSession(context.Background(), func(sess *db.Session) error {
|
2022-06-16 17:01:50 +03:00
|
|
|
// Force setting expires to time before now to make key expired
|
|
|
|
|
var expires int64 = 1
|
2023-03-21 13:26:33 +01:00
|
|
|
expiringKey := apikey.APIKey{Expires: &expires}
|
|
|
|
|
rowsAffected, err := sess.ID(key.ID).Update(&expiringKey)
|
2022-06-16 17:01:50 +03:00
|
|
|
require.Equal(t, int64(1), rowsAffected)
|
|
|
|
|
return err
|
|
|
|
|
})
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
}
|
|
|
|
|
|
2023-03-21 13:26:33 +01:00
|
|
|
return key
|
2022-06-15 15:59:40 +03:00
|
|
|
}
|
2023-10-24 15:54:14 +02:00
|
|
|
|
|
|
|
|
// SetupUsersServiceAccounts creates in "test org" all users or service accounts passed in parameter
|
|
|
|
|
// To achieve this, it sets the AutoAssignOrg and AutoAssignOrgId settings.
|
2024-04-04 15:04:47 +02:00
|
|
|
func SetupUsersServiceAccounts(t *testing.T, sqlStore db.DB, cfg *setting.Cfg, testUsers []TestUser) (orgID int64) {
|
2023-10-24 15:54:14 +02:00
|
|
|
role := string(org.RoleNone)
|
|
|
|
|
|
2024-04-04 15:04:47 +02:00
|
|
|
quotaService := quotaimpl.ProvideService(sqlStore, cfg)
|
|
|
|
|
orgService, err := orgimpl.ProvideService(sqlStore, cfg, quotaService)
|
2023-10-24 15:54:14 +02:00
|
|
|
require.NoError(t, err)
|
2024-04-04 15:04:47 +02:00
|
|
|
usrSvc, err := userimpl.ProvideService(sqlStore, orgService, cfg, nil, nil, quotaService, supportbundlestest.NewFakeBundleService())
|
2023-10-24 15:54:14 +02:00
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
|
|
org, err := orgService.CreateWithMember(context.Background(), &org.CreateOrgCommand{
|
|
|
|
|
Name: "test org",
|
|
|
|
|
})
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
2024-04-04 15:04:47 +02:00
|
|
|
cfg.AutoAssignOrg = true
|
|
|
|
|
cfg.AutoAssignOrgId = int(org.ID)
|
2023-10-24 15:54:14 +02:00
|
|
|
|
|
|
|
|
for i := range testUsers {
|
|
|
|
|
_, err := usrSvc.Create(context.Background(), &user.CreateUserCommand{
|
|
|
|
|
Login: testUsers[i].Login,
|
|
|
|
|
IsServiceAccount: testUsers[i].IsServiceAccount,
|
|
|
|
|
DefaultOrgRole: role,
|
|
|
|
|
Name: testUsers[i].Name,
|
|
|
|
|
OrgID: org.ID,
|
|
|
|
|
})
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
}
|
|
|
|
|
return org.ID
|
|
|
|
|
}
|