/
githubmirror
/
grafana
Обзор
Документация
Войти
/
githubmirror
/
grafana
Код
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
pkg/tests/api/alerting/api_ruler_pause_test.go
101 строка
3 KB
Santiago
Alerting: Reuse Grafana env in integration tests (#125722)
29 июн 2026, 17:59
Не верифицирован
29 июн 2026, 17:59
014483f
Код
Авторство
О чём код?
package alerting import ( "net/http" "testing" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" apimodels "github.com/grafana/grafana/pkg/services/ngalert/api/tooling/definitions" "github.com/grafana/grafana/pkg/services/org" "github.com/grafana/grafana/pkg/services/user" "github.com/grafana/grafana/pkg/tests/testinfra" "github.com/grafana/grafana/pkg/util" "github.com/grafana/grafana/pkg/util/testutil" ) // viewerLogin generates a unique login per test so the viewer user does not // collide with another test's viewer when using the shared Grafana env. func uniqueViewerLogin() string { return "viewer-" + util.GenerateShortUID() } func TestIntegrationAlertRulePauseNamespace(t *testing.T) { testutil.SkipIntegrationTestInShortMode(t) testinfra.SQLiteIntegrationTest(t) grafanaListedAddr, env := getStandardSharedEnv(t) viewerLogin := uniqueViewerLogin() createUser(t, env.SQLStore, env.Cfg, user.CreateUserCommand{ DefaultOrgRole: string(org.RoleViewer), Password: user.Password(viewerLogin), Login: viewerLogin, }) apiClient := newAlertingApiClient(grafanaListedAddr, "admin", "admin") viewerClient := newAlertingApiClient(grafanaListedAddr, viewerLogin, viewerLogin) // Create the folder we'll save our alerts to folderUID := util.GenerateShortUID() apiClient.CreateFolder(t, folderUID, "folder1") t.Cleanup(func() { deleteFolder(t, grafanaListedAddr, folderUID) }) // Create multiple rule groups in the folder group1 := generateAlertRuleGroup(2, alertRuleGen()) apiClient.PostRulesGroup(t, folderUID, &group1, false) group2 := generateAlertRuleGroup(3, alertRuleGen()) apiClient.PostRulesGroup(t, folderUID, &group2, false) t.Run("pause all rules in namespace", func(t *testing.T) { req := &apimodels.UpdateNamespaceRulesRequest{ IsPaused: new(true), } response, status, _ := apiClient.UpdateNamespaceRules(t, folderUID, req) require.Equal(t, http.StatusAccepted, status) assert.Equal(t, "rules updated successfully", response.Message) // Verify all rules are now paused allRules, status, _ := apiClient.GetAllRulesWithStatus(t) require.Equal(t, http.StatusOK, status) for _, group := range allRules[folderUID] { for _, rule := range group.Rules { assert.True(t, rule.GrafanaManagedAlert.IsPaused, "Rule should be paused") } } }) t.Run("unpause all rules in namespace", func(t *testing.T) { req := &apimodels.UpdateNamespaceRulesRequest{ IsPaused: new(false), } response, status, _ := apiClient.UpdateNamespaceRules(t, folderUID, req) require.Equal(t, http.StatusAccepted, status) assert.Equal(t, "rules updated successfully", response.Message) // Verify all rules are now unpaused allRules, status, _ := apiClient.GetAllRulesWithStatus(t) require.Equal(t, http.StatusOK, status) for _, group := range allRules[folderUID] { for _, rule := range group.Rules { assert.False(t, rule.GrafanaManagedAlert.IsPaused, "Rule should be unpaused") } } }) t.Run("returns 403 for non-existent folder", func(t *testing.T) { req := &apimodels.UpdateNamespaceRulesRequest{ IsPaused: new(false), } _, status, _ := apiClient.UpdateNamespaceRules(t, "non-existent-folder", req) require.Equal(t, http.StatusForbidden, status) }) t.Run("viewer cannot pause rules", func(t *testing.T) { req := &apimodels.UpdateNamespaceRulesRequest{ IsPaused: new(false), } _, status, _ := viewerClient.UpdateNamespaceRules(t, folderUID, req) require.Equal(t, http.StatusForbidden, status) }) }