Explorar o código

解决路由选择的bug,添加测试

tangs %!s(int64=7) %!d(string=hai) anos
pai
achega
ba2acb665b

+ 12 - 3
src/ddpf/model/session/session.go

@@ -45,7 +45,7 @@ var UserFilterFunc thttp.FilterFunc = func(w http.ResponseWriter, r *http.Reques
 	}
 
 	if !valid {
-		slog("[UserFilterFunc] check token(%v) is invalid(%v)", token)
+		slog("[UserFilterFunc] check token(%v) is invalid", token)
 		http.Redirect(w, r, "/", 301)
 		return thttp.REQUEST_RETURN
 	}
@@ -59,8 +59,15 @@ var UserFilterFunc thttp.FilterFunc = func(w http.ResponseWriter, r *http.Reques
 	return thttp.REQUEST_CONTINUE
 }
 
-// CreateSession create user session
-// 没有uid最多同时5个地方登陆
+/*
+arg
+	uid: 用户id
+desc
+	CreateSession 创建用户对应的session值
+ret
+	0:包含了用户信息的session对象
+	1:创建session的错误信息,非nil表示有错误
+*/
 func CreateSession(uid string) (*Session, error) {
 	session := &Session{
 		Id:util.UUID(),
@@ -123,6 +130,8 @@ func CheckValidSession(session string) (bool, error) {
 }
 
 // FlushToken更新session对应的最后一个登录时间
+// session 用户对用的sessionID
+// 返回值:非nil表示有错误
 func FlushSession(session string) error {
 	var sqlString = "UPDATE SESSION SET LASTTIME = ? WHERE ID = ?;"
 	stmt, err := dbm.Db().Prepare(sqlString)

+ 63 - 2
src/ddpf/model/session/session_test.go

@@ -109,10 +109,20 @@ func RootHandleFunc(w ghttp.ResponseWriter, r *ghttp.Request) {
 }
 
 func TestUserFilter(t *testing.T) {
+	var times int = 10
+	for i := 0; i < times; i ++ {
+		testUserFilter(t, i)
+	}
+	log.Debug("TestUserFilter 测试完毕")
+}
+
+func testUserFilter(t *testing.T, times int) {
+	log.Debug("testUserFiler times(%v) --- START", times)
 	SessionLog = true
 	mux := http.NewServerMux()
+	mux.HandleFunc("/", RootHandleFunc)
 	mux.FilterFunc("/usr", UserFilterFunc)
-	mux.HandleFunc("/login", RootHandleFunc)
+	//mux.HandleFunc("/login", RootHandleFunc)
 	mux.HandleFunc("/usr/halo", HaloHandleFunc)
 
 	go func() {
@@ -163,7 +173,7 @@ func TestUserFilter(t *testing.T) {
 		return
 	}
 
-	//
+	// 错误的cookie请求,被重定向到/
 	req, err = ghttp.NewRequest("GET", "http://127.0.0.1:8023/usr/halo", nil)
 	if err != nil {
 		t.Error(err)
@@ -190,4 +200,55 @@ func TestUserFilter(t *testing.T) {
 		t.Error(string(bys))
 		return
 	}
+
+	// 查看sessiond的时间更新
+	now := util.Now10()
+	req, err = ghttp.NewRequest("GET", "http://127.0.0.1:8023/usr/halo", nil)
+	if err != nil {
+		t.Error(err)
+		return
+	}
+	cookie = &ghttp.Cookie{
+		Domain:"/",
+		Name:"token",
+		Value:session.Id,
+	}
+	req.AddCookie(cookie)
+	client = ghttp.Client{}
+	resp, err = client.Do(req)
+	if err != nil {
+		t.Error(err)
+		return
+	}
+	bys, err = ioutil.ReadAll(resp.Body)
+	if err != nil {
+		t.Error(err)
+		return
+	}
+	if string(bys) != "halo" {
+		t.Error(string(bys))
+		return
+	}
+	// check session
+	rows, err := dbm.Db().Query("SELECT LASTTIME FROM SESSION WHERE ID = ? ORDER BY LASTTIME DESC;", session.Id)
+	if err != nil {
+		t.Error(err)
+		return
+	}
+	var sessionNow int64
+	for rows.Next() {
+		err = rows.Scan(&sessionNow)
+		if err != nil {
+			t.Error(err)
+			return
+		}
+		break
+	}
+	log.Debug("TestUserFilter get lastTime (%v), now (%v)", sessionNow, now)
+	if sessionNow < now {
+		t.Error(sessionNow)
+		return
+	}
+
+	log.Debug("testUserFilter times(%v) --- END", times)
 }

+ 1 - 1
src/github.com/tangs-drm/go-tool

@@ -1 +1 @@
-Subproject commit 3d79ea8a677abc5ad618522b4fbd86578c8a91e4
+Subproject commit 276408440f51830c1a69422e4116dcee6968625e