session_test.go 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237
  1. package session
  2. import (
  3. "testing"
  4. "ddpf/model/dbm"
  5. "time"
  6. "github.com/tangs-drm/go-tool/log"
  7. "fmt"
  8. "github.com/tangs-drm/go-tool/util"
  9. "github.com/tangs-drm/go-tool/http"
  10. ghttp "net/http"
  11. "io/ioutil"
  12. "ddpf/test"
  13. )
  14. func init() {
  15. test.SqlConf = "../../../ddpf.sql"
  16. test.Init()
  17. }
  18. // TestSession 对session的单元测试
  19. func TestSession(t *testing.T) {
  20. log.Debug("TestSession --- START")
  21. fmt.Println(time.Now().Unix())
  22. fmt.Println(time.Now().UnixNano())
  23. fmt.Println(util.Now())
  24. fmt.Println(util.Now10())
  25. fmt.Println(util.Now13())
  26. var uid string = "u100"
  27. session, err := CreateSession(uid)
  28. if err != nil {
  29. t.Error(err)
  30. return
  31. }
  32. if len(session.Id) < 1 || session.Uid != uid {
  33. t.Error(session.Id, session.Uid)
  34. return
  35. }
  36. if session.Time > 10000000001 || session.LastTime > 10000000001 {
  37. t.Error(session.Time, session.LastTime)
  38. return
  39. }
  40. Valid_Session_Time = 5
  41. valid, err := CheckValidSession(session.Id)
  42. if err != nil {
  43. t.Error(err)
  44. return
  45. }
  46. if !valid {
  47. t.Error(valid)
  48. return
  49. }
  50. time.Sleep(10*time.Second)
  51. valid, err = CheckValidSession(session.Id)
  52. if err != nil {
  53. t.Error(err)
  54. return
  55. }
  56. if valid {
  57. t.Error(valid)
  58. return
  59. }
  60. // flushSession
  61. FlushSession(session.Id)
  62. valid, err = CheckValidSession(session.Id)
  63. if err != nil {
  64. t.Error(err)
  65. return
  66. }
  67. if !valid {
  68. t.Error(valid)
  69. return
  70. }
  71. log.Debug("TestSession --- END")
  72. }
  73. func HaloHandleFunc(w ghttp.ResponseWriter, r *ghttp.Request) {
  74. fmt.Println("HaloHandleFunc come in")
  75. w.Write([]byte("halo"))
  76. return
  77. }
  78. func RootHandleFunc(w ghttp.ResponseWriter, r *ghttp.Request) {
  79. fmt.Println("RootHandleFunc come in")
  80. w.Write([]byte("root"))
  81. }
  82. func TestUserFilter(t *testing.T) {
  83. var times int = 10
  84. for i := 0; i < times; i ++ {
  85. testUserFilter(t, i)
  86. }
  87. log.Debug("TestUserFilter 测试完毕")
  88. }
  89. func testUserFilter(t *testing.T, times int) {
  90. log.Debug("testUserFiler times(%v) --- START", times)
  91. SessionLog = true
  92. mux := http.NewServerMux()
  93. mux.HandleFunc("/", RootHandleFunc)
  94. mux.FilterFunc("/usr", UserFilterFunc)
  95. //mux.HandleFunc("/login", RootHandleFunc)
  96. mux.HandleFunc("/usr/halo", HaloHandleFunc)
  97. go func() {
  98. log.Error("%v", ghttp.ListenAndServe(":8023", mux))
  99. }()
  100. //time.Sleep(2 * time.Second)
  101. resString, err := util.HTTPGetString("http://127.0.0.1:8023/usr/halo")
  102. if err != nil {
  103. t.Error(err)
  104. return
  105. }
  106. fmt.Println(resString)
  107. // 设置session
  108. session, err := CreateSession("u101")
  109. if err != nil {
  110. t.Error(err)
  111. return
  112. }
  113. // 带上cookie的请求
  114. req, err := ghttp.NewRequest("GET", "http://127.0.0.1:8023/usr/halo", nil)
  115. if err != nil {
  116. t.Error(err)
  117. return
  118. }
  119. cookie := &ghttp.Cookie{
  120. Domain:"/",
  121. Name:"token",
  122. Value:session.Id,
  123. }
  124. req.AddCookie(cookie)
  125. client := ghttp.Client{}
  126. resp, err := client.Do(req)
  127. if err != nil {
  128. t.Error(err)
  129. return
  130. }
  131. bys, err := ioutil.ReadAll(resp.Body)
  132. if err != nil {
  133. t.Error(err)
  134. return
  135. }
  136. if string(bys) != "halo" {
  137. t.Error(string(bys))
  138. return
  139. }
  140. // 错误的cookie请求,被重定向到/
  141. req, err = ghttp.NewRequest("GET", "http://127.0.0.1:8023/usr/halo", nil)
  142. if err != nil {
  143. t.Error(err)
  144. return
  145. }
  146. cookie = &ghttp.Cookie{
  147. Domain:"/",
  148. Name:"token",
  149. Value:util.UUID(),
  150. }
  151. req.AddCookie(cookie)
  152. client = ghttp.Client{}
  153. resp, err = client.Do(req)
  154. if err != nil {
  155. t.Error(err)
  156. return
  157. }
  158. bys, err = ioutil.ReadAll(resp.Body)
  159. if err != nil {
  160. t.Error(err)
  161. return
  162. }
  163. if string(bys) != "root" {
  164. t.Error(string(bys))
  165. return
  166. }
  167. // 查看sessiond的时间更新
  168. now := util.Now10()
  169. req, err = ghttp.NewRequest("GET", "http://127.0.0.1:8023/usr/halo", nil)
  170. if err != nil {
  171. t.Error(err)
  172. return
  173. }
  174. cookie = &ghttp.Cookie{
  175. Domain:"/",
  176. Name:"token",
  177. Value:session.Id,
  178. }
  179. req.AddCookie(cookie)
  180. client = ghttp.Client{}
  181. resp, err = client.Do(req)
  182. if err != nil {
  183. t.Error(err)
  184. return
  185. }
  186. bys, err = ioutil.ReadAll(resp.Body)
  187. if err != nil {
  188. t.Error(err)
  189. return
  190. }
  191. if string(bys) != "halo" {
  192. t.Error(string(bys))
  193. return
  194. }
  195. // check session
  196. rows, err := dbm.Db().Query("SELECT LASTTIME FROM SESSION WHERE ID = ? ORDER BY LASTTIME DESC;", session.Id)
  197. if err != nil {
  198. t.Error(err)
  199. return
  200. }
  201. var sessionNow int64
  202. for rows.Next() {
  203. err = rows.Scan(&sessionNow)
  204. if err != nil {
  205. t.Error(err)
  206. return
  207. }
  208. break
  209. }
  210. log.Debug("TestUserFilter get lastTime (%v), now (%v)", sessionNow, now)
  211. if sessionNow < now {
  212. t.Error(sessionNow)
  213. return
  214. }
  215. log.Debug("testUserFilter times(%v) --- END", times)
  216. }