CloudMigrations: Add test case for invalid permissions to fetch contact points (#106143)

This commit is contained in:
Matheus Macabu
2025-06-09 09:49:46 +02:00
committed by GitHub
parent 3bb4c92028
commit 90c4868c8c
2 changed files with 45 additions and 8 deletions
@@ -24,6 +24,7 @@ import (
"github.com/grafana/grafana/pkg/infra/kvstore"
"github.com/grafana/grafana/pkg/infra/tracing"
"github.com/grafana/grafana/pkg/plugins"
"github.com/grafana/grafana/pkg/services/accesscontrol/acimpl"
"github.com/grafana/grafana/pkg/services/accesscontrol/actest"
"github.com/grafana/grafana/pkg/services/annotations/annotationstest"
"github.com/grafana/grafana/pkg/services/cloudmigration"
@@ -918,19 +919,20 @@ func setUpServiceTest(t *testing.T, withDashboardMock bool, cfgOverrides ...conf
kvStore := kvstore.ProvideService(sqlStore)
bus := bus.ProvideBus(tracer)
fakeAccessControl := actest.FakeAccessControl{ExpectedEvaluate: true}
accessControl := acimpl.ProvideAccessControl(featureToggles)
fakeAccessControlService := actest.FakeService{}
alertMetrics := metrics.NewNGAlert(prometheus.NewRegistry())
cfg.UnifiedAlerting.DefaultRuleEvaluationInterval = time.Minute
cfg.UnifiedAlerting.BaseInterval = time.Minute
cfg.UnifiedAlerting.InitializationTimeout = 30 * time.Second
ruleStore, err := ngalertstore.ProvideDBStore(cfg, featureToggles, sqlStore, mockFolder, dashboardService, fakeAccessControl, bus)
ruleStore, err := ngalertstore.ProvideDBStore(cfg, featureToggles, sqlStore, mockFolder, dashboardService, accessControl, bus)
require.NoError(t, err)
ng, err := ngalert.ProvideService(
cfg, featureToggles, nil, nil, rr, sqlStore, kvStore, nil, nil, quotatest.New(false, nil),
secretsService, nil, alertMetrics, mockFolder, fakeAccessControl, dashboardService, nil, bus, fakeAccessControlService,
secretsService, nil, alertMetrics, mockFolder, accessControl, dashboardService, nil, bus, fakeAccessControlService,
annotationstest.NewFakeAnnotationsRepo(), &pluginstore.FakePluginStore{}, tracer, ruleStore,
httpclient.NewProvider(), ngalertfakes.NewFakeReceiverPermissionsService(), usertest.NewUserServiceFake(),
)
@@ -4,15 +4,19 @@ import (
"context"
"encoding/json"
"fmt"
"net/http"
"testing"
"time"
"github.com/grafana/alerting/definition"
"github.com/prometheus/alertmanager/pkg/labels"
"github.com/stretchr/testify/require"
"github.com/grafana/alerting/definition"
"github.com/grafana/grafana/pkg/apimachinery/errutil"
"github.com/grafana/grafana/pkg/components/simplejson"
"github.com/grafana/grafana/pkg/services/accesscontrol"
"github.com/grafana/grafana/pkg/services/dashboards"
"github.com/grafana/grafana/pkg/services/datasources"
"github.com/grafana/grafana/pkg/services/featuremgmt"
ac "github.com/grafana/grafana/pkg/services/ngalert/accesscontrol"
"github.com/grafana/grafana/pkg/services/ngalert/api/tooling/definitions"
@@ -21,6 +25,15 @@ import (
"github.com/grafana/grafana/pkg/setting"
)
// Read-only.
var alertRulesPermissions = map[string][]string{
accesscontrol.ActionAlertingRuleRead: {"*"},
accesscontrol.ActionAlertingRuleCreate: {"*"},
accesscontrol.ActionAlertingRuleUpdate: {"*"},
dashboards.ActionFoldersRead: {"*"},
datasources.ActionQuery: {"*"},
}
func TestGetAlertMuteTimings(t *testing.T) {
t.Parallel()
@@ -98,6 +111,28 @@ func TestGetContactPoints(t *testing.T) {
require.NotNil(t, contactPoints)
require.Len(t, contactPoints, len(createdContactPoints)+defaultEmailContactPointCount)
})
t.Run("it returns an error when user lacks permission to read contact point secrets", func(t *testing.T) {
t.Parallel()
s := setUpServiceTest(t, false).(*Service)
user := &user.SignedInUser{
OrgID: 1,
Permissions: map[int64]map[string][]string{
1: {
accesscontrol.ActionAlertingNotificationsRead: nil,
},
},
}
contactPoints, err := s.getContactPoints(ctx, user)
require.Nil(t, contactPoints)
gfErr := errutil.Error{}
require.ErrorAs(t, err, &gfErr)
require.Equal(t, http.StatusForbidden, gfErr.Reason.Status().HTTPStatus())
})
}
func TestGetNotificationPolicies(t *testing.T) {
@@ -139,7 +174,7 @@ func TestGetAlertRules(t *testing.T) {
s := setUpServiceTest(t, false).(*Service)
user := &user.SignedInUser{OrgID: 1}
user := &user.SignedInUser{OrgID: 1, Permissions: map[int64]map[string][]string{1: alertRulesPermissions}}
alertRule := createAlertRule(t, ctx, s, user, false, "")
@@ -158,7 +193,7 @@ func TestGetAlertRules(t *testing.T) {
s := setUpServiceTest(t, false, alertRulesState).(*Service)
user := &user.SignedInUser{OrgID: 1}
user := &user.SignedInUser{OrgID: 1, Permissions: map[int64]map[string][]string{1: alertRulesPermissions}}
alertRulePaused := createAlertRule(t, ctx, s, user, true, "")
require.True(t, alertRulePaused.IsPaused)
@@ -185,7 +220,7 @@ func TestGetAlertRuleGroups(t *testing.T) {
s := setUpServiceTest(t, false).(*Service)
user := &user.SignedInUser{OrgID: 1}
user := &user.SignedInUser{OrgID: 1, Permissions: map[int64]map[string][]string{1: alertRulesPermissions}}
ruleGroupTitle := "ruleGroupTitle"
@@ -224,7 +259,7 @@ func TestGetAlertRuleGroups(t *testing.T) {
s := setUpServiceTest(t, false, alertRulesState).(*Service)
user := &user.SignedInUser{OrgID: 1}
user := &user.SignedInUser{OrgID: 1, Permissions: map[int64]map[string][]string{1: alertRulesPermissions}}
ruleGroupTitle := "ruleGroupTitle"