{-# 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 Data.Maybe (isNothing) import Database.MySQL.Simple import Network.Wai.Session (withSession, Session) import Network.Wai.Session.MySQL 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 (isNothing l2) 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 (isNothing l4) 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 (isNothing l6) it it :: IO () it = return () dbconnect :: IO Connection dbconnect = connect defaultConnectInfo { connectDatabase = "test" } testSettings :: StoreSettings testSettings = def { storeSettingsSessionTimeout=5 }