mirror of https://github.com/grafana/grafana
parent
86ed85aa6e
commit
1ad10914ce
@ -0,0 +1,144 @@ |
|||||||
|
package middleware |
||||||
|
|
||||||
|
import ( |
||||||
|
"github.com/grafana/grafana/pkg/bus" |
||||||
|
m "github.com/grafana/grafana/pkg/models" |
||||||
|
"github.com/grafana/grafana/pkg/setting" |
||||||
|
. "github.com/smartystreets/goconvey/convey" |
||||||
|
"testing" |
||||||
|
) |
||||||
|
|
||||||
|
func TestMiddlewareQuota(t *testing.T) { |
||||||
|
|
||||||
|
Convey("Given the grafana quota middleware", t, func() { |
||||||
|
setting.Quota = setting.QuotaSettings{ |
||||||
|
Enabled: true, |
||||||
|
Org: &setting.OrgQuota{ |
||||||
|
User: 5, |
||||||
|
Dashboard: 5, |
||||||
|
DataSource: 5, |
||||||
|
ApiKey: 5, |
||||||
|
}, |
||||||
|
User: &setting.UserQuota{ |
||||||
|
Org: 5, |
||||||
|
}, |
||||||
|
Global: &setting.GlobalQuota{ |
||||||
|
Org: 5, |
||||||
|
User: 5, |
||||||
|
Dashboard: 5, |
||||||
|
DataSource: 5, |
||||||
|
ApiKey: 5, |
||||||
|
Session: 5, |
||||||
|
}, |
||||||
|
} |
||||||
|
|
||||||
|
middlewareScenario("with user not logged in", func(sc *scenarioContext) { |
||||||
|
bus.AddHandler("globalQuota", func(query *m.GetGlobalQuotaByTargetQuery) error { |
||||||
|
query.Result = &m.GlobalQuotaDTO{ |
||||||
|
Target: query.Target, |
||||||
|
Limit: query.Default, |
||||||
|
Used: 4, |
||||||
|
} |
||||||
|
return nil |
||||||
|
}) |
||||||
|
Convey("global quota not reached", func() { |
||||||
|
sc.m.Get("/user", Quota("user"), sc.defaultHandler) |
||||||
|
sc.fakeReq("GET", "/user").exec() |
||||||
|
So(sc.resp.Code, ShouldEqual, 200) |
||||||
|
}) |
||||||
|
Convey("global quota reached", func() { |
||||||
|
setting.Quota.Global.User = 4 |
||||||
|
sc.m.Get("/user", Quota("user"), sc.defaultHandler) |
||||||
|
sc.fakeReq("GET", "/user").exec() |
||||||
|
So(sc.resp.Code, ShouldEqual, 403) |
||||||
|
}) |
||||||
|
Convey("global session quota not reached", func() { |
||||||
|
setting.Quota.Global.Session = 10 |
||||||
|
sc.m.Get("/user", Quota("session"), sc.defaultHandler) |
||||||
|
sc.fakeReq("GET", "/user").exec() |
||||||
|
So(sc.resp.Code, ShouldEqual, 200) |
||||||
|
}) |
||||||
|
Convey("global session quota reached", func() { |
||||||
|
setting.Quota.Global.Session = 1 |
||||||
|
sc.m.Get("/user", Quota("session"), sc.defaultHandler) |
||||||
|
sc.fakeReq("GET", "/user").exec() |
||||||
|
So(sc.resp.Code, ShouldEqual, 403) |
||||||
|
}) |
||||||
|
}) |
||||||
|
|
||||||
|
middlewareScenario("with user logged in", func(sc *scenarioContext) { |
||||||
|
// log us in, so we have a user_id and org_id in the context
|
||||||
|
sc.fakeReq("GET", "/").handler(func(c *Context) { |
||||||
|
c.Session.Set(SESS_KEY_USERID, int64(12)) |
||||||
|
}).exec() |
||||||
|
|
||||||
|
bus.AddHandler("test", func(query *m.GetSignedInUserQuery) error { |
||||||
|
query.Result = &m.SignedInUser{OrgId: 2, UserId: 12} |
||||||
|
return nil |
||||||
|
}) |
||||||
|
bus.AddHandler("globalQuota", func(query *m.GetGlobalQuotaByTargetQuery) error { |
||||||
|
query.Result = &m.GlobalQuotaDTO{ |
||||||
|
Target: query.Target, |
||||||
|
Limit: query.Default, |
||||||
|
Used: 4, |
||||||
|
} |
||||||
|
return nil |
||||||
|
}) |
||||||
|
bus.AddHandler("userQuota", func(query *m.GetUserQuotaByTargetQuery) error { |
||||||
|
query.Result = &m.UserQuotaDTO{ |
||||||
|
Target: query.Target, |
||||||
|
Limit: query.Default, |
||||||
|
Used: 4, |
||||||
|
} |
||||||
|
return nil |
||||||
|
}) |
||||||
|
bus.AddHandler("orgQuota", func(query *m.GetOrgQuotaByTargetQuery) error { |
||||||
|
query.Result = &m.OrgQuotaDTO{ |
||||||
|
Target: query.Target, |
||||||
|
Limit: query.Default, |
||||||
|
Used: 4, |
||||||
|
} |
||||||
|
return nil |
||||||
|
}) |
||||||
|
Convey("global datasource quota reached", func() { |
||||||
|
setting.Quota.Global.DataSource = 4 |
||||||
|
sc.m.Get("/ds", Quota("data_source"), sc.defaultHandler) |
||||||
|
sc.fakeReq("GET", "/ds").exec() |
||||||
|
So(sc.resp.Code, ShouldEqual, 403) |
||||||
|
}) |
||||||
|
Convey("user Org quota not reached", func() { |
||||||
|
setting.Quota.User.Org = 5 |
||||||
|
sc.m.Get("/org", Quota("org"), sc.defaultHandler) |
||||||
|
sc.fakeReq("GET", "/org").exec() |
||||||
|
So(sc.resp.Code, ShouldEqual, 200) |
||||||
|
}) |
||||||
|
Convey("user Org quota reached", func() { |
||||||
|
setting.Quota.User.Org = 4 |
||||||
|
sc.m.Get("/org", Quota("org"), sc.defaultHandler) |
||||||
|
sc.fakeReq("GET", "/org").exec() |
||||||
|
So(sc.resp.Code, ShouldEqual, 403) |
||||||
|
}) |
||||||
|
Convey("org dashboard quota not reached", func() { |
||||||
|
setting.Quota.Org.Dashboard = 10 |
||||||
|
sc.m.Get("/dashboard", Quota("dashboard"), sc.defaultHandler) |
||||||
|
sc.fakeReq("GET", "/dashboard").exec() |
||||||
|
So(sc.resp.Code, ShouldEqual, 200) |
||||||
|
}) |
||||||
|
Convey("org dashboard quota reached", func() { |
||||||
|
setting.Quota.Org.Dashboard = 4 |
||||||
|
sc.m.Get("/dashboard", Quota("dashboard"), sc.defaultHandler) |
||||||
|
sc.fakeReq("GET", "/dashboard").exec() |
||||||
|
So(sc.resp.Code, ShouldEqual, 403) |
||||||
|
}) |
||||||
|
Convey("org dashboard quota reached but quotas disabled", func() { |
||||||
|
setting.Quota.Org.Dashboard = 4 |
||||||
|
setting.Quota.Enabled = false |
||||||
|
sc.m.Get("/dashboard", Quota("dashboard"), sc.defaultHandler) |
||||||
|
sc.fakeReq("GET", "/dashboard").exec() |
||||||
|
So(sc.resp.Code, ShouldEqual, 200) |
||||||
|
}) |
||||||
|
|
||||||
|
}) |
||||||
|
|
||||||
|
}) |
||||||
|
} |
||||||
Loading…
Reference in new issue