instana-haskell-trace-sdk-0.7.0.0: test/integration/Instana/SDK/IntegrationTest/Suite.hs
module Instana.SDK.IntegrationTest.Suite
( AppUnderTest(..)
, ConditionalSuite(..)
, Suite(..)
, SuiteOptions(..)
, defaultOptions
, downstreamTarget
, isExclusive
, testServer
, testServerWithMiddleware
, withConnectionLoss
, withCustomServiceName
, withPidTranslation
, withStartupDelay
, withW3cTraceCorrelationDisabled
) where
import Test.HUnit
-- |Describes a collection of cohesive tests that share the same suite options.
data Suite =
Suite
{ label :: String
, tests :: String -> [IO Test]
, options :: SuiteOptions
}
-- |Describes options for running a test suite.
data SuiteOptions =
SuiteOptions
{ usePidTranslation :: Bool
, startupDelay :: Bool
, simulateConnectionLoss :: Bool
, customServiceName :: Maybe String
, disableW3cTraceCorrelation :: Bool
, appsUnderTest :: [AppUnderTest]
}
-- |Describes options for running a test suite.
data AppUnderTest =
AppUnderTest
{ executable :: String
, port :: Int
, connectsToAgent :: Bool
}
defaultOptions :: SuiteOptions
defaultOptions =
SuiteOptions
{ usePidTranslation = False
, startupDelay = False
, simulateConnectionLoss = False
, customServiceName = Nothing
, disableW3cTraceCorrelation = False
, appsUnderTest = [testServer]
}
testServer :: AppUnderTest
testServer =
AppUnderTest
{ executable = "instana-haskell-test-wai-server"
, port = 1207
, connectsToAgent = True
}
testServerWithMiddleware :: AppUnderTest
testServerWithMiddleware =
AppUnderTest
{ executable = "instana-haskell-test-wai-with-middleware-server"
, port = 1207
, connectsToAgent = True
}
downstreamTarget :: AppUnderTest
downstreamTarget =
AppUnderTest
{ executable = "downstream-target"
, port = 1208
, connectsToAgent = True
}
withPidTranslation :: SuiteOptions
withPidTranslation =
defaultOptions { usePidTranslation = True }
withStartupDelay :: SuiteOptions
withStartupDelay =
defaultOptions { startupDelay = True }
withConnectionLoss :: SuiteOptions
withConnectionLoss =
defaultOptions { simulateConnectionLoss = True }
withCustomServiceName :: String -> SuiteOptions
withCustomServiceName serviceName =
defaultOptions { customServiceName = Just serviceName }
withW3cTraceCorrelationDisabled :: SuiteOptions
withW3cTraceCorrelationDisabled =
defaultOptions { disableW3cTraceCorrelation = True }
data ConditionalSuite =
Run Suite
| Exclusive Suite
| Skip Suite
isExclusive :: ConditionalSuite -> Bool
isExclusive conditionalSuite =
case conditionalSuite of
Exclusive _ -> True
_ -> False