users_e2e_test.go 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227
  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. "testing"
  9. influxdb2 "github.com/influxdata/influxdb-client-go/v2"
  10. "github.com/influxdata/influxdb-client-go/v2/domain"
  11. "github.com/stretchr/testify/assert"
  12. "github.com/stretchr/testify/require"
  13. )
  14. func TestUsersAPI(t *testing.T) {
  15. client := influxdb2.NewClient(serverURL, authToken)
  16. usersAPI := client.UsersAPI()
  17. ctx := context.Background()
  18. me, err := usersAPI.Me(ctx)
  19. require.Nil(t, err)
  20. require.NotNil(t, me)
  21. users, err := usersAPI.GetUsers(ctx)
  22. require.Nil(t, err)
  23. require.NotNil(t, users)
  24. assert.Len(t, *users, 1)
  25. user, err := usersAPI.CreateUserWithName(ctx, "user-01")
  26. require.Nil(t, err)
  27. require.NotNil(t, user)
  28. // create duplicate user
  29. user2, err := usersAPI.CreateUserWithName(ctx, "user-01")
  30. assert.NotNil(t, err)
  31. assert.Nil(t, user2)
  32. users, err = usersAPI.GetUsers(ctx)
  33. require.Nil(t, err)
  34. require.NotNil(t, users)
  35. assert.Len(t, *users, 2)
  36. status := domain.UserStatusInactive
  37. user.Status = &status
  38. user, err = usersAPI.UpdateUser(ctx, user)
  39. require.Nil(t, err)
  40. require.NotNil(t, user)
  41. assert.Equal(t, status, *user.Status)
  42. user2 = &domain.User{
  43. Id: user.Id,
  44. Name: "my-user",
  45. }
  46. //update username to existing user
  47. user2, err = usersAPI.UpdateUser(ctx, user2)
  48. assert.NotNil(t, err)
  49. assert.Nil(t, user2)
  50. user, err = usersAPI.FindUserByID(ctx, *user.Id)
  51. require.Nil(t, err)
  52. require.NotNil(t, user)
  53. err = usersAPI.UpdateUserPassword(ctx, user, "my-password")
  54. require.Nil(t, err)
  55. err = usersAPI.DeleteUser(ctx, user)
  56. require.Nil(t, err)
  57. users, err = usersAPI.GetUsers(ctx)
  58. require.Nil(t, err)
  59. require.NotNil(t, users)
  60. assert.Len(t, *users, 1)
  61. // it fails, https://github.com/influxdata/influxdb/pull/15981
  62. //err = usersAPI.MeUpdatePassword(ctx, "my-password", "my-new-password")
  63. //assert.Nil(t, err)
  64. //err = usersAPI.MeUpdatePassword(ctx, "my-new-password", "my-password")
  65. //assert.Nil(t, err)
  66. }
  67. func TestUsersAPI_failing(t *testing.T) {
  68. client := influxdb2.NewClient(serverURL, authToken)
  69. usersAPI := client.UsersAPI()
  70. ctx := context.Background()
  71. invalidID := "aaaaaa"
  72. user, err := usersAPI.FindUserByID(ctx, invalidID)
  73. assert.NotNil(t, err)
  74. assert.Nil(t, user)
  75. user, err = usersAPI.FindUserByName(ctx, "not-existing-name")
  76. assert.NotNil(t, err)
  77. assert.Nil(t, user)
  78. err = usersAPI.DeleteUserWithID(ctx, invalidID)
  79. assert.NotNil(t, err)
  80. err = usersAPI.UpdateUserPasswordWithID(ctx, invalidID, "pass")
  81. assert.NotNil(t, err)
  82. }
  83. func TestUsersAPI_requestFailing(t *testing.T) {
  84. client := influxdb2.NewClient("serverURL", authToken)
  85. usersAPI := client.UsersAPI()
  86. ctx := context.Background()
  87. invalidID := "aaaaaa"
  88. user := &domain.User{
  89. Id: &invalidID,
  90. }
  91. _, err := usersAPI.GetUsers(ctx)
  92. assert.NotNil(t, err)
  93. _, err = usersAPI.FindUserByID(ctx, invalidID)
  94. assert.NotNil(t, err)
  95. _, err = usersAPI.FindUserByName(ctx, "not-existing-name")
  96. assert.NotNil(t, err)
  97. _, err = usersAPI.CreateUserWithName(ctx, "not-existing-name")
  98. assert.NotNil(t, err)
  99. _, err = usersAPI.UpdateUser(ctx, user)
  100. assert.NotNil(t, err)
  101. err = usersAPI.UpdateUserPasswordWithID(ctx, invalidID, "pass")
  102. assert.NotNil(t, err)
  103. err = usersAPI.DeleteUserWithID(ctx, invalidID)
  104. assert.NotNil(t, err)
  105. _, err = usersAPI.Me(ctx)
  106. assert.NotNil(t, err)
  107. err = usersAPI.MeUpdatePassword(ctx, "my-password", "my-new-password")
  108. assert.NotNil(t, err)
  109. err = usersAPI.SignIn(ctx, "user", "my-password")
  110. assert.NotNil(t, err)
  111. err = usersAPI.SignOut(ctx)
  112. assert.NotNil(t, err)
  113. }
  114. func TestSignInOut(t *testing.T) {
  115. ctx := context.Background()
  116. client := influxdb2.NewClient("http://localhost:8086", "")
  117. usersAPI := client.UsersAPI()
  118. err := usersAPI.SignIn(ctx, "my-user", "my-password")
  119. require.Nil(t, err)
  120. // try authorized calls
  121. orgs, err := client.OrganizationsAPI().GetOrganizations(ctx)
  122. assert.Nil(t, err)
  123. assert.NotNil(t, orgs)
  124. // try authorized calls
  125. buckets, err := client.BucketsAPI().GetBuckets(ctx)
  126. assert.Nil(t, err)
  127. assert.NotNil(t, buckets)
  128. // try authorized calls
  129. err = client.WriteAPIBlocking("my-org", "my-bucket").WriteRecord(ctx, "test,a=rock,b=local f=1.2,i=-5i")
  130. assert.NoError(t, err)
  131. res, err := client.QueryAPI("my-org").QueryRaw(context.Background(), `from(bucket:"my-bucket")|> range(start: -24h) |> filter(fn: (r) => r._measurement == "test")`, influxdb2.DefaultDialect())
  132. assert.Nil(t, err)
  133. assert.NotNil(t, res)
  134. err = usersAPI.SignOut(ctx)
  135. assert.Nil(t, err)
  136. // unauthorized signout
  137. err = usersAPI.SignOut(ctx)
  138. assert.NotNil(t, err)
  139. // Unauthorized call
  140. _, err = client.OrganizationsAPI().GetOrganizations(ctx)
  141. assert.NotNil(t, err)
  142. // test wrong credentials
  143. err = usersAPI.SignIn(ctx, "my-user", "password")
  144. assert.NotNil(t, err)
  145. client.HTTPService().SetAuthorization("Token my-token")
  146. user, err := usersAPI.CreateUserWithName(ctx, "user-01")
  147. require.Nil(t, err)
  148. require.NotNil(t, user)
  149. // 2nd client to use for new user auth
  150. client2 := influxdb2.NewClient("http://localhost:8086", "")
  151. err = usersAPI.UpdateUserPassword(ctx, user, "123password")
  152. assert.Nil(t, err)
  153. err = client2.UsersAPI().SignIn(ctx, "user-01", "123password")
  154. assert.Nil(t, err)
  155. err = client2.UsersAPI().SignOut(ctx)
  156. assert.Nil(t, err)
  157. status := domain.UserStatusInactive
  158. user.Status = &status
  159. u, err := usersAPI.UpdateUser(ctx, user)
  160. assert.Nil(t, err)
  161. assert.NotNil(t, u)
  162. // log in inactive user,
  163. //err = client2.SignIn(ctx, "user-01", "123password")
  164. //assert.NotNil(t, err)
  165. err = usersAPI.DeleteUser(ctx, user)
  166. assert.Nil(t, err)
  167. client.Close()
  168. client2.Close()
  169. }