packages feed

instana-haskell-trace-sdk-0.7.0.0: test/integration/Main.hs

module Main where


import           Data.Aeson                             (Array)
import qualified Data.Aeson                             as Aeson
import qualified Data.ByteString.Lazy                   as LBS
import qualified System.Directory                       as Directory
import           Test.HUnit

import qualified Instana.SDK.IntegrationTest.Logging    as Logging
import qualified Instana.SDK.IntegrationTest.Runner     as TestRunner
import qualified Instana.SDK.IntegrationTest.TestSuites as TestSuites
import qualified System.Exit                            as Exit


main :: IO Counts
main = do
  Logging.initLogging
  specificationComplianceTestCases <- parseSpecificationTestCasesJson
  case specificationComplianceTestCases of
    Just specTestCases ->
      TestRunner.runSuites $ TestSuites.allSuites specTestCases
    Nothing ->
      Exit.die $
        "ERROR: Could not parse specification test cases JSON file. " ++
          "See above for details."


specificationComplianceJsonFile :: FilePath
specificationComplianceJsonFile =
  "test/integration/Instana/SDK/IntegrationTest/" ++
    "tracer_compliance_test_cases.json"


parseSpecificationTestCasesJson :: IO (Maybe Array)
parseSpecificationTestCasesJson = do
  cwd <- Directory.getCurrentDirectory
  putStrLn $ "Running integration tests in directory " ++ show cwd
  putStrLn $
    "Parsing " ++ cwd ++ "/" ++ specificationComplianceJsonFile ++ "..."
  content <- LBS.readFile specificationComplianceJsonFile
  let
    decodedEither = Aeson.eitherDecode' content :: Either String Array
  case decodedEither of
    Left errorMessage -> do
      putStrLn $
        "Could not parse " ++ specificationComplianceJsonFile ++
        " - is it valid JSON?"
      putStrLn errorMessage
      return Nothing
    Right result ->
      return $ Just result