{-# LANGUAGE OverloadedStrings #-}
module Main (main) where
import CollisionSpec qualified
import ConfigSpec qualified
import EphemeralDb (ensureOwnerOnlyRoot, withPgmqDb)
import ForeignQueueSpec qualified
import JsonGoldenSpec qualified
import NotifyCrashSpec qualified
import PartitionSpec qualified
import RootPermissionsSpec qualified
import Test.Tasty (defaultMain, testGroup)
main :: IO ()
main = do
result <- withPgmqDb $ \pool -> do
let tree =
testGroup
"pgmq-config"
[ RootPermissionsSpec.tests ensureOwnerOnlyRoot,
JsonGoldenSpec.tests,
ConfigSpec.tests pool,
PartitionSpec.tests,
-- Foreign names require an isolated, schema-selectable server.
CollisionSpec.tests,
-- NotifyCrashSpec manages its own PostgreSQL instance: it crashes
-- the server, which the shared pool above could not survive.
NotifyCrashSpec.tests,
-- ForeignQueueSpec seeds a queue whose name parseQueueName
-- rejects; on the shared pool above that row would fail every
-- concurrent typed listQueues call, so it too runs on its own
-- PostgreSQL instance.
ForeignQueueSpec.tests
]
defaultMain tree
case result of
Left err -> error $ "Failed to start temp database: " <> show err
Right () -> pure ()