api_test.go 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328
  1. package test
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "github.com/goflyfox/gtoken/example/sample/test/server"
  6. "github.com/goflyfox/gtoken/gtoken"
  7. "github.com/gogf/gf/frame/g"
  8. "github.com/gogf/gf/net/ghttp"
  9. "os"
  10. "testing"
  11. )
  12. const (
  13. TestURL string = "http://127.0.0.1:8081"
  14. )
  15. var (
  16. Token = g.MapStrStr{}
  17. Username = "flyFox"
  18. )
  19. func setup() {
  20. fmt.Println("start...")
  21. server.Start()
  22. }
  23. func teardown() {
  24. server.Stop()
  25. fmt.Println("stop.")
  26. }
  27. func TestMain(m *testing.M) {
  28. setup()
  29. code := m.Run()
  30. teardown()
  31. os.Exit(code)
  32. }
  33. func TestHello(t *testing.T) {
  34. t.Log("visit hello and no auth")
  35. if r, e := g.Client().Post(TestURL+"/hello", "username="+Username); e != nil {
  36. t.Error("error:", e)
  37. } else {
  38. defer r.Close()
  39. content := string(r.ReadAll())
  40. t.Log(content)
  41. var respData gtoken.Resp
  42. err := json.Unmarshal([]byte(content), &respData)
  43. if err != nil {
  44. t.Error("error:", err)
  45. }
  46. if !respData.Success() {
  47. t.Error("error:", respData.Json())
  48. }
  49. }
  50. }
  51. func TestSystemUser(t *testing.T) {
  52. // 未登录
  53. t.Log("1. not login and visit user")
  54. if r, e := g.Client().Post(TestURL+"/system/user", "username="+Username); e != nil {
  55. t.Error("error:", e)
  56. } else {
  57. defer r.Close()
  58. content := string(r.ReadAll())
  59. t.Log(content)
  60. var respData gtoken.Resp
  61. err := json.Unmarshal([]byte(content), &respData)
  62. if err != nil {
  63. t.Error("error:", err)
  64. }
  65. if respData.Success() {
  66. t.Error("error:", respData.Json())
  67. }
  68. }
  69. // 登录,访问用户信息
  70. t.Log("2. execute login and visit user")
  71. data := Post(t, "/system/user")
  72. if data.Success() {
  73. t.Log(data.Json())
  74. } else {
  75. t.Error("error:", data.Json())
  76. }
  77. // 登录,获取用户信息
  78. t.Log("2. execute get user data")
  79. data = Post(t, "/user/data")
  80. if data.Success() {
  81. t.Log(data.Json())
  82. } else {
  83. t.Error("error:", data.Json())
  84. }
  85. // 登出
  86. t.Log("3. execute logout")
  87. data = Post(t, "/user/logout")
  88. if data.Success() {
  89. t.Log(data.Json())
  90. } else {
  91. t.Error("error:", data.Json())
  92. }
  93. // 登出访问用户信息
  94. t.Log("4. visit user")
  95. data = Post(t, "/system/user", "username="+Username)
  96. if data.Success() {
  97. t.Error("error:", data.Json())
  98. } else {
  99. t.Log(data.Json())
  100. }
  101. delete(Token, Username)
  102. }
  103. func TestUserLoginFail(t *testing.T) {
  104. // 登录失败
  105. t.Log("1. login fail ")
  106. if r, e := g.Client().Post(TestURL+"/login", "username=&passwd="); e != nil {
  107. t.Error("error:", e)
  108. } else {
  109. defer r.Close()
  110. content := string(r.ReadAll())
  111. var respData gtoken.Resp
  112. err := json.Unmarshal([]byte(content), &respData)
  113. if err != nil {
  114. t.Error("error:", err)
  115. }
  116. if respData.Success() {
  117. t.Error("error:", "login fail:"+respData.Json())
  118. }
  119. }
  120. }
  121. func TestExclude(t *testing.T) {
  122. // 未登录可以访问
  123. t.Log("1. exclude user info")
  124. if r, e := g.Client().Post(TestURL+"/system/user/info", "username="+Username); e != nil {
  125. t.Error("error:", e)
  126. } else {
  127. defer r.Close()
  128. content := string(r.ReadAll())
  129. t.Log(content)
  130. var respData gtoken.Resp
  131. err := json.Unmarshal([]byte(content), &respData)
  132. if err != nil {
  133. t.Error("error:", err)
  134. }
  135. if !respData.Success() {
  136. t.Error("error:", respData.Json())
  137. }
  138. }
  139. if r, e := g.Client().Post(TestURL+"/user/info", "username="+Username); e != nil {
  140. t.Error("error:", e)
  141. } else {
  142. defer r.Close()
  143. content := string(r.ReadAll())
  144. t.Log(content)
  145. var respData gtoken.Resp
  146. err := json.Unmarshal([]byte(content), &respData)
  147. if err != nil {
  148. t.Error("error:", err)
  149. }
  150. if !respData.Success() {
  151. t.Error("error:", respData.Json())
  152. }
  153. }
  154. }
  155. //func TestRefresh(t *testing.T) {
  156. // // 登录,访问用户信息
  157. // t.Log("1. execute login and visit user")
  158. // data := Post(t, "/system/user", "username="+Username)
  159. // if data.Success() {
  160. // t.Log(data.Json())
  161. // } else {
  162. // t.Error("error:", data.Json())
  163. // }
  164. //
  165. // for i := 1; i < 9; i++ {
  166. // time.Sleep(2 * time.Second)
  167. // // 登录,访问用户信息
  168. // t.Log("1. execute login and visit user")
  169. // data = Post(t, "/system/user", "username="+Username)
  170. // if data.Success() {
  171. // t.Log(data.Json())
  172. // } else {
  173. // t.Error("error:", data.Json())
  174. // }
  175. // }
  176. //
  177. //}
  178. func TestLogin(t *testing.T) {
  179. t.Log(" login first ")
  180. token1 := getToken(t)
  181. t.Log("token:" + token1)
  182. t.Log(" login second and same token ")
  183. token2 := getToken(t)
  184. t.Log("token:" + token2)
  185. if token1 != token2 {
  186. t.Error("error:", "token not same ")
  187. }
  188. delete(Token, Username)
  189. }
  190. func TestLogout(t *testing.T) {
  191. t.Log(" logout test ")
  192. data := Post(t, "/user/logout", "username="+Username)
  193. if data.Success() {
  194. t.Log(data.Json())
  195. } else {
  196. t.Error("error:", data.Json())
  197. }
  198. delete(Token, Username)
  199. }
  200. func TestMultiLogin(t *testing.T) {
  201. t.Log(" TestMultiLogin start... ")
  202. var token1, token2 string
  203. if r, e := g.Client().Post(TestURL+"/login", "username="+Username+"&passwd=123456"); e != nil {
  204. t.Error("error:", e)
  205. } else {
  206. defer r.Close()
  207. content := string(r.ReadAll())
  208. t.Log("token1 content:" + content)
  209. var respData gtoken.Resp
  210. err := json.Unmarshal([]byte(content), &respData)
  211. if err != nil {
  212. t.Error("error:", err)
  213. }
  214. if !respData.Success() {
  215. t.Error("error:", "resp fail:"+respData.Json())
  216. }
  217. token1 = respData.GetString("token")
  218. }
  219. t.Log("token1:" + token1)
  220. if r, e := g.Client().Post(TestURL+"/login", "username="+Username+"&passwd=123456"); e != nil {
  221. t.Error("error:", e)
  222. } else {
  223. defer r.Close()
  224. content := string(r.ReadAll())
  225. t.Log("token2 content:" + content)
  226. var respData gtoken.Resp
  227. err := json.Unmarshal([]byte(content), &respData)
  228. if err != nil {
  229. t.Error("error:", err)
  230. }
  231. if !respData.Success() {
  232. t.Error("error:", "resp fail:"+respData.Json())
  233. }
  234. token2 = respData.GetString("token")
  235. }
  236. t.Log("token2:" + token2)
  237. if g.Config().GetBool("gToken.MultiLogin") {
  238. if token1 != token2 {
  239. t.Error("error:", "token not same ")
  240. }
  241. } else {
  242. if token1 == token2 {
  243. t.Error("error:", "token same ")
  244. }
  245. }
  246. }
  247. func Post(t *testing.T, urlPath string, data ...interface{}) gtoken.Resp {
  248. client := ghttp.NewClient()
  249. client.SetHeader("Authorization", "Bearer "+getToken(t))
  250. content := client.RequestContent("POST", TestURL+urlPath, data...)
  251. var respData gtoken.Resp
  252. err := json.Unmarshal([]byte(content), &respData)
  253. if err != nil {
  254. t.Error("error:", err)
  255. }
  256. return respData
  257. }
  258. func getToken(t *testing.T) string {
  259. if Token[Username] != "" {
  260. return Token[Username]
  261. }
  262. if r, e := g.Client().Post(TestURL+"/login", "username="+Username+"&passwd=123456"); e != nil {
  263. t.Error("error:", e)
  264. } else {
  265. defer r.Close()
  266. content := string(r.ReadAll())
  267. var respData gtoken.Resp
  268. err := json.Unmarshal([]byte(content), &respData)
  269. if err != nil {
  270. t.Error("error:", err)
  271. }
  272. if !respData.Success() {
  273. t.Error("error:", "resp fail:"+respData.Json())
  274. }
  275. Token[Username] = respData.GetString("token")
  276. }
  277. return Token[Username]
  278. }