packages feed

haskell-bee-pgmq-0.1.0.0: tests/Test/Integration/PGMQ.hs

module Test.Integration.PGMQ
 ( pgmqBrokerInitParams
 , pgmqWorkerBrokerInitParams )
where

import Async.Worker.Broker.PGMQ qualified as PGMQ
import Async.Worker.Broker.Types qualified as BT
import Async.Worker.Types (Job(..))
import Data.Maybe (fromMaybe)
import Database.PostgreSQL.Simple qualified as PSQL
import System.Environment (lookupEnv)
import Test.Integration.Broker qualified as TIB
import Test.Integration.Worker qualified as TIW

-- | Visibility timeout is a very important parameter for PGMQ. It is
-- mainly used when reading a job: it specifies for how many seconds
-- this job should be invisible for other workers. We need more tests
-- and setting this correctly, preferably in accordance with
-- 'Job.timeout'. Issue is that at the broker level we don't know
-- anything about 'Job'...
--
-- The lower the value, the more probable that some other worker will
-- pick up the same job at about the same time (before broker marks it
-- as invisible).
defaultPGMQVt :: Int
defaultPGMQVt = 1

-- | PSQL connect info that is fetched from env
getPSQLEnvConnectInfo :: IO PSQL.ConnectInfo
getPSQLEnvConnectInfo = do
  pgUser <- lookupEnv "POSTGRES_USER"
  pgDb <- lookupEnv "POSTGRES_DB"
  pgPass <- lookupEnv "POSTGRES_PASSWORD"
  pgHost <- lookupEnv "POSTGRES_HOST"
  -- https://hackage.haskell.org/package/postgresql-simple-0.7.0.0/docs/Database-PostgreSQL-Simple.html#t:ConnectInfo
  pure $ PSQL.defaultConnectInfo { PSQL.connectUser = fromMaybe "postgres" pgUser
                                 , PSQL.connectDatabase = fromMaybe "postgres" pgDb
                                 , PSQL.connectHost = fromMaybe "localhost" pgHost
                                 , PSQL.connectPassword = fromMaybe "postgres" pgPass }


pgmqBrokerInitParams :: IO (BT.BrokerInitParams PGMQ.PGMQBroker TIB.Message)
pgmqBrokerInitParams = do
  conn <- getPSQLEnvConnectInfo
  return $ PGMQ.PGMQBrokerInitParams conn defaultPGMQVt




pgmqWorkerBrokerInitParams :: IO (BT.BrokerInitParams PGMQ.PGMQBroker (Job TIW.Message))
pgmqWorkerBrokerInitParams = do
  conn <- getPSQLEnvConnectInfo
  return $ PGMQ.PGMQBrokerInitParams conn defaultPGMQVt