datasource_test.go 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. package sqlstore
  2. import (
  3. "testing"
  4. . "github.com/smartystreets/goconvey/convey"
  5. "github.com/grafana/grafana/pkg/models"
  6. )
  7. type Test struct {
  8. Id int64
  9. Name string
  10. }
  11. func TestDataAccess(t *testing.T) {
  12. Convey("Testing DB", t, func() {
  13. InitTestDB(t)
  14. Convey("Can add datasource", func() {
  15. err := AddDataSource(&models.AddDataSourceCommand{
  16. OrgId: 10,
  17. Name: "laban",
  18. Type: models.DS_INFLUXDB,
  19. Access: models.DS_ACCESS_DIRECT,
  20. Url: "http://test",
  21. Database: "site",
  22. ReadOnly: true,
  23. })
  24. So(err, ShouldBeNil)
  25. query := models.GetDataSourcesQuery{OrgId: 10}
  26. err = GetDataSources(&query)
  27. So(err, ShouldBeNil)
  28. So(len(query.Result), ShouldEqual, 1)
  29. ds := query.Result[0]
  30. So(ds.OrgId, ShouldEqual, 10)
  31. So(ds.Database, ShouldEqual, "site")
  32. So(ds.ReadOnly, ShouldBeTrue)
  33. })
  34. Convey("Given a datasource", func() {
  35. err := AddDataSource(&models.AddDataSourceCommand{
  36. OrgId: 10,
  37. Name: "nisse",
  38. Type: models.DS_GRAPHITE,
  39. Access: models.DS_ACCESS_DIRECT,
  40. Url: "http://test",
  41. })
  42. So(err, ShouldBeNil)
  43. query := models.GetDataSourcesQuery{OrgId: 10}
  44. err = GetDataSources(&query)
  45. So(err, ShouldBeNil)
  46. ds := query.Result[0]
  47. Convey(" updated ", func() {
  48. cmd := &models.UpdateDataSourceCommand{
  49. Id: ds.Id,
  50. OrgId: 10,
  51. Name: "nisse",
  52. Type: models.DS_GRAPHITE,
  53. Access: models.DS_ACCESS_PROXY,
  54. Url: "http://test",
  55. Version: ds.Version,
  56. }
  57. Convey("with same version as source", func() {
  58. err := UpdateDataSource(cmd)
  59. So(err, ShouldBeNil)
  60. })
  61. Convey("when someone else updated between read and update", func() {
  62. query := models.GetDataSourcesQuery{OrgId: 10}
  63. err = GetDataSources(&query)
  64. So(err, ShouldBeNil)
  65. ds := query.Result[0]
  66. intendedUpdate := &models.UpdateDataSourceCommand{
  67. Id: ds.Id,
  68. OrgId: 10,
  69. Name: "nisse",
  70. Type: models.DS_GRAPHITE,
  71. Access: models.DS_ACCESS_PROXY,
  72. Url: "http://test",
  73. Version: ds.Version,
  74. }
  75. updateFromOtherUser := &models.UpdateDataSourceCommand{
  76. Id: ds.Id,
  77. OrgId: 10,
  78. Name: "nisse",
  79. Type: models.DS_GRAPHITE,
  80. Access: models.DS_ACCESS_PROXY,
  81. Url: "http://test",
  82. Version: ds.Version,
  83. }
  84. err := UpdateDataSource(updateFromOtherUser)
  85. So(err, ShouldBeNil)
  86. err = UpdateDataSource(intendedUpdate)
  87. So(err, ShouldNotBeNil)
  88. })
  89. Convey("updating datasource without version", func() {
  90. cmd := &models.UpdateDataSourceCommand{
  91. Id: ds.Id,
  92. OrgId: 10,
  93. Name: "nisse",
  94. Type: models.DS_GRAPHITE,
  95. Access: models.DS_ACCESS_PROXY,
  96. Url: "http://test",
  97. }
  98. Convey("should not raise errors", func() {
  99. err := UpdateDataSource(cmd)
  100. So(err, ShouldBeNil)
  101. })
  102. })
  103. Convey("updating datasource without higher version", func() {
  104. cmd := &models.UpdateDataSourceCommand{
  105. Id: ds.Id,
  106. OrgId: 10,
  107. Name: "nisse",
  108. Type: models.DS_GRAPHITE,
  109. Access: models.DS_ACCESS_PROXY,
  110. Url: "http://test",
  111. Version: 90000,
  112. }
  113. Convey("should not raise errors", func() {
  114. err := UpdateDataSource(cmd)
  115. So(err, ShouldBeNil)
  116. })
  117. })
  118. })
  119. Convey("Can delete datasource by id", func() {
  120. err := DeleteDataSourceById(&models.DeleteDataSourceByIdCommand{Id: ds.Id, OrgId: ds.OrgId})
  121. So(err, ShouldBeNil)
  122. GetDataSources(&query)
  123. So(len(query.Result), ShouldEqual, 0)
  124. })
  125. Convey("Can delete datasource by name", func() {
  126. err := DeleteDataSourceByName(&models.DeleteDataSourceByNameCommand{Name: ds.Name, OrgId: ds.OrgId})
  127. So(err, ShouldBeNil)
  128. GetDataSources(&query)
  129. So(len(query.Result), ShouldEqual, 0)
  130. })
  131. Convey("Can not delete datasource with wrong orgId", func() {
  132. err := DeleteDataSourceById(&models.DeleteDataSourceByIdCommand{Id: ds.Id, OrgId: 123123})
  133. So(err, ShouldBeNil)
  134. GetDataSources(&query)
  135. So(len(query.Result), ShouldEqual, 1)
  136. })
  137. })
  138. })
  139. }