139 lines
3.7 KiB
Go
139 lines
3.7 KiB
Go
package api
|
|
|
|
import (
|
|
"net/http"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
|
|
contextmodel "github.com/grafana/grafana/pkg/services/contexthandler/model"
|
|
"github.com/grafana/grafana/pkg/services/featuremgmt"
|
|
apimodels "github.com/grafana/grafana/pkg/services/ngalert/api/tooling/definitions"
|
|
"github.com/grafana/grafana/pkg/services/user"
|
|
"github.com/grafana/grafana/pkg/web"
|
|
)
|
|
|
|
func TestAlertmanagerApiHandler_isExtraConfig(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
datasourceUID string
|
|
flagEnabled bool
|
|
expectedIsExtra bool
|
|
}{
|
|
{
|
|
name: "normal datasource when feature enabled",
|
|
datasourceUID: "normal-datasource",
|
|
flagEnabled: true,
|
|
expectedIsExtra: false,
|
|
},
|
|
{
|
|
name: "extra config when feature enabled",
|
|
datasourceUID: "~grafana-with-extra-config",
|
|
flagEnabled: true,
|
|
expectedIsExtra: true,
|
|
},
|
|
{
|
|
name: "extra config when feature disabled",
|
|
datasourceUID: "~grafana-with-extra-config",
|
|
flagEnabled: false,
|
|
expectedIsExtra: false,
|
|
},
|
|
{
|
|
name: "empty datasource UID",
|
|
datasourceUID: "",
|
|
flagEnabled: true,
|
|
expectedIsExtra: false,
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
req := &http.Request{}
|
|
ctx := &contextmodel.ReqContext{
|
|
Context: &web.Context{
|
|
Req: req,
|
|
},
|
|
SignedInUser: &user.SignedInUser{
|
|
OrgID: 1,
|
|
},
|
|
}
|
|
|
|
ctx.Req = web.SetURLParams(req, map[string]string{
|
|
":DatasourceUID": tt.datasourceUID,
|
|
})
|
|
|
|
var features featuremgmt.FeatureToggles
|
|
if tt.flagEnabled {
|
|
features = featuremgmt.WithFeatures(featuremgmt.FlagAlertingImportAlertmanagerUI)
|
|
} else {
|
|
features = featuremgmt.WithFeatures()
|
|
}
|
|
|
|
handler := &AlertmanagerApiHandler{
|
|
FeatureManager: features,
|
|
}
|
|
|
|
isExtra := handler.isExtraConfig(ctx)
|
|
assert.Equal(t, tt.expectedIsExtra, isExtra)
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestAlertmanagerApiHandler_ExtraConfigRouting(t *testing.T) {
|
|
t.Run("GET status returns ready for extra config", func(t *testing.T) {
|
|
req := &http.Request{}
|
|
ctx := &contextmodel.ReqContext{
|
|
Context: &web.Context{
|
|
Req: req,
|
|
},
|
|
SignedInUser: &user.SignedInUser{
|
|
OrgID: 1,
|
|
},
|
|
}
|
|
|
|
ctx.Req = web.SetURLParams(req, map[string]string{
|
|
":DatasourceUID": "~grafana-with-extra-config",
|
|
})
|
|
|
|
handler := &AlertmanagerApiHandler{
|
|
FeatureManager: featuremgmt.WithFeatures(featuremgmt.FlagAlertingImportAlertmanagerUI),
|
|
}
|
|
|
|
resp := handler.handleRouteGetAMStatus(ctx, "~grafana-with-extra-config")
|
|
require.Equal(t, http.StatusOK, resp.Status())
|
|
})
|
|
|
|
t.Run("POST operations return 403 for extra config", func(t *testing.T) {
|
|
req := &http.Request{}
|
|
ctx := &contextmodel.ReqContext{
|
|
Context: &web.Context{
|
|
Req: req,
|
|
},
|
|
SignedInUser: &user.SignedInUser{
|
|
OrgID: 1,
|
|
},
|
|
}
|
|
|
|
ctx.Req = web.SetURLParams(req, map[string]string{
|
|
":DatasourceUID": "~grafana-with-extra-config",
|
|
})
|
|
|
|
handler := &AlertmanagerApiHandler{
|
|
FeatureManager: featuremgmt.WithFeatures(featuremgmt.FlagAlertingImportAlertmanagerUI),
|
|
}
|
|
|
|
resp := handler.handleRouteCreateSilence(ctx, apimodels.PostableSilence{}, "~grafana-with-extra-config")
|
|
assert.Equal(t, http.StatusForbidden, resp.Status())
|
|
|
|
resp = handler.handleRouteDeleteAlertingConfig(ctx, "~grafana-with-extra-config")
|
|
assert.Equal(t, http.StatusForbidden, resp.Status())
|
|
|
|
resp = handler.handleRoutePostAlertingConfig(ctx, apimodels.PostableUserConfig{}, "~grafana-with-extra-config")
|
|
assert.Equal(t, http.StatusForbidden, resp.Status())
|
|
|
|
resp = handler.handleRoutePostAMAlerts(ctx, apimodels.PostableAlerts{}, "~grafana-with-extra-config")
|
|
assert.Equal(t, http.StatusForbidden, resp.Status())
|
|
})
|
|
}
|