hs-opentelemetry-awsxray-0.1.0.0: tests/OpenTelemetry/AWSXRay/TraceInfoSpec.hs
module OpenTelemetry.AWSXRay.TraceInfoSpec
( spec
) where
import Prelude
import Data.Either (isLeft)
import qualified Data.HashMap.Strict as HashMap
import Data.Maybe (fromMaybe)
import Data.Text (Text)
import OpenTelemetry.AWSXRay.TraceInfo
import OpenTelemetry.Baggage (Token)
import qualified OpenTelemetry.Baggage as Baggage
import OpenTelemetry.Trace.Core (isSampled, traceFlags)
import Test.Hspec
spec :: Spec
spec = do
it "round trips an example" $ do
let
h =
"Root=1-5759e988-bd862e3fe1be46a994272793"
<> ";Parent=53995c3f42cd8ad8"
<> ";Sampled=1"
fmap toXRayHeader (fromXRayHeader h) `shouldBe` Right h
it "round trips an example with baggage" $ do
let
h =
"Root=1-5759e988-bd862e3fe1be46a994272793"
<> ";Parent=53995c3f42cd8ad8"
<> ";Sampled=1"
<> ";baz=bat" -- order matters due to HashMap
<> ";foo=bar"
fmap toXRayHeader (fromXRayHeader h) `shouldBe` Right h
describe "fromXRayHeader" $ do
it "requires Parent" $ do
fromXRayHeader "Root=1-5759e988-bd862e3fe1be46a994272793"
`shouldSatisfy` isLeft
context "Sampled" $ do
it "defaults False" $ do
let
eInfo =
fromXRayHeader
$ "Root=1-5759e988-bd862e3fe1be46a994272793"
<> ";Parent=53995c3f42cd8ad8"
fmap (isSampled . traceFlags . spanContext) eInfo `shouldBe` Right False
it "interprets =1 as True" $ do
let
eInfo =
fromXRayHeader
$ "Root=1-5759e988-bd862e3fe1be46a994272793"
<> ";Parent=53995c3f42cd8ad8"
<> ";Sampled=1"
fmap (isSampled . traceFlags . spanContext) eInfo `shouldBe` Right True
it "interprets other values as as False" $ do
let
eInfo =
fromXRayHeader
$ "Root=1-5759e988-bd862e3fe1be46a994272793"
<> ";Parent=53995c3f42cd8ad8"
<> ";Sampled=flipFlop"
fmap (isSampled . traceFlags . spanContext) eInfo `shouldBe` Right False
it "grabs all other values as Baggage" $ do
let
eInfo =
fromXRayHeader
$ "Root=1-5759e988-bd862e3fe1be46a994272793"
<> ";Parent=53995c3f42cd8ad8"
<> ";foo=bar;baz=bat"
fmap baggage eInfo `shouldBe` Right
(Just $ Baggage.fromHashMap $ HashMap.fromList
[ (mkTokenUnsafe "foo", Baggage.element "bar")
, (mkTokenUnsafe "baz", Baggage.element "bat")
]
)
mkTokenUnsafe :: Text -> Token
mkTokenUnsafe = fromMaybe (error "not a valid Token") . Baggage.mkToken