diff --git a/.gitignore b/.gitignore index 53c2ade..445ec5b 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,4 @@ cabal.sandbox.config /vendor/ .shelly/ tarballs/ +\#*# diff --git a/serversession-backend-persistent/.gitignore b/serversession-backend-persistent/.gitignore new file mode 100644 index 0000000..e7e12b7 --- /dev/null +++ b/serversession-backend-persistent/.gitignore @@ -0,0 +1 @@ +test.db* diff --git a/serversession-backend-persistent/serversession-backend-persistent.cabal b/serversession-backend-persistent/serversession-backend-persistent.cabal index 82ca2ac..60e3ccb 100644 --- a/serversession-backend-persistent/serversession-backend-persistent.cabal +++ b/serversession-backend-persistent/serversession-backend-persistent.cabal @@ -45,6 +45,31 @@ library TypeFamilies ghc-options: -Wall + +test-suite tests + type: exitcode-stdio-1.0 + hs-source-dirs: tests + build-depends: + + base, aeson, base64-bytestring, bytestring, containers, + path-pieces, persistent, persistent-template, text, time + + , hspec >= 2.1 && < 3 + , monad-logger + , persistent-sqlite == 2.1.* + , persistent-postgresql == 2.1.* + , resource-pool + , QuickCheck + + , serversession + , serversession-backend-persistent + extensions: + OverloadedStrings + TemplateHaskell + main-is: Main.hs + ghc-options: -Wall -threaded -with-rtsopts=-N + + source-repository head type: git location: https://github.com/yesodweb/serversession diff --git a/serversession-backend-persistent/tests/Main.hs b/serversession-backend-persistent/tests/Main.hs new file mode 100644 index 0000000..84fa9cb --- /dev/null +++ b/serversession-backend-persistent/tests/Main.hs @@ -0,0 +1,35 @@ +module Main (main) where + +import Control.Monad (forM_) +import Control.Monad.Logger (runStderrLoggingT, runNoLoggingT) +import Data.Pool (destroyAllResources) +import Database.Persist.Postgresql (createPostgresqlPool) +import Database.Persist.Sqlite (createSqlitePool) +import Test.Hspec +import Web.ServerSession.Backend.Persistent +import Web.ServerSession.Core.StorageTests + +import qualified Control.Exception as E +import qualified Database.Persist.TH as P +import qualified Database.Persist.Sql as P + +P.mkMigrate "migrateAll" serverSessionDefs + +main :: IO () +main = hspec $ parallel $ + forM_ [ ("PostgreSQL", createPostgresqlPool "host=localhost user=test dbname=test password=test" 20) + , ("SQLite", createSqlitePool "test.db" 1) ] $ + \(rdbms, createPool) -> + describe ("SqlStorage on " ++ rdbms) $ do + epool <- + runIO $ E.try $ do + pool <- runNoLoggingT createPool + runStderrLoggingT $ P.runSqlPool (P.runMigration migrateAll) pool + return pool + case epool of + Left (E.SomeException exc) -> + it "failed to create connection or migrate database" $ + pendingWith (show exc) + Right pool -> + afterAll_ (destroyAllResources pool) $ + parallel $ allStorageTests (SqlStorage pool) it runIO shouldBe shouldReturn shouldThrow