packages feed

instana-haskell-trace-sdk-0.10.2.0: test/unit/Instana/SDK/Internal/AgentConnection/DefaultGatewayIpTest.hs

{-# LANGUAGE DeriveGeneric     #-}
{-# LANGUAGE OverloadedStrings #-}
module Instana.SDK.Internal.AgentConnection.DefaultGatewayIpTest (allTests) where


import           Test.HUnit

import           Instana.SDK.Internal.AgentConnection.DefaultGatewayIp (extractDefaultGatewayIp)


allTests :: Test
allTests =
  TestList
    [ TestLabel "shouldExtractDefaultGatewayIpFromFile" shouldExtractDefaultGatewayIpFromFile
    , TestLabel "shouldNotExtractFromEmptyFile" shouldNotExtractFromEmptyFile
    , TestLabel "shouldNotExtractFromLinesWithTooFewFields" shouldNotExtractFromLinesWithTooFewFields
    , TestLabel "shouldNotExtractIfNoLineHas8Zeroes" shouldNotExtractIfNoLineHas8Zeroes
    , TestLabel "shouldNotExtractIfThirdFieldHasWrongLength" shouldNotExtractIfThirdFieldHasWrongLength
    , TestLabel "shouldCopeWithThirdFieldNotAHexString" shouldCopeWithThirdFieldNotAHexString
    ]


shouldExtractDefaultGatewayIpFromFile :: Test
shouldExtractDefaultGatewayIpFromFile =
  let
    defaultGatewayIp =
      extractDefaultGatewayIp $
        "Iface\tDestination\tGateway\tFlags\tRefCnt\tUse\tMetricMask\tMTU\tWindow\tIRTT\n" ++
        "eth0\t0000F1AC\t00000000\t0001\t0\t0\t0\t0000FFFF0\t0\t0\n" ++
        "eth0\t00000000\t010011AC\t0003\t0\t0\t0\t000000000\t0\t0\n" ++
        "eth0\t000011AC\t00000000\t0001\t0\t0\t0\t0000FFFF0\t0\t0"
  in
  TestCase $
    assertEqual "default gateway IP" (Just "172.17.0.1") defaultGatewayIp


shouldNotExtractFromEmptyFile :: Test
shouldNotExtractFromEmptyFile =
  let
    defaultGatewayIp = extractDefaultGatewayIp ""
  in
  TestCase $
    assertEqual "default gateway IP" Nothing defaultGatewayIp


shouldNotExtractFromLinesWithTooFewFields :: Test
shouldNotExtractFromLinesWithTooFewFields =
  let
    defaultGatewayIp =
      extractDefaultGatewayIp $
        "Iface\tDestination\n" ++
        "eth0\t00000000"
  in
  TestCase $
    assertEqual "default gateway IP" Nothing defaultGatewayIp


shouldNotExtractIfNoLineHas8Zeroes :: Test
shouldNotExtractIfNoLineHas8Zeroes =
  let
    defaultGatewayIp =
      extractDefaultGatewayIp $
        "eth0\t00009000\t010011AC\t0003\t0\t0\t0\t000000000\t0\t0"
  in
  TestCase $
    assertEqual "default gateway IP" Nothing defaultGatewayIp


shouldNotExtractIfThirdFieldHasWrongLength :: Test
shouldNotExtractIfThirdFieldHasWrongLength =
  let
    defaultGatewayIp =
      extractDefaultGatewayIp $
        "eth0\t00000000\t010011A\t0003\t0\t0\t0\t000000000\t0\t0"
  in
  TestCase $
    assertEqual "default gateway IP" Nothing defaultGatewayIp


shouldCopeWithThirdFieldNotAHexString :: Test
shouldCopeWithThirdFieldNotAHexString =
  let
    defaultGatewayIp =
      extractDefaultGatewayIp $
        "eth0\t00000000\tghijklmn\t0003\t0\t0\t0\t000000000\t0\t0"
  in
  TestCase $
    assertEqual "default gateway IP" (Just "0.0.0.0") defaultGatewayIp