quota_test.go 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. package sqlstore
  2. import (
  3. "testing"
  4. m "github.com/grafana/grafana/pkg/models"
  5. "github.com/grafana/grafana/pkg/setting"
  6. . "github.com/smartystreets/goconvey/convey"
  7. )
  8. func TestQuotaCommandsAndQueries(t *testing.T) {
  9. Convey("Testing Qutoa commands & queries", t, func() {
  10. InitTestDB(t)
  11. userId := int64(1)
  12. orgId := int64(0)
  13. setting.Quota = setting.QuotaSettings{
  14. Enabled: true,
  15. Org: &setting.OrgQuota{
  16. User: 5,
  17. Dashboard: 5,
  18. DataSource: 5,
  19. ApiKey: 5,
  20. },
  21. User: &setting.UserQuota{
  22. Org: 5,
  23. },
  24. Global: &setting.GlobalQuota{
  25. Org: 5,
  26. User: 5,
  27. Dashboard: 5,
  28. DataSource: 5,
  29. ApiKey: 5,
  30. Session: 5,
  31. },
  32. }
  33. // create a new org and add user_id 1 as admin.
  34. // we will then have an org with 1 user. and a user
  35. // with 1 org.
  36. userCmd := m.CreateOrgCommand{
  37. Name: "TestOrg",
  38. UserId: 1,
  39. }
  40. err := CreateOrg(&userCmd)
  41. So(err, ShouldBeNil)
  42. orgId = userCmd.Result.Id
  43. Convey("Given saved org quota for users", func() {
  44. orgCmd := m.UpdateOrgQuotaCmd{
  45. OrgId: orgId,
  46. Target: "org_user",
  47. Limit: 10,
  48. }
  49. err := UpdateOrgQuota(&orgCmd)
  50. So(err, ShouldBeNil)
  51. Convey("Should be able to get saved quota by org id and target", func() {
  52. query := m.GetOrgQuotaByTargetQuery{OrgId: orgId, Target: "org_user", Default: 1}
  53. err = GetOrgQuotaByTarget(&query)
  54. So(err, ShouldBeNil)
  55. So(query.Result.Limit, ShouldEqual, 10)
  56. })
  57. Convey("Should be able to get default quota by org id and target", func() {
  58. query := m.GetOrgQuotaByTargetQuery{OrgId: 123, Target: "org_user", Default: 11}
  59. err = GetOrgQuotaByTarget(&query)
  60. So(err, ShouldBeNil)
  61. So(query.Result.Limit, ShouldEqual, 11)
  62. })
  63. Convey("Should be able to get used org quota when rows exist", func() {
  64. query := m.GetOrgQuotaByTargetQuery{OrgId: orgId, Target: "org_user", Default: 11}
  65. err = GetOrgQuotaByTarget(&query)
  66. So(err, ShouldBeNil)
  67. So(query.Result.Used, ShouldEqual, 1)
  68. })
  69. Convey("Should be able to get used org quota when no rows exist", func() {
  70. query := m.GetOrgQuotaByTargetQuery{OrgId: 2, Target: "org_user", Default: 11}
  71. err = GetOrgQuotaByTarget(&query)
  72. So(err, ShouldBeNil)
  73. So(query.Result.Used, ShouldEqual, 0)
  74. })
  75. Convey("Should be able to quota list for org", func() {
  76. query := m.GetOrgQuotasQuery{OrgId: orgId}
  77. err = GetOrgQuotas(&query)
  78. So(err, ShouldBeNil)
  79. So(len(query.Result), ShouldEqual, 4)
  80. for _, res := range query.Result {
  81. limit := 5 //default quota limit
  82. used := 0
  83. if res.Target == "org_user" {
  84. limit = 10 //customized quota limit.
  85. used = 1
  86. }
  87. So(res.Limit, ShouldEqual, limit)
  88. So(res.Used, ShouldEqual, used)
  89. }
  90. })
  91. })
  92. Convey("Given saved user quota for org", func() {
  93. userQuotaCmd := m.UpdateUserQuotaCmd{
  94. UserId: userId,
  95. Target: "org_user",
  96. Limit: 10,
  97. }
  98. err := UpdateUserQuota(&userQuotaCmd)
  99. So(err, ShouldBeNil)
  100. Convey("Should be able to get saved quota by user id and target", func() {
  101. query := m.GetUserQuotaByTargetQuery{UserId: userId, Target: "org_user", Default: 1}
  102. err = GetUserQuotaByTarget(&query)
  103. So(err, ShouldBeNil)
  104. So(query.Result.Limit, ShouldEqual, 10)
  105. })
  106. Convey("Should be able to get default quota by user id and target", func() {
  107. query := m.GetUserQuotaByTargetQuery{UserId: 9, Target: "org_user", Default: 11}
  108. err = GetUserQuotaByTarget(&query)
  109. So(err, ShouldBeNil)
  110. So(query.Result.Limit, ShouldEqual, 11)
  111. })
  112. Convey("Should be able to get used user quota when rows exist", func() {
  113. query := m.GetUserQuotaByTargetQuery{UserId: userId, Target: "org_user", Default: 11}
  114. err = GetUserQuotaByTarget(&query)
  115. So(err, ShouldBeNil)
  116. So(query.Result.Used, ShouldEqual, 1)
  117. })
  118. Convey("Should be able to get used user quota when no rows exist", func() {
  119. query := m.GetUserQuotaByTargetQuery{UserId: 2, Target: "org_user", Default: 11}
  120. err = GetUserQuotaByTarget(&query)
  121. So(err, ShouldBeNil)
  122. So(query.Result.Used, ShouldEqual, 0)
  123. })
  124. Convey("Should be able to quota list for user", func() {
  125. query := m.GetUserQuotasQuery{UserId: userId}
  126. err = GetUserQuotas(&query)
  127. So(err, ShouldBeNil)
  128. So(len(query.Result), ShouldEqual, 1)
  129. So(query.Result[0].Limit, ShouldEqual, 10)
  130. So(query.Result[0].Used, ShouldEqual, 1)
  131. })
  132. })
  133. Convey("Should be able to global user quota", func() {
  134. query := m.GetGlobalQuotaByTargetQuery{Target: "user", Default: 5}
  135. err = GetGlobalQuotaByTarget(&query)
  136. So(err, ShouldBeNil)
  137. So(query.Result.Limit, ShouldEqual, 5)
  138. So(query.Result.Used, ShouldEqual, 0)
  139. })
  140. Convey("Should be able to global org quota", func() {
  141. query := m.GetGlobalQuotaByTargetQuery{Target: "org", Default: 5}
  142. err = GetGlobalQuotaByTarget(&query)
  143. So(err, ShouldBeNil)
  144. So(query.Result.Limit, ShouldEqual, 5)
  145. So(query.Result.Used, ShouldEqual, 1)
  146. })
  147. })
  148. }