@ -3,9 +3,10 @@ package middleware
import (
import (
"testing"
"testing"
"github.com/grafana/grafana/pkg/services/quota"
"github.com/grafana/grafana/pkg/bus"
"github.com/grafana/grafana/pkg/bus"
m "github.com/grafana/grafana/pkg/models"
m "github.com/grafana/grafana/pkg/models"
"github.com/grafana/grafana/pkg/services/session"
"github.com/grafana/grafana/pkg/setting"
"github.com/grafana/grafana/pkg/setting"
. "github.com/smartystreets/goconvey/convey"
. "github.com/smartystreets/goconvey/convey"
)
)
@ -13,10 +14,6 @@ import (
func TestMiddlewareQuota ( t * testing . T ) {
func TestMiddlewareQuota ( t * testing . T ) {
Convey ( "Given the grafana quota middleware" , t , func ( ) {
Convey ( "Given the grafana quota middleware" , t , func ( ) {
session . GetSessionCount = func ( ) int {
return 4
}
setting . AnonymousEnabled = false
setting . AnonymousEnabled = false
setting . Quota = setting . QuotaSettings {
setting . Quota = setting . QuotaSettings {
Enabled : true ,
Enabled : true ,
@ -39,6 +36,12 @@ func TestMiddlewareQuota(t *testing.T) {
} ,
} ,
}
}
fakeAuthTokenService := newFakeUserAuthTokenService ( )
qs := & quota . QuotaService {
AuthTokenService : fakeAuthTokenService ,
}
QuotaFn := Quota ( qs )
middlewareScenario ( "with user not logged in" , func ( sc * scenarioContext ) {
middlewareScenario ( "with user not logged in" , func ( sc * scenarioContext ) {
bus . AddHandler ( "globalQuota" , func ( query * m . GetGlobalQuotaByTargetQuery ) error {
bus . AddHandler ( "globalQuota" , func ( query * m . GetGlobalQuotaByTargetQuery ) error {
query . Result = & m . GlobalQuotaDTO {
query . Result = & m . GlobalQuotaDTO {
@ -48,26 +51,30 @@ func TestMiddlewareQuota(t *testing.T) {
}
}
return nil
return nil
} )
} )
Convey ( "global quota not reached" , func ( ) {
Convey ( "global quota not reached" , func ( ) {
sc . m . Get ( "/user" , Quota ( "user" ) , sc . defaultHandler )
sc . m . Get ( "/user" , QuotaFn ( "user" ) , sc . defaultHandler )
sc . fakeReq ( "GET" , "/user" ) . exec ( )
sc . fakeReq ( "GET" , "/user" ) . exec ( )
So ( sc . resp . Code , ShouldEqual , 200 )
So ( sc . resp . Code , ShouldEqual , 200 )
} )
} )
Convey ( "global quota reached" , func ( ) {
Convey ( "global quota reached" , func ( ) {
setting . Quota . Global . User = 4
setting . Quota . Global . User = 4
sc . m . Get ( "/user" , Quota ( "user" ) , sc . defaultHandler )
sc . m . Get ( "/user" , QuotaFn ( "user" ) , sc . defaultHandler )
sc . fakeReq ( "GET" , "/user" ) . exec ( )
sc . fakeReq ( "GET" , "/user" ) . exec ( )
So ( sc . resp . Code , ShouldEqual , 403 )
So ( sc . resp . Code , ShouldEqual , 403 )
} )
} )
Convey ( "global session quota not reached" , func ( ) {
Convey ( "global session quota not reached" , func ( ) {
setting . Quota . Global . Session = 10
setting . Quota . Global . Session = 10
sc . m . Get ( "/user" , Quota ( "session" ) , sc . defaultHandler )
sc . m . Get ( "/user" , QuotaFn ( "session" ) , sc . defaultHandler )
sc . fakeReq ( "GET" , "/user" ) . exec ( )
sc . fakeReq ( "GET" , "/user" ) . exec ( )
So ( sc . resp . Code , ShouldEqual , 200 )
So ( sc . resp . Code , ShouldEqual , 200 )
} )
} )
Convey ( "global session quota reached" , func ( ) {
Convey ( "global session quota reached" , func ( ) {
setting . Quota . Global . Session = 1
setting . Quota . Global . Session = 1
sc . m . Get ( "/user" , Quota ( "session" ) , sc . defaultHandler )
sc . m . Get ( "/user" , QuotaFn ( "session" ) , sc . defaultHandler )
sc . fakeReq ( "GET" , "/user" ) . exec ( )
sc . fakeReq ( "GET" , "/user" ) . exec ( )
So ( sc . resp . Code , ShouldEqual , 403 )
So ( sc . resp . Code , ShouldEqual , 403 )
} )
} )
@ -95,6 +102,7 @@ func TestMiddlewareQuota(t *testing.T) {
}
}
return nil
return nil
} )
} )
bus . AddHandler ( "userQuota" , func ( query * m . GetUserQuotaByTargetQuery ) error {
bus . AddHandler ( "userQuota" , func ( query * m . GetUserQuotaByTargetQuery ) error {
query . Result = & m . UserQuotaDTO {
query . Result = & m . UserQuotaDTO {
Target : query . Target ,
Target : query . Target ,
@ -103,6 +111,7 @@ func TestMiddlewareQuota(t *testing.T) {
}
}
return nil
return nil
} )
} )
bus . AddHandler ( "orgQuota" , func ( query * m . GetOrgQuotaByTargetQuery ) error {
bus . AddHandler ( "orgQuota" , func ( query * m . GetOrgQuotaByTargetQuery ) error {
query . Result = & m . OrgQuotaDTO {
query . Result = & m . OrgQuotaDTO {
Target : query . Target ,
Target : query . Target ,
@ -111,45 +120,49 @@ func TestMiddlewareQuota(t *testing.T) {
}
}
return nil
return nil
} )
} )
Convey ( "global datasource quota reached" , func ( ) {
Convey ( "global datasource quota reached" , func ( ) {
setting . Quota . Global . DataSource = 4
setting . Quota . Global . DataSource = 4
sc . m . Get ( "/ds" , Quota ( "data_source" ) , sc . defaultHandler )
sc . m . Get ( "/ds" , QuotaFn ( "data_source" ) , sc . defaultHandler )
sc . fakeReq ( "GET" , "/ds" ) . exec ( )
sc . fakeReq ( "GET" , "/ds" ) . exec ( )
So ( sc . resp . Code , ShouldEqual , 403 )
So ( sc . resp . Code , ShouldEqual , 403 )
} )
} )
Convey ( "user Org quota not reached" , func ( ) {
Convey ( "user Org quota not reached" , func ( ) {
setting . Quota . User . Org = 5
setting . Quota . User . Org = 5
sc . m . Get ( "/org" , Quota ( "org" ) , sc . defaultHandler )
sc . m . Get ( "/org" , QuotaFn ( "org" ) , sc . defaultHandler )
sc . fakeReq ( "GET" , "/org" ) . exec ( )
sc . fakeReq ( "GET" , "/org" ) . exec ( )
So ( sc . resp . Code , ShouldEqual , 200 )
So ( sc . resp . Code , ShouldEqual , 200 )
} )
} )
Convey ( "user Org quota reached" , func ( ) {
Convey ( "user Org quota reached" , func ( ) {
setting . Quota . User . Org = 4
setting . Quota . User . Org = 4
sc . m . Get ( "/org" , Quota ( "org" ) , sc . defaultHandler )
sc . m . Get ( "/org" , QuotaFn ( "org" ) , sc . defaultHandler )
sc . fakeReq ( "GET" , "/org" ) . exec ( )
sc . fakeReq ( "GET" , "/org" ) . exec ( )
So ( sc . resp . Code , ShouldEqual , 403 )
So ( sc . resp . Code , ShouldEqual , 403 )
} )
} )
Convey ( "org dashboard quota not reached" , func ( ) {
Convey ( "org dashboard quota not reached" , func ( ) {
setting . Quota . Org . Dashboard = 10
setting . Quota . Org . Dashboard = 10
sc . m . Get ( "/dashboard" , Quota ( "dashboard" ) , sc . defaultHandler )
sc . m . Get ( "/dashboard" , QuotaFn ( "dashboard" ) , sc . defaultHandler )
sc . fakeReq ( "GET" , "/dashboard" ) . exec ( )
sc . fakeReq ( "GET" , "/dashboard" ) . exec ( )
So ( sc . resp . Code , ShouldEqual , 200 )
So ( sc . resp . Code , ShouldEqual , 200 )
} )
} )
Convey ( "org dashboard quota reached" , func ( ) {
Convey ( "org dashboard quota reached" , func ( ) {
setting . Quota . Org . Dashboard = 4
setting . Quota . Org . Dashboard = 4
sc . m . Get ( "/dashboard" , Quota ( "dashboard" ) , sc . defaultHandler )
sc . m . Get ( "/dashboard" , QuotaFn ( "dashboard" ) , sc . defaultHandler )
sc . fakeReq ( "GET" , "/dashboard" ) . exec ( )
sc . fakeReq ( "GET" , "/dashboard" ) . exec ( )
So ( sc . resp . Code , ShouldEqual , 403 )
So ( sc . resp . Code , ShouldEqual , 403 )
} )
} )
Convey ( "org dashboard quota reached but quotas disabled" , func ( ) {
Convey ( "org dashboard quota reached but quotas disabled" , func ( ) {
setting . Quota . Org . Dashboard = 4
setting . Quota . Org . Dashboard = 4
setting . Quota . Enabled = false
setting . Quota . Enabled = false
sc . m . Get ( "/dashboard" , Quota ( "dashboard" ) , sc . defaultHandler )
sc . m . Get ( "/dashboard" , QuotaFn ( "dashboard" ) , sc . defaultHandler )
sc . fakeReq ( "GET" , "/dashboard" ) . exec ( )
sc . fakeReq ( "GET" , "/dashboard" ) . exec ( )
So ( sc . resp . Code , ShouldEqual , 200 )
So ( sc . resp . Code , ShouldEqual , 200 )
} )
} )
} )
} )
} )
} )
}
}