packages feed

hs-opentelemetry-sdk-1.0.0.0: test/Spec.hs

{-# LANGUAGE CPP #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeApplications #-}

import Control.Concurrent (myThreadId)
import Control.Exception (AsyncException (UserInterrupt), SomeException, throwTo, try)
import qualified OpenTelemetry.BaggageSpec as BaggageSpec
import qualified OpenTelemetry.ConfigurationSpec as ConfigurationSpec
import qualified OpenTelemetry.ContextInSpanSpec as ContextInSpanSpec
import qualified OpenTelemetry.ContextSpec as ContextSpec
import qualified OpenTelemetry.LogSpec as LogSpec
import qualified OpenTelemetry.MeterProviderSpec as MeterProviderSpec
import qualified OpenTelemetry.MetricReaderSpec as MetricReaderSpec
import qualified OpenTelemetry.Resource.DetectorSpec as DetectorSpec
import qualified OpenTelemetry.ResourceSpec as ResourceSpec
import OpenTelemetry.Trace (initializeGlobalTracerProvider, withTracerProvider)
import qualified OpenTelemetry.Trace.CallStackSpec as CallStackSpec
import qualified OpenTelemetry.TraceSpec as TraceSpec
import System.Environment (getArgs, setEnv, unsetEnv)
import System.Exit (ExitCode (..), exitWith)
import System.IO (hFlush, stdout)


{- FOURMOLU_DISABLE -}
#if !defined(mingw32_HOST_OS)
import System.Posix.Signals (Handler (CatchOnce), installHandler, sigTERM)
#endif
{- FOURMOLU_ENABLE -}

import Test.Hspec


main :: IO ()
main = do
  args <- getArgs
  case args of
    ("--signal-test-helper" : rest) -> signalTestHelper rest
    _ -> runTests


runTests :: IO ()
runTests = do
  setEnv "OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT" "50"
  setEnv "OTEL_RESOURCE_ATTRIBUTES" "host.name=env_host_name,example.name=env_example_name,example.count=42"
  initializeGlobalTracerProvider
  hspec $ do
    BaggageSpec.spec
    ContextSpec.spec
    ContextInSpanSpec.spec
    TraceSpec.spec
    CallStackSpec.spec
    ResourceSpec.spec
    DetectorSpec.spec
    LogSpec.spec
    MeterProviderSpec.spec
    MetricReaderSpec.spec
    ConfigurationSpec.spec


signalTestHelper :: [String] -> IO ()

{- FOURMOLU_DISABLE -}
#if !defined(mingw32_HOST_OS)
signalTestHelper [markerPath] = do
  tid <- myThreadId
  _ <- installHandler sigTERM (CatchOnce (throwTo tid UserInterrupt)) Nothing
  setEnv "OTEL_TRACES_EXPORTER" "none"
  setEnv "OTEL_PROPAGATORS" "none"
  unsetEnv "OTEL_CONFIG_FILE"
  setEnv "OTEL_LOG_LEVEL" "none"
  _ <- try @SomeException $ withTracerProvider $ \_ -> do
    putStrLn "READY"
    hFlush stdout
    waitForever
  writeFile markerPath "SHUTDOWN_COMPLETE"
  exitWith ExitSuccess
  where
    waitForever :: IO ()
    waitForever = do
      _ <- getLine
      waitForever
#else
signalTestHelper [_markerPath] = pure ()
#endif
{- FOURMOLU_ENABLE -}


signalTestHelper _ = do
  putStrLn "Usage: --signal-test-helper <marker-path>"
  exitWith (ExitFailure 1)