| Copyright | (c) 2020-2021 Tim Emiola |
|---|---|
| License | BSD3 |
| Maintainer | Tim Emiola <[email protected] > |
| Safe Haskell | Safe-Inferred |
| Language | Haskell2010 |
System.TmpProc.Docker.Redis
Description
Provides an instance of Proc that launches redis as a tmp proc.
The instance this module provides can be used in integration tests as is.
It's also possible to write other instances that launch redis in different
ways; for those, this instance can be used as a reference example.
Synopsis
- newtype TmpRedis = TmpRedis [KeyName]
- aProc :: HList '[TmpRedis]
- aHandle :: IO (HandlesOf '[TmpRedis])
- type KeyName = ByteString
- class (KnownSymbol (Image a), KnownSymbol (Name a)) => Proc a where
- type family Name a = (labelName :: Symbol) | labelName -> a
- data HList (a :: [Type]) where
- type HandlesOf (procs :: [Type]) = HList (Proc2Handle procs)
- type SvcURI = ByteString
- type HostIpAddress = Text
- data Pinged
- = OK
- | NotOK
- | PingFailed Text
- type family Image a :: Symbol
- class Proc a => Connectable a where
- type family Conn a = (conn :: Type) | conn -> a
- data ProcHandle a where
- pattern ProcHandle :: a -> String -> SvcURI -> HostIpAddress -> ProcHandle a
- only :: x -> HList '[x]
- startupAll :: forall (procs :: [Type]). AreProcs procs => HList procs -> IO (HandlesOf procs)
- withTmpConn :: Connectable a => ProcHandle a -> (Conn a -> IO b) -> IO b
Proc instance
Provides the capability to launch a redis instance as tmp proc.
The constructor receives the names of keys to be dropped on reset.
Instances
| Connectable TmpRedis Source # | Specifies how to connect to a tmp |
| Proc TmpRedis Source # | Specifies how to run |
Defined in System.TmpProc.Docker.Redis | |
| type Conn TmpRedis Source # | |
Defined in System.TmpProc.Docker.Redis | |
| type Image TmpRedis Source # | |
Defined in System.TmpProc.Docker.Redis | |
| type Name TmpRedis Source # | |
Defined in System.TmpProc.Docker.Redis | |
Useful definitions
type KeyName = ByteString Source #
The name of a key in redis.
Re-exports
class (KnownSymbol (Image a), KnownSymbol (Name a)) => Proc a where #
Specifies how to launch a temporary process using Docker.
Associated Types
The image name of the docker image, e.g, postgres:10.6
type Name a = (labelName :: Symbol) | labelName -> a #
A label used to refer to running process created from this image, e.g, a-postgres-db
Methods
Additional arguments to the docker command that launches the tmp proc.
uriOf :: HostIpAddress -> SvcURI #
Determines the service URI of the process, when applicable.
reset :: ProcHandle a -> IO () #
Resets some state in a tmp proc service.
ping :: ProcHandle a -> IO Pinged #
Checks if the tmp proc started ok.
Maximum number of pings to perform during startup.
Number of milliseconds between pings.
Instances
| Proc TmpRedis Source # | Specifies how to run |
Defined in System.TmpProc.Docker.Redis | |
type family Name a = (labelName :: Symbol) | labelName -> a #
A label used to refer to running process created from this image, e.g, a-postgres-db
data HList (a :: [Type]) where #
Defines a Heterogenous list.
Constructors
| HNil :: HList ('[] :: [Type]) | |
| HCons :: forall anyTy (manyTys :: [Type]). anyTy -> HList manyTys -> HList (anyTy ': manyTys) infixr 5 |
type HandlesOf (procs :: [Type]) = HList (Proc2Handle procs) #
A list of values.ProcHandle
type SvcURI = ByteString #
A connection string used to access the service once its running.
type HostIpAddress = Text #
The IP address of the docker host.
Indicates the result of pinging a Proc.
If the ping succeeds, ping should return OK.
ping should catch any exceptions that are expected when the service
is not available and return ProcsNotOK.
startupAll uses PingFailed to report any unexpected exceptions that escape
ping.
Constructors
| OK | The service is running OK. |
| NotOK | The service is not running. |
| PingFailed Text | Contact to the service failed unexpectedly. |
class Proc a => Connectable a where #
Specifies how to a get a connection to a Proc.
Minimal complete definition
type family Conn a = (conn :: Type) | conn -> a #
The connection type.
Instances
| type Conn TmpRedis Source # | |
Defined in System.TmpProc.Docker.Redis | |
data ProcHandle a where #
Provides access to a Proc that has been started.
Bundled Patterns
| pattern ProcHandle | A The selectors are readonly, i.e they only match in pattern context since
|
Fields
| |
startupAll :: forall (procs :: [Type]). AreProcs procs => HList procs -> IO (HandlesOf procs) #
Start up processes for each Proc type
the processes' are able to communicate via a docker network with a unique generated name
withTmpConn :: Connectable a => ProcHandle a -> (Conn a -> IO b) -> IO b #
Run an action on a Connectable handle as a callback on its Conn