gtoken_test.go 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227
  1. package gtoken_test
  2. import (
  3. "context"
  4. "dashoo.cn/micro_libary/gtoken"
  5. "github.com/gogf/gf/v2/frame/g"
  6. "testing"
  7. )
  8. func TestAuthPathGlobal(t *testing.T) {
  9. ctx := context.Background()
  10. t.Log("Global auth path test ")
  11. // 启动gtoken
  12. gfToken := &gtoken.GfToken{
  13. //Timeout: 10 * 1000,
  14. AuthPaths: g.SliceStr{"/user", "/system"}, // 这里是按照前缀拦截,拦截/user /user/list /user/add ...
  15. AuthExcludePaths: g.SliceStr{"/user/info", "/system/user/*"}, // 不拦截路径 /user/info,/system/user/info,/system/user,
  16. MiddlewareType: gtoken.MiddlewareTypeGlobal, // 开启全局拦截
  17. }
  18. authPath(gfToken, t)
  19. flag := gfToken.AuthPath(ctx, "/test")
  20. if flag {
  21. t.Error("error:", "/test auth path error")
  22. }
  23. }
  24. func TestBindAuthPath(t *testing.T) {
  25. t.Log("Bind auth path test ")
  26. // 启动gtoken
  27. gfToken := &gtoken.GfToken{
  28. //Timeout: 10 * 1000,
  29. AuthPaths: g.SliceStr{"/user", "/system"}, // 这里是按照前缀拦截,拦截/user /user/list /user/add ...
  30. AuthExcludePaths: g.SliceStr{"/user/info", "/system/user/*"}, // 不拦截路径 /user/info,/system/user/info,/system/user,
  31. MiddlewareType: gtoken.MiddlewareTypeBind, // 开启局部拦截
  32. }
  33. authPath(gfToken, t)
  34. }
  35. func TestGroupAuthPath(t *testing.T) {
  36. ctx := context.Background()
  37. t.Log("Group auth path test ")
  38. // 启动gtoken
  39. gfToken := &gtoken.GfToken{
  40. //Timeout: 10 * 1000,
  41. AuthExcludePaths: g.SliceStr{"/user/info", "/system/user/*"}, // 不拦截路径 /user/info,/system/user/info,/system/user,
  42. LoginPath: "/login", // 登录路径
  43. MiddlewareType: gtoken.MiddlewareTypeGroup, // 开启组拦截
  44. }
  45. flag := gfToken.AuthPath(ctx, "/login")
  46. if flag {
  47. t.Error("error:", "/login auth path error")
  48. }
  49. flag = gfToken.AuthPath(ctx, "/user/info")
  50. if flag {
  51. t.Error("error:", "/user/info auth path error")
  52. }
  53. flag = gfToken.AuthPath(ctx, "/system/user/info")
  54. if flag {
  55. t.Error("error:", "/system/user/info auth path error")
  56. }
  57. flag = gfToken.AuthPath(ctx, "/system/test")
  58. if !flag {
  59. t.Error("error:", "/system/test auth path error")
  60. }
  61. }
  62. func TestAuthPathNoExclude(t *testing.T) {
  63. ctx := context.Background()
  64. t.Log("auth no exclude path test ")
  65. // 启动gtoken
  66. gfToken := &gtoken.GfToken{
  67. //Timeout: 10 * 1000,
  68. AuthPaths: g.SliceStr{"/user", "/system"}, // 这里是按照前缀拦截,拦截/user /user/list /user/add ...
  69. MiddlewareType: gtoken.MiddlewareTypeGlobal, // 关闭全局拦截
  70. }
  71. authFlag := gfToken.AuthPath
  72. if authFlag(ctx, "/test") {
  73. t.Error(ctx, "error:", "/test auth path error")
  74. }
  75. if !authFlag(ctx, "/system/dept") {
  76. t.Error(ctx, "error:", "/system/dept auth path error")
  77. }
  78. if !authFlag(ctx, "/user/info") {
  79. t.Error(ctx, "error:", "/user/info auth path error")
  80. }
  81. if !authFlag(ctx, "/system/user") {
  82. t.Error(ctx, "error:", "/system/user auth path error")
  83. }
  84. }
  85. func TestAuthPathExclude(t *testing.T) {
  86. ctx := context.Background()
  87. t.Log("auth path test ")
  88. // 启动gtoken
  89. gfToken := &gtoken.GfToken{
  90. //Timeout: 10 * 1000,
  91. AuthPaths: g.SliceStr{"/*"}, // 这里是按照前缀拦截,拦截/user /user/list /user/add ...
  92. AuthExcludePaths: g.SliceStr{"/user/info", "/system/user/*"}, // 不拦截路径 /user/info,/system/user/info,/system/user,
  93. MiddlewareType: gtoken.MiddlewareTypeGlobal, // 开启全局拦截
  94. }
  95. authFlag := gfToken.AuthPath
  96. if !authFlag(ctx, "/test") {
  97. t.Error("error:", "/test auth path error")
  98. }
  99. if !authFlag(ctx, "//system/dept") {
  100. t.Error("error:", "/system/dept auth path error")
  101. }
  102. if authFlag(ctx, "/user/info") {
  103. t.Error("error:", "/user/info auth path error")
  104. }
  105. if authFlag(ctx, "/system/user") {
  106. t.Error("error:", "/system/user auth path error")
  107. }
  108. if authFlag(ctx, "/system/user/info") {
  109. t.Error("error:", "/system/user/info auth path error")
  110. }
  111. }
  112. func authPath(gfToken *gtoken.GfToken, t *testing.T) {
  113. ctx := context.Background()
  114. flag := gfToken.AuthPath(ctx, "/user/info")
  115. if flag {
  116. t.Error("error:", "/user/info auth path error")
  117. }
  118. flag = gfToken.AuthPath(ctx, "/system/user")
  119. if flag {
  120. t.Error("error:", "/system/user auth path error")
  121. }
  122. flag = gfToken.AuthPath(ctx, "/system/user/info")
  123. if flag {
  124. t.Error("error:", "/system/user/info auth path error")
  125. }
  126. flag = gfToken.AuthPath(ctx, "/system/dept")
  127. if !flag {
  128. t.Error("error:", "/system/dept auth path error")
  129. }
  130. flag = gfToken.AuthPath(ctx, "/user/list")
  131. if !flag {
  132. t.Error("error:", "/user/list auth path error")
  133. }
  134. flag = gfToken.AuthPath(ctx, "/user/add")
  135. if !flag {
  136. t.Error("error:", "/user/add auth path error")
  137. }
  138. }
  139. func TestEncryptDecryptToken(t *testing.T) {
  140. t.Log("encrypt and decrypt token test ")
  141. ctx := context.Background()
  142. gfToken := gtoken.GfToken{}
  143. gfToken.InitConfig()
  144. userKey := "123123"
  145. token := gfToken.EncryptToken(ctx, userKey, "")
  146. if !token.Success() {
  147. t.Error(token.Json())
  148. }
  149. t.Log(token.DataString())
  150. token2 := gfToken.DecryptToken(ctx, token.GetString("token"))
  151. if !token2.Success() {
  152. t.Error(token2.Json())
  153. }
  154. t.Log(token2.DataString())
  155. if userKey != token2.GetString("userKey") {
  156. t.Error("error:", "token decrypt userKey error")
  157. }
  158. if token.GetString("uuid") != token2.GetString("uuid") {
  159. t.Error("error:", "token decrypt uuid error")
  160. }
  161. }
  162. func BenchmarkEncryptDecryptToken(b *testing.B) {
  163. b.Log("encrypt and decrypt token test ")
  164. ctx := context.Background()
  165. gfToken := gtoken.GfToken{}
  166. gfToken.InitConfig()
  167. userKey := "123123"
  168. token := gfToken.EncryptToken(ctx, userKey, "")
  169. if !token.Success() {
  170. b.Error(token.Json())
  171. }
  172. b.Log(token.DataString())
  173. for i := 0; i < b.N; i++ {
  174. token2 := gfToken.DecryptToken(ctx, token.GetString("token"))
  175. if !token2.Success() {
  176. b.Error(token2.Json())
  177. }
  178. b.Log(token2.DataString())
  179. if userKey != token2.GetString("userKey") {
  180. b.Error("error:", "token decrypt userKey error")
  181. }
  182. if token.GetString("uuid") != token2.GetString("uuid") {
  183. b.Error("error:", "token decrypt uuid error")
  184. }
  185. }
  186. }