...
1 package pgstore
2
3 import (
4 "net/http"
5 "os"
6 "testing"
7 "time"
8 )
9
10 func TestCleanup(t *testing.T) {
11 dsn := os.Getenv("PGSTORE_TEST_CONN")
12 if dsn == "" {
13 t.Skip("This test requires a real database.")
14 }
15
16 ss, err := NewPGStore(dsn, []byte(secret))
17 if err != nil {
18 t.Fatal("Failed to get store", err)
19 }
20
21 defer ss.Close()
22
23 defer ss.StopCleanup(ss.Cleanup(time.Millisecond * 500))
24
25 req, err := http.NewRequest("GET", "http://www.example.com", nil)
26 if err != nil {
27 t.Fatal("Failed to create request", err)
28 }
29
30 session, err := ss.Get(req, "newsess")
31 if err != nil {
32 t.Fatal("Failed to create session", err)
33 }
34
35
36 session.Options.MaxAge = 1
37
38 m := make(http.Header)
39 if err = ss.Save(req, headerOnlyResponseWriter(m), session); err != nil {
40 t.Fatal("failed to save session:", err.Error())
41 }
42
43
44 time.Sleep(time.Millisecond * 1500)
45
46
47 var count int
48 err = ss.DbPool.QueryRow("SELECT count(*) FROM http_sessions WHERE expires_on < now()").Scan(&count)
49 if err != nil {
50 t.Fatalf("failed to select expired sessions from DB: %v", err)
51 }
52
53 if count > 0 {
54 t.Fatalf("ticker did not delete expired sessions: want 0 got %v", count)
55 }
56 }
57
View as plain text