api_admin_test.go 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259
  1. package test
  2. import (
  3. "context"
  4. "encoding/json"
  5. "github.com/goflyfox/gtoken/gtoken"
  6. "github.com/gogf/gf/v2/frame/g"
  7. "testing"
  8. )
  9. const (
  10. TestAdminURL string = "http://127.0.0.1:8081/admin"
  11. )
  12. var (
  13. TokenAdmin = g.MapStrStr{}
  14. AdminUsername = "adminFlyFox"
  15. )
  16. func TestAdminSystemUser(t *testing.T) {
  17. // 未登录
  18. t.Log("1. not login and visit user")
  19. if r, e := g.Client().Post(context.TODO(), TestAdminURL+"/system/user", "username="+AdminUsername); e != nil {
  20. t.Error("error:", e)
  21. } else {
  22. defer r.Close()
  23. content := string(r.ReadAll())
  24. t.Log(content)
  25. var respData gtoken.Resp
  26. err := json.Unmarshal([]byte(content), &respData)
  27. if err != nil {
  28. t.Error("error:", err)
  29. }
  30. if respData.Success() {
  31. t.Error("error:", respData.Json())
  32. }
  33. }
  34. // 登录,访问用户信息
  35. t.Log("2. execute login and visit user")
  36. data := PostAdmin(t, "/system/user", "username="+AdminUsername)
  37. if data.Success() {
  38. t.Log(data.Json())
  39. } else {
  40. t.Error("error:", data.Json())
  41. }
  42. // 登出
  43. t.Log("3. execute logout")
  44. data = PostAdmin(t, "/user/logout", "username="+AdminUsername)
  45. if data.Success() {
  46. t.Log(data.Json())
  47. } else {
  48. t.Error("error:", data.Json())
  49. }
  50. // 登出访问用户信息
  51. t.Log("4. visit user")
  52. data = PostAdmin(t, "/system/user", "username="+AdminUsername)
  53. if data.Success() {
  54. t.Error("error:", data.Json())
  55. } else {
  56. t.Log(data.Json())
  57. }
  58. delete(TokenAdmin, AdminUsername)
  59. }
  60. func TestAdminUserLoginFail(t *testing.T) {
  61. // 登录失败
  62. t.Log("1. login fail ")
  63. if r, e := g.Client().Post(context.TODO(), TestAdminURL+"/login", "username=&passwd="); e != nil {
  64. t.Error("error:", e)
  65. } else {
  66. defer r.Close()
  67. content := string(r.ReadAll())
  68. var respData gtoken.Resp
  69. err := json.Unmarshal([]byte(content), &respData)
  70. if err != nil {
  71. t.Error("error:", err)
  72. }
  73. if respData.Success() {
  74. t.Error("error:", "login fail:"+respData.Json())
  75. }
  76. }
  77. }
  78. func TestAdminExclude(t *testing.T) {
  79. // 未登录可以访问
  80. t.Log("1. exclude user info")
  81. if r, e := g.Client().Post(context.TODO(), TestAdminURL+"/system/user/info", "username="+AdminUsername); e != nil {
  82. t.Error("error:", e)
  83. } else {
  84. defer r.Close()
  85. content := string(r.ReadAll())
  86. t.Log(content)
  87. var respData gtoken.Resp
  88. err := json.Unmarshal([]byte(content), &respData)
  89. if err != nil {
  90. t.Error("error:", err)
  91. }
  92. if !respData.Success() {
  93. t.Error("error:", respData.Json())
  94. }
  95. }
  96. if r, e := g.Client().Post(context.TODO(), TestAdminURL+"/user/info", "username="+AdminUsername); e != nil {
  97. t.Error("error:", e)
  98. } else {
  99. defer r.Close()
  100. content := string(r.ReadAll())
  101. t.Log(content)
  102. var respData gtoken.Resp
  103. err := json.Unmarshal([]byte(content), &respData)
  104. if err != nil {
  105. t.Error("error:", err)
  106. }
  107. if !respData.Success() {
  108. t.Error("error:", respData.Json())
  109. }
  110. }
  111. }
  112. func TestAdminLogin(t *testing.T) {
  113. t.Log(" login first ")
  114. token1 := getAdminToken(t)
  115. t.Log("token:" + token1)
  116. t.Log(" login second and same token ")
  117. token2 := getAdminToken(t)
  118. t.Log("token:" + token2)
  119. if token1 != token2 {
  120. t.Error("error:", "token not same ")
  121. }
  122. delete(TokenAdmin, AdminUsername)
  123. }
  124. func TestAdminLogout(t *testing.T) {
  125. t.Log(" logout test ")
  126. data := PostAdmin(t, "/user/logout", "username="+AdminUsername)
  127. if data.Success() {
  128. t.Log(data.Json())
  129. } else {
  130. t.Error("error:", data.Json())
  131. }
  132. delete(TokenAdmin, AdminUsername)
  133. }
  134. func TestAdminMultiLogin(t *testing.T) {
  135. t.Log(" TestMultiLogin start... ")
  136. var token1, token2 string
  137. if r, e := g.Client().Post(context.TODO(), TestAdminURL+"/login", "username="+AdminUsername+"&passwd=123456"); e != nil {
  138. t.Error("error:", e)
  139. } else {
  140. defer r.Close()
  141. content := string(r.ReadAll())
  142. t.Log("token1 content:" + content)
  143. var respData gtoken.Resp
  144. err := json.Unmarshal([]byte(content), &respData)
  145. if err != nil {
  146. t.Error("error:", err)
  147. }
  148. if !respData.Success() {
  149. t.Error("error:", "resp fail:"+respData.Json())
  150. }
  151. token1 = respData.GetString("token")
  152. }
  153. t.Log("token1:" + token1)
  154. if r, e := g.Client().Post(context.TODO(), TestAdminURL+"/login", "username="+AdminUsername+"&passwd=123456"); e != nil {
  155. t.Error("error:", e)
  156. } else {
  157. defer r.Close()
  158. content := string(r.ReadAll())
  159. t.Log("token2 content:" + content)
  160. var respData gtoken.Resp
  161. err := json.Unmarshal([]byte(content), &respData)
  162. if err != nil {
  163. t.Error("error:", err)
  164. }
  165. if !respData.Success() {
  166. t.Error("error:", "resp fail:"+respData.Json())
  167. }
  168. token2 = respData.GetString("token")
  169. }
  170. t.Log("token2:" + token2)
  171. gVar, err := g.Cfg().Get(context.TODO(), "gToken.MultiLogin")
  172. if err != nil {
  173. t.Error("error:", err)
  174. }
  175. if gVar.Bool() {
  176. if token1 != token2 {
  177. t.Error("error:", "token not same ")
  178. }
  179. } else {
  180. if token1 == token2 {
  181. t.Error("error:", "token same ")
  182. }
  183. }
  184. delete(TokenAdmin, AdminUsername)
  185. }
  186. func PostAdmin(t *testing.T, urlPath string, data ...interface{}) gtoken.Resp {
  187. client := g.Client()
  188. client.SetHeader("Authorization", "Bearer "+getAdminToken(t))
  189. content := client.RequestContent(context.TODO(), "POST", TestAdminURL+urlPath, data...)
  190. var respData gtoken.Resp
  191. err := json.Unmarshal([]byte(content), &respData)
  192. if err != nil {
  193. t.Error("error:", err)
  194. }
  195. return respData
  196. }
  197. func getAdminToken(t *testing.T) string {
  198. if TokenAdmin[AdminUsername] != "" {
  199. return TokenAdmin[AdminUsername]
  200. }
  201. if r, e := g.Client().Post(context.TODO(), TestAdminURL+"/login", "username="+AdminUsername+"&passwd=123456"); e != nil {
  202. t.Error("error:", e)
  203. } else {
  204. defer r.Close()
  205. content := string(r.ReadAll())
  206. var respData gtoken.Resp
  207. err := json.Unmarshal([]byte(content), &respData)
  208. if err != nil {
  209. t.Error("error:", err)
  210. }
  211. if !respData.Success() {
  212. t.Error("error:", "resp fail:"+respData.Json())
  213. }
  214. TokenAdmin[AdminUsername] = respData.GetString("token")
  215. }
  216. return TokenAdmin[AdminUsername]
  217. }