...

Source file src/github.com/antonlindstrom/pgstore/cleanup_test.go

Documentation: github.com/antonlindstrom/pgstore

     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  	// Start the cleanup goroutine.
    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  	// Expire the session.
    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  	// Give the ticker a moment to run.
    44  	time.Sleep(time.Millisecond * 1500)
    45  
    46  	// SELECT expired sessions. We should get a count of zero back.
    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