packages feed

hs-opentelemetry-exporter-handle-1.0.0.0: test/Spec.hs

{-# LANGUAGE OverloadedStrings #-}

module Main (main) where

import qualified Data.HashMap.Strict as HM
import qualified Data.Vector as V
import OpenTelemetry.Exporter.Handle.LogRecord (makeHandleLogRecordExporter)
import OpenTelemetry.Exporter.Handle.Span (makeHandleExporter)
import OpenTelemetry.Exporter.LogRecord (
  logRecordExporterExport,
  logRecordExporterForceFlush,
  logRecordExporterShutdown,
 )
import OpenTelemetry.Exporter.Span (SpanExporter (..))
import OpenTelemetry.Internal.Common.Types (ExportResult (..))
import System.IO (stdout)
import Test.Hspec


main :: IO ()
main = hspec spec


spec :: Spec
spec =
  -- Handle-based exporters (implementation-specific; SpanExporter / LogRecordExporter shape)
  -- https://opentelemetry.io/docs/specs/otel/trace/sdk/#span-exporter
  -- https://opentelemetry.io/docs/specs/otel/logs/sdk/#logrecordexporter
  do
    describe "Handle Span exporter" $ do
      -- SpanExporter.Export must accept empty batches (SDK contract)
      -- https://opentelemetry.io/docs/specs/otel/trace/sdk/#export-batch
      it "returns Success for empty batch" $ do
        let formatter _span = pure "test"
            exporter = makeHandleExporter stdout formatter
        result <- spanExporterExport exporter HM.empty
        case result of
          Success -> pure ()
          Failure _ -> expectationFailure "expected Success"

      it "forceFlush does not throw" $ do
        let exporter = makeHandleExporter stdout (\_ -> pure "test")
        _ <- spanExporterForceFlush exporter
        pure ()

      it "shutdown does not throw" $ do
        let exporter = makeHandleExporter stdout (\_ -> pure "test")
        _ <- spanExporterShutdown exporter
        pure ()

    describe "Handle LogRecord exporter" $ do
      it "returns Success for empty batch" $ do
        exporter <- makeHandleLogRecordExporter stdout (\_ -> pure "test")
        result <- logRecordExporterExport exporter V.empty
        case result of
          Success -> pure ()
          Failure _ -> expectationFailure "expected Success"

      it "forceFlush does not throw" $ do
        exporter <- makeHandleLogRecordExporter stdout (\_ -> pure "test")
        _ <- logRecordExporterForceFlush exporter
        pure ()

      it "shutdown does not throw" $ do
        exporter <- makeHandleLogRecordExporter stdout (\_ -> pure "test")
        _ <- logRecordExporterShutdown exporter
        pure ()