packages feed

instana-haskell-trace-sdk-0.4.0.0: test/unit/Instana/SDK/Internal/ConfigTest.hs

module Instana.SDK.Internal.ConfigTest (allTests) where


import           Data.Maybe                  (isNothing)
import           System.Environment          (setEnv, unsetEnv)
import           Test.HUnit

import           Instana.SDK.Config          (Config)
import qualified Instana.SDK.Config          as Config
import qualified Instana.SDK.Internal.Config as InternalConfig


allTests :: Test
allTests =
  TestList
    [ TestLabel "mergeShouldApplyDefaults" mergeShouldApplyDefaults
    , TestLabel "mergeShouldPreferFirstArg" mergeShouldPreferFirstArg
    , TestLabel
      "shouldReadNonExistingEnvironmentVariablesAsNothing"
      shouldReadNonExistingEnvironmentVariablesAsNothing
    , TestLabel
      "shouldReadExistingEnvironmentVariables"
      shouldReadExistingEnvironmentVariables
    , TestLabel
      "shouldReadNonNumericPortAsNothing"
      shouldReadNonNumericPortAsNothing
    , TestLabel
      "shouldReadNonExistingEnvVarsAndApplyDefaults"
      shouldReadNonExistingEnvVarsAndApplyDefaults
    ]


mergeShouldApplyDefaults :: Test
mergeShouldApplyDefaults =
  let
    merged = InternalConfig.mergeConfigs emptyConfig emptyConfig
  in
    TestList $
      [ TestCase $
          assertEqual
            "agent host" "127.0.0.1" (InternalConfig.agentHost merged)
      , TestCase $
          assertEqual "agent port" 42699 (InternalConfig.agentPort merged)
      ]


mergeShouldPreferFirstArg :: Test
mergeShouldPreferFirstArg =
  let
    first =
      Config.defaultConfig
        { Config.agentHost = Just "horst"
        , Config.agentPort = Just 12345
        }
    second =
      Config.defaultConfig
        { Config.agentHost = Just "wurst"
        , Config.agentPort = Just 98765
        }
    merged = InternalConfig.mergeConfigs first second
  in
    TestList $
      [ TestCase $
          assertEqual
            "agent host" "horst" (InternalConfig.agentHost merged)
      , TestCase $
          assertEqual "agent port" 12345 (InternalConfig.agentPort merged)
      ]


shouldReadNonExistingEnvironmentVariablesAsNothing :: Test
shouldReadNonExistingEnvironmentVariablesAsNothing =
  TestCase $
    do
      conf <- InternalConfig.readConfigFromEnvironment
      assertBool "agent host" (isNothing $ Config.agentHost conf)
      assertBool "agent port" (isNothing $ Config.agentPort conf)


shouldReadExistingEnvironmentVariables :: Test
shouldReadExistingEnvironmentVariables =
  TestCase $
    do
      setEnv "INSTANA_AGENT_HOST" "agenthost.com"
      setEnv "INSTANA_AGENT_PORT" "12345"
      conf <- InternalConfig.readConfigFromEnvironment
      assertEqual "agent host" (Just "agenthost.com") (Config.agentHost conf)
      assertEqual "agent port" (Just 12345) (Config.agentPort conf)
      unsetEnv  "INSTANA_AGENT_HOST"
      unsetEnv "INSTANA_AGENT_PORT"


shouldReadNonNumericPortAsNothing :: Test
shouldReadNonNumericPortAsNothing =
  TestCase $
    do
      setEnv "INSTANA_AGENT_PORT" "12x45"
      conf <- InternalConfig.readConfigFromEnvironment
      assertBool "agent port" $ isNothing $ Config.agentPort conf
      unsetEnv "INSTANA_AGENT_PORT"


shouldReadNonExistingEnvVarsAndApplyDefaults :: Test
shouldReadNonExistingEnvVarsAndApplyDefaults =
  TestCase $
    do
      conf <- InternalConfig.readConfigFromEnvironmentAndApplyDefaults
      assertEqual "agent host" "127.0.0.1" (InternalConfig.agentHost conf)
      assertEqual "agent port" 42699 (InternalConfig.agentPort conf)


emptyConfig :: Config
emptyConfig =
  Config.defaultConfig