package stats import ( "context" "fmt" "net/http" "testing" "github.com/stretchr/testify/require" "github.com/grafana/grafana/pkg/infra/db" "github.com/grafana/grafana/pkg/infra/tracing" "github.com/grafana/grafana/pkg/services/org" "github.com/grafana/grafana/pkg/services/org/orgimpl" "github.com/grafana/grafana/pkg/services/quota/quotaimpl" "github.com/grafana/grafana/pkg/services/supportbundles/supportbundlestest" "github.com/grafana/grafana/pkg/services/user" "github.com/grafana/grafana/pkg/services/user/userimpl" "github.com/grafana/grafana/pkg/setting" "github.com/grafana/grafana/pkg/tests/testinfra" "github.com/grafana/grafana/pkg/tests/testsuite" ) func TestMain(m *testing.M) { testsuite.Run(m) } func TestIntegrationAdminStats(t *testing.T) { t.Run("with unified alerting enabled", func(t *testing.T) { url := grafanaSetup(t, testinfra.GrafanaOpts{ DisableLegacyAlerting: true, EnableUnifiedAlerting: true, AppModeProduction: true, }) // nolint:gosec resp, err := http.Get(url) defer func() { _ = resp.Body.Close() }() require.NoError(t, err) require.Equal(t, http.StatusOK, resp.StatusCode) }) t.Run("with legacy alerting enabled", func(t *testing.T) { url := grafanaSetup(t, testinfra.GrafanaOpts{ DisableLegacyAlerting: false, EnableUnifiedAlerting: false, AppModeProduction: true, }) // nolint:gosec resp, err := http.Get(url) defer func() { _ = resp.Body.Close() }() require.NoError(t, err) require.Equal(t, http.StatusOK, resp.StatusCode) }) } // grafanaSetup creates the grafana server, user and returns the URL with credentials of the api/admin/stats endpoint. func grafanaSetup(t *testing.T, opts testinfra.GrafanaOpts) string { t.Helper() testinfra.SQLiteIntegrationTest(t) // Setup Grafana and its Database dir, path := testinfra.CreateGrafDir(t, opts) grafanaListedAddr, env := testinfra.StartGrafanaEnv(t, dir, path) // Create a user to make authenticated requests createUser(t, env.SQLStore, env.Cfg, user.CreateUserCommand{ DefaultOrgRole: string(org.RoleAdmin), Login: "grafana", Password: "password", IsAdmin: true, }) return fmt.Sprintf("http://%s:%s@%s/api/admin/stats", "grafana", "password", grafanaListedAddr) } func createUser(t *testing.T, db db.DB, cfg *setting.Cfg, cmd user.CreateUserCommand) int64 { t.Helper() cfg.AutoAssignOrg = true cfg.AutoAssignOrgId = 1 quotaService := quotaimpl.ProvideService(db, cfg) orgService, err := orgimpl.ProvideService(db, cfg, quotaService) require.NoError(t, err) usrSvc, err := userimpl.ProvideService( db, orgService, cfg, nil, nil, tracing.InitializeTracerForTest(), quotaService, supportbundlestest.NewFakeBundleService(), ) require.NoError(t, err) u, err := usrSvc.Create(context.Background(), &cmd) require.NoError(t, err) return u.ID }