buckets_e2e_test.go 10.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350
  1. //go:build e2e
  2. // +build e2e
  3. // Copyright 2020-2021 InfluxData, Inc. All rights reserved.
  4. // Use of this source code is governed by MIT
  5. // license that can be found in the LICENSE file.
  6. package api_test
  7. import (
  8. "context"
  9. "fmt"
  10. "github.com/influxdata/influxdb-client-go/v2/log"
  11. "strings"
  12. "testing"
  13. influxdb2 "github.com/influxdata/influxdb-client-go/v2"
  14. "github.com/influxdata/influxdb-client-go/v2/api"
  15. "github.com/influxdata/influxdb-client-go/v2/domain"
  16. "github.com/stretchr/testify/assert"
  17. "github.com/stretchr/testify/require"
  18. )
  19. func TestBucketsAPI(t *testing.T) {
  20. ctx := context.Background()
  21. client := influxdb2.NewClient(serverURL, authToken)
  22. bucketsAPI := client.BucketsAPI()
  23. buckets, err := bucketsAPI.GetBuckets(ctx)
  24. require.Nil(t, err, err)
  25. require.NotNil(t, buckets)
  26. //at least three buckets, my-bucket and two system buckets.
  27. assert.True(t, len(*buckets) > 2)
  28. // test find existing bucket
  29. bucket, err := bucketsAPI.FindBucketByName(ctx, "my-bucket")
  30. require.Nil(t, err, err)
  31. require.NotNil(t, bucket)
  32. assert.Equal(t, "my-bucket", bucket.Name)
  33. //test find non-existing bucket
  34. bucket, err = bucketsAPI.FindBucketByName(ctx, "not existing bucket")
  35. assert.NotNil(t, err)
  36. assert.Nil(t, bucket)
  37. // create organizatiton for bucket
  38. org, err := client.OrganizationsAPI().CreateOrganizationWithName(ctx, "bucket-org")
  39. require.Nil(t, err)
  40. require.NotNil(t, org)
  41. name := "bucket-x"
  42. b, err := bucketsAPI.CreateBucketWithName(ctx, org, name, domain.RetentionRule{EverySeconds: 3600 * 12})
  43. require.Nil(t, err, err)
  44. require.NotNil(t, b)
  45. assert.Equal(t, name, b.Name)
  46. assert.Len(t, b.RetentionRules, 1)
  47. // Test update
  48. desc := "bucket description"
  49. b.Description = &desc
  50. b.RetentionRules = []domain.RetentionRule{{EverySeconds: 3600}}
  51. b, err = bucketsAPI.UpdateBucket(ctx, b)
  52. require.Nil(t, err, err)
  53. require.NotNil(t, b)
  54. assert.Equal(t, name, b.Name)
  55. assert.Equal(t, desc, *b.Description)
  56. assert.Len(t, b.RetentionRules, 1)
  57. b, err = bucketsAPI.FindBucketByID(ctx, *b.Id)
  58. require.Nil(t, err, err)
  59. require.NotNil(t, b)
  60. // Test owners
  61. userOwner, err := client.UsersAPI().CreateUserWithName(ctx, "bucket-owner")
  62. require.Nil(t, err, err)
  63. require.NotNil(t, userOwner)
  64. owners, err := bucketsAPI.GetOwners(ctx, b)
  65. require.Nil(t, err, err)
  66. require.NotNil(t, owners)
  67. assert.Len(t, *owners, 0)
  68. owner, err := bucketsAPI.AddOwner(ctx, b, userOwner)
  69. require.Nil(t, err, err)
  70. require.NotNil(t, owner)
  71. assert.Equal(t, *userOwner.Id, *owner.Id)
  72. owners, err = bucketsAPI.GetOwners(ctx, b)
  73. require.Nil(t, err, err)
  74. require.NotNil(t, owners)
  75. assert.Len(t, *owners, 1)
  76. err = bucketsAPI.RemoveOwnerWithID(ctx, *b.Id, *(*owners)[0].Id)
  77. require.Nil(t, err, err)
  78. owners, err = bucketsAPI.GetOwners(ctx, b)
  79. require.Nil(t, err, err)
  80. require.NotNil(t, owners)
  81. assert.Len(t, *owners, 0)
  82. // Test members
  83. userMember, err := client.UsersAPI().CreateUserWithName(ctx, "bucket-member")
  84. require.Nil(t, err, err)
  85. require.NotNil(t, userMember)
  86. members, err := bucketsAPI.GetMembers(ctx, b)
  87. require.Nil(t, err, err)
  88. require.NotNil(t, members)
  89. assert.Len(t, *members, 0)
  90. member, err := bucketsAPI.AddMember(ctx, b, userMember)
  91. require.Nil(t, err, err)
  92. require.NotNil(t, member)
  93. assert.Equal(t, *userMember.Id, *member.Id)
  94. members, err = bucketsAPI.GetMembers(ctx, b)
  95. require.Nil(t, err, err)
  96. require.NotNil(t, members)
  97. assert.Len(t, *members, 1)
  98. err = bucketsAPI.RemoveMemberWithID(ctx, *b.Id, *(*members)[0].Id)
  99. require.Nil(t, err, err)
  100. members, err = bucketsAPI.GetMembers(ctx, b)
  101. require.Nil(t, err, err)
  102. require.NotNil(t, members)
  103. assert.Len(t, *members, 0)
  104. err = bucketsAPI.DeleteBucketWithID(ctx, *b.Id)
  105. assert.Nil(t, err, err)
  106. err = client.UsersAPI().DeleteUser(ctx, userOwner)
  107. assert.Nil(t, err, err)
  108. err = client.UsersAPI().DeleteUser(ctx, userMember)
  109. assert.Nil(t, err, err)
  110. //test failures
  111. _, err = bucketsAPI.FindBucketByID(ctx, *b.Id)
  112. assert.NotNil(t, err)
  113. _, err = bucketsAPI.UpdateBucket(ctx, b)
  114. assert.NotNil(t, err)
  115. b.OrgID = b.Id
  116. _, err = bucketsAPI.CreateBucket(ctx, b)
  117. assert.NotNil(t, err)
  118. // create bucket by object
  119. b = &domain.Bucket{
  120. Description: &desc,
  121. Name: name,
  122. OrgID: org.Id,
  123. RetentionRules: []domain.RetentionRule{{EverySeconds: 3600}},
  124. }
  125. b, err = bucketsAPI.CreateBucket(ctx, b)
  126. require.Nil(t, err, err)
  127. require.NotNil(t, b)
  128. assert.Equal(t, name, b.Name)
  129. assert.Equal(t, *org.Id, *b.OrgID)
  130. assert.Equal(t, desc, *b.Description)
  131. assert.Len(t, b.RetentionRules, 1)
  132. // fail duplicit name
  133. _, err = bucketsAPI.CreateBucketWithName(ctx, org, b.Name)
  134. assert.NotNil(t, err)
  135. // fail org not found
  136. _, err = bucketsAPI.CreateBucketWithNameWithID(ctx, *b.Id, b.Name)
  137. assert.NotNil(t, err)
  138. err = bucketsAPI.DeleteBucketWithID(ctx, *b.Id)
  139. assert.Nil(t, err, err)
  140. //delete already deleted
  141. err = bucketsAPI.DeleteBucketWithID(ctx, *b.Id)
  142. assert.NotNil(t, err)
  143. err = client.OrganizationsAPI().DeleteOrganization(ctx, org)
  144. assert.Nil(t, err, err)
  145. // should fail with org not found
  146. _, err = bucketsAPI.FindBucketsByOrgName(ctx, org.Name, api.PagingWithLimit(100))
  147. assert.NotNil(t, err)
  148. }
  149. func TestBucketsAPI_paging(t *testing.T) {
  150. ctx := context.Background()
  151. client := influxdb2.NewClientWithOptions(serverURL, authToken, influxdb2.DefaultOptions().SetLogLevel(log.DebugLevel))
  152. bucketsAPI := client.BucketsAPI()
  153. // create organizatiton for buckets
  154. org, err := client.OrganizationsAPI().CreateOrganizationWithName(ctx, "bucket-paging-org")
  155. require.Nil(t, err)
  156. require.NotNil(t, org)
  157. // collect all buckets including system ones created for new organization
  158. buckets, err := bucketsAPI.GetBuckets(ctx)
  159. require.Nil(t, err, err)
  160. //store #all buckets before creating new ones (typically 5 - 2xsytem buckets (_tasks, _monitoring) + initial bucket "my-bucket")
  161. bucketsNum := len(*buckets)
  162. // create new buckets inside org
  163. for i := 0; i < 30; i++ {
  164. name := fmt.Sprintf("bucket-%03d", i)
  165. b, err := bucketsAPI.CreateBucketWithName(ctx, org, name)
  166. require.Nil(t, err, err)
  167. require.NotNil(t, b)
  168. assert.Equal(t, name, b.Name)
  169. }
  170. // test paging, 1st page
  171. buckets, err = bucketsAPI.GetBuckets(ctx)
  172. require.Nil(t, err, err)
  173. require.NotNil(t, buckets)
  174. assert.Len(t, *buckets, 20)
  175. // test paging, 2nd, last page
  176. buckets, err = bucketsAPI.GetBuckets(ctx, api.PagingWithOffset(20))
  177. require.Nil(t, err, err)
  178. require.NotNil(t, buckets)
  179. // should return 15, but sometimes repeats system buckets also in 2nd page
  180. assert.True(t, len(*buckets) >= 10+bucketsNum, "Invalid len: %d >= %d", len(*buckets), 10+bucketsNum)
  181. // test paging with increase limit to cover all buckets
  182. buckets, err = bucketsAPI.GetBuckets(ctx, api.PagingWithLimit(100))
  183. require.Nil(t, err, err)
  184. require.NotNil(t, buckets)
  185. assert.Len(t, *buckets, 30+bucketsNum)
  186. // test filtering buckets by org id
  187. buckets, err = bucketsAPI.FindBucketsByOrgID(ctx, *org.Id, api.PagingWithLimit(100))
  188. require.Nil(t, err, err)
  189. require.NotNil(t, buckets)
  190. //+2 for system buckets
  191. assert.Len(t, *buckets, 30+2)
  192. // test filtering buckets by org name
  193. buckets, err = bucketsAPI.FindBucketsByOrgName(ctx, org.Name, api.PagingWithLimit(100))
  194. require.Nil(t, err, err)
  195. require.NotNil(t, buckets)
  196. //+2 for system buckets
  197. assert.Len(t, *buckets, 30+2)
  198. // delete buckete
  199. for _, b := range *buckets {
  200. if strings.HasPrefix(b.Name, "bucket-") {
  201. err = bucketsAPI.DeleteBucket(ctx, &b)
  202. assert.Nil(t, err, err)
  203. }
  204. }
  205. // check all created buckets deleted
  206. buckets, err = bucketsAPI.FindBucketsByOrgName(ctx, org.Name, api.PagingWithLimit(100))
  207. require.Nil(t, err, err)
  208. require.NotNil(t, buckets)
  209. assert.Len(t, *buckets, 2)
  210. err = client.OrganizationsAPI().DeleteOrganization(ctx, org)
  211. assert.Nil(t, err, err)
  212. }
  213. func TestBucketsAPI_failures(t *testing.T) {
  214. ctx := context.Background()
  215. client := influxdb2.NewClient(serverURL, authToken)
  216. bucketsAPI := client.BucketsAPI()
  217. invalidID := "000000000000000"
  218. notExistingID := "1000000000000000"
  219. //test failures
  220. _, err := bucketsAPI.AddMemberWithID(ctx, invalidID, notExistingID)
  221. assert.NotNil(t, err)
  222. _, err = bucketsAPI.AddMemberWithID(ctx, notExistingID, invalidID)
  223. assert.NotNil(t, err)
  224. _, err = bucketsAPI.GetMembersWithID(ctx, invalidID)
  225. assert.NotNil(t, err)
  226. err = bucketsAPI.RemoveMemberWithID(ctx, notExistingID, invalidID)
  227. assert.NotNil(t, err)
  228. err = bucketsAPI.RemoveMemberWithID(ctx, invalidID, notExistingID)
  229. assert.NotNil(t, err)
  230. //test failures
  231. _, err = bucketsAPI.AddOwnerWithID(ctx, invalidID, notExistingID)
  232. assert.NotNil(t, err)
  233. _, err = bucketsAPI.AddOwnerWithID(ctx, notExistingID, invalidID)
  234. assert.NotNil(t, err)
  235. _, err = bucketsAPI.GetOwnersWithID(ctx, invalidID)
  236. assert.NotNil(t, err)
  237. err = bucketsAPI.RemoveOwnerWithID(ctx, notExistingID, invalidID)
  238. assert.NotNil(t, err)
  239. err = bucketsAPI.RemoveOwnerWithID(ctx, invalidID, notExistingID)
  240. assert.NotNil(t, err)
  241. //delete with invalid id
  242. err = bucketsAPI.DeleteBucketWithID(ctx, invalidID)
  243. assert.NotNil(t, err)
  244. }
  245. func TestBucketsAPI_requestFailing(t *testing.T) {
  246. ctx := context.Background()
  247. client := influxdb2.NewClient("htp://localhost:9990", authToken)
  248. bucketsAPI := client.BucketsAPI()
  249. anID := "1000000000000000"
  250. bucket := &domain.Bucket{Id: &anID, OrgID: &anID}
  251. user := &domain.User{Id: &anID}
  252. _, err := bucketsAPI.GetBuckets(ctx)
  253. assert.NotNil(t, err)
  254. _, err = bucketsAPI.FindBucketByID(ctx, anID)
  255. assert.NotNil(t, err)
  256. _, err = bucketsAPI.FindBucketByName(ctx, anID)
  257. assert.NotNil(t, err)
  258. _, err = bucketsAPI.CreateBucket(ctx, bucket)
  259. assert.NotNil(t, err)
  260. _, err = bucketsAPI.UpdateBucket(ctx, bucket)
  261. assert.NotNil(t, err)
  262. err = bucketsAPI.DeleteBucket(ctx, bucket)
  263. assert.NotNil(t, err)
  264. _, err = bucketsAPI.GetMembers(ctx, bucket)
  265. assert.NotNil(t, err)
  266. _, err = bucketsAPI.AddMember(ctx, bucket, user)
  267. assert.NotNil(t, err)
  268. err = bucketsAPI.RemoveMemberWithID(ctx, *bucket.Id, *user.Id)
  269. assert.NotNil(t, err)
  270. _, err = bucketsAPI.GetOwners(ctx, bucket)
  271. assert.NotNil(t, err)
  272. _, err = bucketsAPI.AddOwner(ctx, bucket, user)
  273. assert.NotNil(t, err)
  274. err = bucketsAPI.RemoveOwnerWithID(ctx, *bucket.Id, *user.Id)
  275. assert.NotNil(t, err)
  276. }