api_test.go 6.8 KB

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