mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
IAM: Add test for AddDataSource managed permissions (#94113)
Add test for AddDataSource managed permissions and fix control flow issues
This commit is contained in:
@@ -255,7 +255,7 @@ func (s *Service) AddDataSource(ctx context.Context, cmd *datasources.AddDataSou
|
||||
}
|
||||
|
||||
var dataSource *datasources.DataSource
|
||||
return dataSource, s.db.InTransaction(ctx, func(ctx context.Context) error {
|
||||
err = s.db.InTransaction(ctx, func(ctx context.Context) error {
|
||||
var err error
|
||||
|
||||
cmd.EncryptedSecureJsonData = make(map[string][]byte)
|
||||
@@ -293,12 +293,18 @@ func (s *Service) AddDataSource(ctx context.Context, cmd *datasources.AddDataSou
|
||||
if cmd.UserID != 0 {
|
||||
permissions = append(permissions, accesscontrol.SetResourcePermissionCommand{UserID: cmd.UserID, Permission: "Admin"})
|
||||
}
|
||||
_, err = s.permissionsService.SetPermissions(ctx, cmd.OrgID, dataSource.UID, permissions...)
|
||||
if _, err = s.permissionsService.SetPermissions(ctx, cmd.OrgID, dataSource.UID, permissions...); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return dataSource, nil
|
||||
}
|
||||
|
||||
// This will valid validate the instance settings return a version that is safe to be saved
|
||||
|
||||
@@ -3,6 +3,7 @@ package service
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
"net/http"
|
||||
@@ -104,6 +105,27 @@ func TestService_AddDataSource(t *testing.T) {
|
||||
require.EqualError(t, err, "[datasource.urlInvalid] max length is 255")
|
||||
})
|
||||
|
||||
t.Run("should fail if the datasource managed permissions fail", func(t *testing.T) {
|
||||
dsService := initDSService(t)
|
||||
enableRBACManagedPermissions(t, dsService.cfg)
|
||||
dsService.permissionsService = &actest.FakePermissionsService{
|
||||
ExpectedErr: errors.New("failed to set datasource permissions"),
|
||||
}
|
||||
dsService.pluginStore = &pluginstore.FakePluginStore{
|
||||
PluginList: []pluginstore.Plugin{},
|
||||
}
|
||||
|
||||
cmd := &datasources.AddDataSourceCommand{
|
||||
OrgID: 1,
|
||||
Type: datasources.DS_TESTDATA,
|
||||
Name: "test",
|
||||
}
|
||||
|
||||
ds, err := dsService.AddDataSource(context.Background(), cmd)
|
||||
assert.Nil(t, ds)
|
||||
assert.ErrorContains(t, err, "failed to set datasource permissions")
|
||||
})
|
||||
|
||||
t.Run("if a plugin has an API version defined (EXPERIMENTAL)", func(t *testing.T) {
|
||||
t.Run("should success to run admission hooks", func(t *testing.T) {
|
||||
dsService := initDSService(t)
|
||||
@@ -580,11 +602,8 @@ func TestService_DeleteDataSource(t *testing.T) {
|
||||
permissionSvc := acmock.NewMockedPermissionsService()
|
||||
permissionSvc.On("SetPermissions", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return([]accesscontrol.ResourcePermission{}, nil).Once()
|
||||
permissionSvc.On("DeleteResourcePermissions", mock.Anything, mock.Anything, mock.Anything).Return(nil).Once()
|
||||
|
||||
f := ini.Empty()
|
||||
f.Section("rbac").Key("resources_with_managed_permissions_on_creation").SetValue("datasource")
|
||||
cfg, err := setting.NewCfgFromINIFile(f)
|
||||
require.NoError(t, err)
|
||||
cfg := &setting.Cfg{}
|
||||
enableRBACManagedPermissions(t, cfg)
|
||||
dsService, err := ProvideService(sqlStore, secretsService, secretsStore, cfg, featuremgmt.WithFeatures(), acmock.New(), permissionSvc, quotaService, &pluginstore.FakePluginStore{}, &pluginfakes.FakePluginClient{}, nil)
|
||||
require.NoError(t, err)
|
||||
|
||||
@@ -1521,6 +1540,15 @@ func initDSService(t *testing.T) *Service {
|
||||
return dsService
|
||||
}
|
||||
|
||||
func enableRBACManagedPermissions(t testing.TB, cfg *setting.Cfg) {
|
||||
t.Helper()
|
||||
f := ini.Empty()
|
||||
f.Section("rbac").Key("resources_with_managed_permissions_on_creation").SetValue("datasource")
|
||||
tempCfg, err := setting.NewCfgFromINIFile(f)
|
||||
cfg.RBAC = tempCfg.RBAC
|
||||
require.NoError(t, err)
|
||||
}
|
||||
|
||||
const caCert string = `-----BEGIN CERTIFICATE-----
|
||||
MIIDATCCAemgAwIBAgIJAMQ5hC3CPDTeMA0GCSqGSIb3DQEBCwUAMBcxFTATBgNV
|
||||
BAMMDGNhLWs4cy1zdGhsbTAeFw0xNjEwMjcwODQyMjdaFw00NDAzMTQwODQyMjda
|
||||
|
||||
Reference in New Issue
Block a user