{-# LANGUAGE OverloadedStrings #-} module Main where import Control.Concurrent (threadDelay) import Control.Exception.Base (assert) import Control.Monad import Data.Default (def) import Data.String (fromString) import Database.PostgreSQL.Simple import Network.Wai.Session (withSession, Session) import Network.Wai.Session.PostgreSQL import qualified Data.ByteString as B import qualified Data.Text as T import qualified Data.Text.Encoding as TE main :: IO () main = do conn <- dbconnect conn' <- fromSimpleConnection conn store <- dbStore conn' testSettings purger conn' testSettings ((lookupSess1, insertSess1), mknewsessid) <- store Nothing sessid <- mknewsessid insertSess1 ("foo" :: B.ByteString) ("bar" :: B.ByteString) l1 <- lookupSess1 "foo" assert (l1 == (Just "bar")) it l2 <- lookupSess1 "bar" assert (l2 == Nothing) it ((lookupSess2, insertSess2), mknewsessid) <- store $ Just sessid newsessid <- mknewsessid l3 <- lookupSess2 "foo" assert (l3 == (Just "bar")) it assert (newsessid == sessid) it let invalidsessid = "foobar" ((lookupSess3, insertSess3), mknewsessid) <- store $ Just invalidsessid newsessid2 <- mknewsessid assert (newsessid2 /= newsessid) it assert (newsessid2 /= invalidsessid) it l4 <- lookupSess3 "foo" assert (l4 == Nothing) it ((lookupSess4, insertSess4), mknewsessid) <- store $ Just sessid l5 <- lookupSess4 "foo" assert (l5 == (Just "bar")) it threadDelay 6000000 ((lookupSess5, insertSess5), mknewsessid) <- store $ Just sessid l6 <- lookupSess5 "foo" assert (l6 == Nothing) it it :: IO () it = return () dbconnect :: IO Connection dbconnect = do let connectInfo = ConnectInfo { connectHost = "localhost" , connectPort = 5432 , connectUser = "demo" , connectPassword = "omed" , connectDatabase = "demodb" } connectPostgreSQL $ postgreSQLConnectionString connectInfo testSettings :: StoreSettings testSettings = def { storeSettingsSessionTimeout=5 }