organizations_e2e_test.go 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372
  1. // +build e2e
  2. // Copyright 2020-2021 InfluxData, Inc. All rights reserved.
  3. // Use of this source code is governed by MIT
  4. // license that can be found in the LICENSE file.
  5. package api_test
  6. import (
  7. "context"
  8. "fmt"
  9. "testing"
  10. influxdb2 "github.com/influxdata/influxdb-client-go/v2"
  11. "github.com/influxdata/influxdb-client-go/v2/api"
  12. "github.com/influxdata/influxdb-client-go/v2/domain"
  13. "github.com/stretchr/testify/assert"
  14. "github.com/stretchr/testify/require"
  15. )
  16. func TestOrganizationsAPI(t *testing.T) {
  17. client := influxdb2.NewClient(serverURL, authToken)
  18. orgsAPI := client.OrganizationsAPI()
  19. usersAPI := client.UsersAPI()
  20. orgName := "my-org-2"
  21. orgDescription := "my-org 2 description"
  22. ctx := context.Background()
  23. orgList, err := orgsAPI.GetOrganizations(ctx)
  24. require.Nil(t, err)
  25. require.NotNil(t, orgList)
  26. assert.Len(t, *orgList, 1)
  27. //test error
  28. org, err := orgsAPI.CreateOrganizationWithName(ctx, "")
  29. assert.NotNil(t, err)
  30. require.Nil(t, org)
  31. org, err = orgsAPI.CreateOrganizationWithName(ctx, orgName)
  32. require.Nil(t, err)
  33. require.NotNil(t, org)
  34. assert.Equal(t, orgName, org.Name)
  35. //test duplicit org
  36. _, err = orgsAPI.CreateOrganizationWithName(ctx, orgName)
  37. require.NotNil(t, err)
  38. org.Description = &orgDescription
  39. org, err = orgsAPI.UpdateOrganization(ctx, org)
  40. require.Nil(t, err)
  41. require.NotNil(t, org)
  42. assert.Equal(t, orgDescription, *org.Description)
  43. orgList, err = orgsAPI.GetOrganizations(ctx)
  44. require.Nil(t, err)
  45. require.NotNil(t, orgList)
  46. assert.Len(t, *orgList, 2)
  47. permission := &domain.Permission{
  48. Action: domain.PermissionActionWrite,
  49. Resource: domain.Resource{
  50. Type: domain.ResourceTypeBuckets,
  51. },
  52. }
  53. permissions := []domain.Permission{*permission}
  54. //create authorization for new org
  55. auth, err := client.AuthorizationsAPI().CreateAuthorizationWithOrgID(context.Background(), *org.Id, permissions)
  56. require.Nil(t, err)
  57. require.NotNil(t, auth)
  58. // create client with new auth token without permission
  59. clientOrg2 := influxdb2.NewClient(serverURL, *auth.Token)
  60. orgList, err = clientOrg2.OrganizationsAPI().GetOrganizations(ctx)
  61. require.Nil(t, err)
  62. require.NotNil(t, orgList)
  63. assert.Len(t, *orgList, 0)
  64. org2, err := orgsAPI.FindOrganizationByName(ctx, orgName)
  65. require.Nil(t, err)
  66. require.NotNil(t, org2)
  67. //find unknown org
  68. org2, err = orgsAPI.FindOrganizationByName(ctx, "not-existetn-org")
  69. assert.NotNil(t, err)
  70. assert.Nil(t, org2)
  71. //find org using token without org permission
  72. org2, err = clientOrg2.OrganizationsAPI().FindOrganizationByName(ctx, org.Name)
  73. assert.NotNil(t, err)
  74. assert.Nil(t, org2)
  75. err = client.AuthorizationsAPI().DeleteAuthorization(ctx, auth)
  76. require.Nil(t, err)
  77. members, err := orgsAPI.GetMembers(ctx, org)
  78. require.Nil(t, err)
  79. require.NotNil(t, members)
  80. require.Len(t, *members, 0)
  81. user, err := usersAPI.CreateUserWithName(ctx, "user-01")
  82. require.Nil(t, err)
  83. require.NotNil(t, user)
  84. member, err := orgsAPI.AddMember(ctx, org, user)
  85. require.Nil(t, err)
  86. require.NotNil(t, member)
  87. assert.Equal(t, *user.Id, *member.Id)
  88. assert.Equal(t, user.Name, member.Name)
  89. members, err = orgsAPI.GetMembers(ctx, org)
  90. require.Nil(t, err)
  91. require.NotNil(t, members)
  92. require.Len(t, *members, 1)
  93. org2, err = orgsAPI.FindOrganizationByID(ctx, *org.Id)
  94. require.Nil(t, err)
  95. require.NotNil(t, org2)
  96. assert.Equal(t, org.Name, org2.Name)
  97. orgs, err := orgsAPI.FindOrganizationsByUserID(ctx, *user.Id)
  98. require.Nil(t, err)
  99. require.NotNil(t, orgs)
  100. require.Len(t, *orgs, 1)
  101. assert.Equal(t, org.Name, (*orgs)[0].Name)
  102. orgName2 := "my-org-3"
  103. org2, err = orgsAPI.CreateOrganizationWithName(ctx, orgName2)
  104. require.Nil(t, err)
  105. require.NotNil(t, org2)
  106. assert.Equal(t, orgName2, org2.Name)
  107. orgList, err = orgsAPI.GetOrganizations(ctx)
  108. require.Nil(t, err)
  109. require.NotNil(t, orgList)
  110. assert.Len(t, *orgList, 3)
  111. owners, err := orgsAPI.GetOwners(ctx, org2)
  112. assert.Nil(t, err)
  113. assert.NotNil(t, owners)
  114. assert.Len(t, *owners, 1)
  115. owner, err := orgsAPI.AddOwner(ctx, org2, user)
  116. require.Nil(t, err)
  117. require.NotNil(t, owner)
  118. owners, err = orgsAPI.GetOwners(ctx, org2)
  119. require.Nil(t, err)
  120. require.NotNil(t, owners)
  121. assert.Len(t, *owners, 2)
  122. u, err := usersAPI.FindUserByName(ctx, "my-user")
  123. require.Nil(t, err)
  124. require.NotNil(t, u)
  125. err = orgsAPI.RemoveOwnerWithID(ctx, *org2.Id, *u.Id)
  126. require.Nil(t, err)
  127. owners, err = orgsAPI.GetOwners(ctx, org2)
  128. require.Nil(t, err)
  129. require.NotNil(t, owners)
  130. assert.Len(t, *owners, 1)
  131. orgs, err = orgsAPI.FindOrganizationsByUserID(ctx, *user.Id)
  132. require.Nil(t, err)
  133. require.NotNil(t, orgs)
  134. require.Len(t, *orgs, 2)
  135. err = orgsAPI.RemoveMemberWithID(ctx, *org.Id, *user.Id)
  136. require.Nil(t, err)
  137. members, err = orgsAPI.GetMembers(ctx, org)
  138. require.Nil(t, err)
  139. require.NotNil(t, members)
  140. require.Len(t, *members, 0)
  141. err = orgsAPI.DeleteOrganization(ctx, org)
  142. require.Nil(t, err)
  143. err = orgsAPI.DeleteOrganization(ctx, org2)
  144. assert.Nil(t, err)
  145. orgList, err = orgsAPI.GetOrganizations(ctx)
  146. require.Nil(t, err)
  147. require.NotNil(t, orgList)
  148. assert.Len(t, *orgList, 1)
  149. err = usersAPI.DeleteUser(ctx, user)
  150. require.Nil(t, err)
  151. }
  152. func TestOrganizationAPI_pagination(t *testing.T) {
  153. ctx := context.Background()
  154. client := influxdb2.NewClient(serverURL, authToken)
  155. orgsAPI := client.OrganizationsAPI()
  156. for i := 0; i < 50; i++ {
  157. org, err := orgsAPI.CreateOrganizationWithName(ctx, fmt.Sprintf("org-%02d", i+1))
  158. require.Nil(t, err)
  159. require.NotNil(t, org)
  160. }
  161. orgList, err := orgsAPI.GetOrganizations(ctx)
  162. require.Nil(t, err)
  163. require.NotNil(t, orgList)
  164. require.Len(t, *orgList, 20)
  165. orgList, err = orgsAPI.GetOrganizations(ctx, api.PagingWithOffset(20))
  166. require.Nil(t, err)
  167. require.NotNil(t, orgList)
  168. require.Len(t, *orgList, 20)
  169. orgList, err = orgsAPI.GetOrganizations(ctx, api.PagingWithOffset(40))
  170. require.Nil(t, err)
  171. require.NotNil(t, orgList)
  172. require.Len(t, *orgList, 11)
  173. orgList, err = orgsAPI.GetOrganizations(ctx, api.PagingWithLimit(100))
  174. require.Nil(t, err)
  175. require.NotNil(t, orgList)
  176. require.Len(t, *orgList, 51)
  177. for _, org := range *orgList {
  178. if org.Name == "my-org" {
  179. continue
  180. }
  181. err = orgsAPI.DeleteOrganization(ctx, &org)
  182. assert.Nil(t, err)
  183. }
  184. }
  185. func TestOrganizationAPI_failing(t *testing.T) {
  186. client := influxdb2.NewClient(serverURL, authToken)
  187. orgsAPI := client.OrganizationsAPI()
  188. ctx := context.Background()
  189. notExistingID := "aaaaaaaaaaaaaaaa"
  190. invalidID := "aaaaaa"
  191. org, err := orgsAPI.FindOrganizationByName(ctx, "my-org")
  192. require.Nil(t, err, err)
  193. require.NotNil(t, org)
  194. // Add member with invalid id
  195. member, err := orgsAPI.AddMemberWithID(ctx, *org.Id, notExistingID)
  196. assert.NotNil(t, err)
  197. assert.Nil(t, member)
  198. // get member with invalid id
  199. members, err := orgsAPI.GetMembersWithID(ctx, invalidID)
  200. assert.NotNil(t, err)
  201. assert.Nil(t, members)
  202. // get member with not existing id
  203. members, err = orgsAPI.GetMembersWithID(ctx, notExistingID)
  204. assert.NotNil(t, err)
  205. assert.Nil(t, members)
  206. //get owners with invalid id
  207. owners, err := orgsAPI.GetOwnersWithID(ctx, invalidID)
  208. assert.NotNil(t, err)
  209. assert.Nil(t, owners)
  210. //get owners with not existing id
  211. owners, err = orgsAPI.GetOwnersWithID(ctx, notExistingID)
  212. assert.NotNil(t, err)
  213. assert.Nil(t, owners)
  214. // look for not existent
  215. orgs, err := orgsAPI.FindOrganizationsByUserID(ctx, notExistingID)
  216. assert.Nil(t, err)
  217. assert.NotNil(t, orgs)
  218. assert.Len(t, *orgs, 0)
  219. // look for not existent - bug returns current org: https://github.com/influxdata/influxdb/issues/19110
  220. //orgs, err = orgsAPI.FindOrganizationsByUserID(ctx, invalidID)
  221. //assert.NotNil(t, err)
  222. //assert.Nil(t, orgs)
  223. // add owner with invalid ID
  224. owner, err := orgsAPI.AddOwnerWithID(ctx, *org.Id, notExistingID)
  225. assert.NotNil(t, err)
  226. assert.Nil(t, owner)
  227. // update with not existing id
  228. org.Id = &notExistingID
  229. org, err = orgsAPI.UpdateOrganization(ctx, org)
  230. assert.NotNil(t, err)
  231. assert.Nil(t, org)
  232. // remove owner with invalid ID
  233. err = orgsAPI.RemoveOwnerWithID(ctx, notExistingID, notExistingID)
  234. assert.NotNil(t, err)
  235. // find invalid id
  236. org, err = orgsAPI.FindOrganizationByID(ctx, notExistingID)
  237. assert.NotNil(t, err)
  238. assert.Nil(t, org)
  239. // remove invalid memberID
  240. err = orgsAPI.RemoveMemberWithID(ctx, notExistingID, notExistingID)
  241. assert.NotNil(t, err)
  242. // delete not existent org
  243. err = orgsAPI.DeleteOrganizationWithID(ctx, notExistingID)
  244. assert.NotNil(t, err)
  245. // delete invalid org
  246. err = orgsAPI.DeleteOrganizationWithID(ctx, invalidID)
  247. assert.NotNil(t, err)
  248. }
  249. func TestOrganizationAPI_requestFailing(t *testing.T) {
  250. client := influxdb2.NewClient("serverURL", authToken)
  251. orgsAPI := client.OrganizationsAPI()
  252. ctx := context.Background()
  253. anID := "aaaaaaaaaaaaaaaa"
  254. invalidID := "aaaaaa"
  255. org := &domain.Organization{Id: &anID}
  256. _, err := orgsAPI.GetOrganizations(ctx)
  257. assert.NotNil(t, err)
  258. _, err = orgsAPI.FindOrganizationByName(ctx, "my-org")
  259. assert.NotNil(t, err)
  260. _, err = orgsAPI.FindOrganizationByID(ctx, anID)
  261. assert.NotNil(t, err)
  262. _, err = orgsAPI.FindOrganizationsByUserID(ctx, anID)
  263. assert.NotNil(t, err)
  264. _, err = orgsAPI.CreateOrganizationWithName(ctx, "name")
  265. assert.NotNil(t, err)
  266. err = orgsAPI.DeleteOrganizationWithID(ctx, anID)
  267. assert.NotNil(t, err)
  268. _, err = orgsAPI.UpdateOrganization(ctx, org)
  269. assert.NotNil(t, err)
  270. _, err = orgsAPI.GetMembersWithID(ctx, invalidID)
  271. assert.NotNil(t, err)
  272. _, err = orgsAPI.AddMemberWithID(ctx, *org.Id, anID)
  273. assert.NotNil(t, err)
  274. // remove invalid memberID
  275. err = orgsAPI.RemoveMemberWithID(ctx, anID, anID)
  276. assert.NotNil(t, err)
  277. _, err = orgsAPI.GetOwnersWithID(ctx, invalidID)
  278. assert.NotNil(t, err)
  279. _, err = orgsAPI.AddOwnerWithID(ctx, *org.Id, anID)
  280. assert.NotNil(t, err)
  281. // remove owner with invalid ID
  282. err = orgsAPI.RemoveOwnerWithID(ctx, anID, anID)
  283. assert.NotNil(t, err)
  284. _, err = orgsAPI.GetOwnersWithID(ctx, invalidID)
  285. assert.NotNil(t, err)
  286. }