module Instana.SDK.IntegrationTest.TestSuites (allSuites) where import qualified Data.Aeson as Aeson import qualified Instana.SDK.IntegrationTest.BracketApi as BracketApi import qualified Instana.SDK.IntegrationTest.Connection as Connection import qualified Instana.SDK.IntegrationTest.HttpTracing as HttpTracing import qualified Instana.SDK.IntegrationTest.LowLevelApi as LowLevelApi import qualified Instana.SDK.IntegrationTest.Metrics as Metrics import qualified Instana.SDK.IntegrationTest.ServiceName as ServiceName import qualified Instana.SDK.IntegrationTest.SpecCompliance as SpecCompliance import Instana.SDK.IntegrationTest.Suite (ConditionalSuite (..), Suite (..)) import qualified Instana.SDK.IntegrationTest.Suite as Suite import qualified Instana.SDK.IntegrationTest.WaiMiddleware as WaiMiddleware allSuites :: Aeson.Array -> [ConditionalSuite] allSuites specificationComplianceTestCases = [ testBracketApi , testLowLevelApi , testConnectionEstablishment , testConnectionLoss , testAgentRestart , testPidTranslation , testServiceName , testHttpTracing , testWaiMiddleware , testSpecComplianceW3cOn specificationComplianceTestCases "Low Level API" "http/low/level/api" , testSpecComplianceW3cOff specificationComplianceTestCases "Low Level API" "http/low/level/api" , testSpecComplianceW3cOn specificationComplianceTestCases "Bracket API" "http/bracket/api" , testSpecComplianceW3cOff specificationComplianceTestCases "Bracket API" "http/bracket/api" , testSpecComplianceW3cOnWaiMiddleware specificationComplianceTestCases "api" , testSpecComplianceW3cOffWaiMiddleware specificationComplianceTestCases "api" , testMetrics ] testBracketApi :: ConditionalSuite testBracketApi = Run $ Suite { Suite.label = "Bracket API" , Suite.tests = BracketApi.allTests , Suite.options = Suite.defaultOptions } testLowLevelApi :: ConditionalSuite testLowLevelApi = Run $ Suite { Suite.label = "Low Level API" , Suite.tests = LowLevelApi.allTests , Suite.options = Suite.defaultOptions } testConnectionEstablishment :: ConditionalSuite testConnectionEstablishment = Run $ Suite { Suite.label = "Initial Connection Establishment" , Suite.tests = (\pid -> [ Connection.shouldRetryInitialConnectionEstablishment pid ]) , Suite.options = Suite.withStartupDelay } testConnectionLoss :: ConditionalSuite testConnectionLoss = Run $ Suite { Suite.label = "Connection Loss" , Suite.tests = (\pid -> [ Connection.shouldReestablishLostConnection pid ]) , Suite.options = Suite.withConnectionLoss } testAgentRestart :: ConditionalSuite testAgentRestart = Run $ Suite { Suite.label = "Agent Restart" , Suite.tests = (\pid -> [ Connection.shouldReconnectAfterAgentRestart pid ]) , Suite.options = Suite.defaultOptions } testPidTranslation :: ConditionalSuite testPidTranslation = Run $ Suite { Suite.label = "PID translation" , Suite.tests = (\pid -> [ Connection.shouldUseTranslatedPid pid ]) , Suite.options = Suite.withPidTranslation } testServiceName :: ConditionalSuite testServiceName = Run $ Suite { Suite.label = "INSTANA_SERVICE_NAME env var" , Suite.tests = ServiceName.allTests , Suite.options = Suite.withCustomServiceName "Custom Service Name" } testHttpTracing :: ConditionalSuite testHttpTracing = Run $ Suite { Suite.label = "HTTP Tracing" , Suite.tests = HttpTracing.allTests , Suite.options = Suite.defaultOptions { Suite.appsUnderTest = [ Suite.testServer , Suite.downstreamTarget ] } } testSpecComplianceW3cOn :: Aeson.Array -> String -> String -> ConditionalSuite testSpecComplianceW3cOn specificationComplianceTestCases apiLabel route = Run $ Suite { Suite.label = "Specification Compliance (WC3 Trace Correlation On/" ++ apiLabel ++ ")" , Suite.tests = SpecCompliance.allTestsW3cCorrelationOn specificationComplianceTestCases Suite.testServer route , Suite.options = Suite.defaultOptions { Suite.appsUnderTest = [ Suite.testServer , Suite.downstreamTarget ] } } testSpecComplianceW3cOff :: Aeson.Array -> String -> String -> ConditionalSuite testSpecComplianceW3cOff specificationComplianceTestCases apiLabel route = Run $ Suite { Suite.label = "Specification Compliance (WC3 Trace Correlation Off/" ++ apiLabel ++ ")" , Suite.tests = SpecCompliance.allTestsW3cCorrelationOff specificationComplianceTestCases Suite.testServer route , Suite.options = Suite.withW3cTraceCorrelationDisabled { Suite.appsUnderTest = [ Suite.testServer , Suite.downstreamTarget ] } } testWaiMiddleware :: ConditionalSuite testWaiMiddleware = Run $ Suite { Suite.label = "WAI Middleware" , Suite.tests = WaiMiddleware.allTests , Suite.options = Suite.defaultOptions { Suite.appsUnderTest = [ Suite.testServerWithMiddleware , Suite.downstreamTarget ] } } testSpecComplianceW3cOnWaiMiddleware :: Aeson.Array -> String -> ConditionalSuite testSpecComplianceW3cOnWaiMiddleware specificationComplianceTestCases route = Run $ Suite { Suite.label = "Specification Compliance (WC3 Trace Correlation On/WAI Middleware)" , Suite.tests = SpecCompliance.allTestsW3cCorrelationOn specificationComplianceTestCases Suite.testServerWithMiddleware route , Suite.options = Suite.defaultOptions { Suite.appsUnderTest = [ Suite.testServerWithMiddleware , Suite.downstreamTarget ] } } testSpecComplianceW3cOffWaiMiddleware :: Aeson.Array -> String -> ConditionalSuite testSpecComplianceW3cOffWaiMiddleware specificationComplianceTestCases route = Run $ Suite { Suite.label = "Specification Compliance (WC3 Trace Correlation Off/WAI Middleware)" , Suite.tests = SpecCompliance.allTestsW3cCorrelationOff specificationComplianceTestCases Suite.testServerWithMiddleware route , Suite.options = Suite.withW3cTraceCorrelationDisabled { Suite.appsUnderTest = [ Suite.testServerWithMiddleware , Suite.downstreamTarget ] } } testMetrics :: ConditionalSuite testMetrics = Run $ Suite { Suite.label = "Metrics" , Suite.tests = (\pid -> [ Metrics.shouldReportMetrics pid ]) , Suite.options = Suite.withPidTranslation }