@@ -15,6 +15,7 @@ import (
1515 "time"
1616
1717 "github.com/stretchr/testify/assert"
18+ "github.com/stretchr/testify/require"
1819
1920 "github.com/flamego/flamego"
2021)
@@ -57,7 +58,7 @@ func TestFileStore(t *testing.T) {
5758
5859 resp := httptest .NewRecorder ()
5960 req , err := http .NewRequest ("GET" , "/set" , nil )
60- assert .Nil (t , err )
61+ require .Nil (t , err )
6162
6263 f .ServeHTTP (resp , req )
6364 assert .Equal (t , http .StatusOK , resp .Code )
@@ -66,15 +67,15 @@ func TestFileStore(t *testing.T) {
6667
6768 resp = httptest .NewRecorder ()
6869 req , err = http .NewRequest ("GET" , "/get" , nil )
69- assert .Nil (t , err )
70+ require .Nil (t , err )
7071
7172 req .Header .Set ("Cookie" , cookie )
7273 f .ServeHTTP (resp , req )
7374 assert .Equal (t , http .StatusOK , resp .Code )
7475
7576 resp = httptest .NewRecorder ()
7677 req , err = http .NewRequest ("GET" , "/destroy" , nil )
77- assert .Nil (t , err )
78+ require .Nil (t , err )
7879
7980 req .Header .Set ("Cookie" , cookie )
8081 f .ServeHTTP (resp , req )
@@ -91,48 +92,65 @@ func TestFileStore_GC(t *testing.T) {
9192 Lifetime : time .Second ,
9293 },
9394 )
94- assert .Nil (t , err )
95-
96- setModTime := func (sid string ) {
97- t .Helper ()
98-
99- err := os .Chtimes (store .(* fileStore ).filename (sid ), now , now )
100- assert .Nil (t , err )
101- }
95+ require .Nil (t , err )
10296
10397 sess1 , err := store .Read (ctx , "111" )
104- assert .Nil (t , err )
98+ require .Nil (t , err )
10599 err = store .Save (ctx , sess1 )
106- assert .Nil (t , err )
107- setModTime ("111" )
100+ require .Nil (t , err )
108101
109102 now = now .Add (- 2 * time .Second )
110103 sess2 , err := store .Read (ctx , "222" )
111- assert .Nil (t , err )
104+ require .Nil (t , err )
112105
113106 sess2 .Set ("name" , "flamego" )
114107 err = store .Save (ctx , sess2 )
115- assert .Nil (t , err )
116- setModTime ("222" )
108+ require .Nil (t , err )
117109
118110 // Read on an expired session should wipe data but preserve the record
119111 now = now .Add (2 * time .Second )
120112 tmp , err := store .Read (ctx , "222" )
121- assert .Nil (t , err )
113+ require .Nil (t , err )
122114 assert .Nil (t , tmp .Get ("name" ))
123115
124116 now = now .Add (- 2 * time .Second )
125117 sess3 , err := store .Read (ctx , "333" )
126- assert .Nil (t , err )
118+ require .Nil (t , err )
127119 err = store .Save (ctx , sess3 )
128- assert .Nil (t , err )
129- setModTime ("333" )
120+ require .Nil (t , err )
130121
131122 now = now .Add (2 * time .Second )
132123 err = store .GC (ctx ) // sess3 should be recycled
133- assert .Nil (t , err )
124+ require .Nil (t , err )
134125
135126 assert .True (t , store .Exist (ctx , "111" ))
136127 assert .False (t , store .Exist (ctx , "222" ))
137128 assert .False (t , store .Exist (ctx , "333" ))
138129}
130+
131+ func TestFileStore_Touch (t * testing.T ) {
132+ ctx := context .Background ()
133+ now := time .Now ()
134+ store , err := FileIniter ()(ctx ,
135+ FileConfig {
136+ nowFunc : func () time.Time { return now },
137+ RootDir : filepath .Join (os .TempDir (), "sessions" ),
138+ Lifetime : time .Second ,
139+ },
140+ )
141+ require .Nil (t , err )
142+
143+ sess , err := store .Read (ctx , "111" )
144+ require .Nil (t , err )
145+ err = store .Save (ctx , sess )
146+ require .Nil (t , err )
147+
148+ now = now .Add (2 * time .Second )
149+ // Touch should keep the session alive
150+ err = store .Touch (ctx , sess .ID ())
151+ require .Nil (t , err )
152+
153+ err = store .GC (ctx )
154+ require .Nil (t , err )
155+ assert .True (t , store .Exist (ctx , sess .ID ()))
156+ }
0 commit comments