packages feed

hsyslog-udp-0.2.0: test/System/Posix/Syslog/UDPSpec.hs

{-# LANGUAGE OverloadedStrings #-}

module System.Posix.Syslog.UDPSpec (spec) where

import Data.Time.Clock (UTCTime)
import Data.Time.Format (defaultTimeLocale, parseTimeM)

import System.Posix.Syslog.UDP
import Test.Hspec

spec :: Spec
spec = do
  let upTo x = [minBound..x]
      noMask = [minBound..maxBound]
  describe "maskedPriVal" $ do
    it "returns a Just if priorities remain after masking" $
      let result = maskedPriVal (upTo Debug) Local4 Notice
      in result `shouldBe` Just (PriVal 165)

    it "returns Nothing if all priorities are masked" $
      let result = maskedPriVal (upTo Info) User Debug
      in result `shouldBe` Nothing

  describe "rfc5424Packet" $ do
    let (Just priVal) = maskedPriVal noMask User Debug

    it "uses the NILVALUE for Nothing values" $
      let
        time = Nothing :: Maybe UTCTime
        result = rfc5424Packet priVal time Nothing Nothing Nothing Nothing Nothing "test log message"
        expected = "<15>1 - - - - - - test log message"
      in
        result `shouldBe` expected

    it "uses the NILVALUE for empty bytestring values" $
      let
        time = Nothing :: Maybe UTCTime
        result = rfc5424Packet priVal time (Just $ HostName "") (Just $ AppName "") (Just $ ProcessID "") (Just $ MessageID "") Nothing "test log message"
        expected = "<15>1 - - - - - - test log message"
      in
        result `shouldBe` expected

    it "uses the correct values otherwise" $
      let
        time = Nothing :: Maybe UTCTime
        result = rfc5424Packet priVal time (Just $ HostName "host_name") (Just $ AppName "app_name") (Just $ ProcessID "proc_id") (Just $ MessageID "msg_id") Nothing "test log message"
        expected = "<15>1 - host_name app_name proc_id msg_id - test log message"
      in
        result `shouldBe` expected

    it "correctly formats the time" $
      let
        time = parseTimeM True defaultTimeLocale "%FT%X%QZ" "2003-10-11T22:14:15.003Z" :: Maybe UTCTime
        result = rfc5424Packet priVal time Nothing Nothing Nothing Nothing Nothing "test log message"
        expected = "<15>1 2003-10-11T22:14:15.003Z - - - - - test log message"
      in
        result `shouldBe` expected

  describe "rfc3164Packet" $ do
    let
      (Just priVal) = maskedPriVal noMask User Debug
      (Just time) = parseTimeM True defaultTimeLocale "%FT%X%QZ" "2003-10-11T22:14:15.003Z" :: Maybe UTCTime

    it "correctly formats the message" $
      let
        result = rfc3164Packet priVal time (HostName "host_name") (AppName "app_name") (ProcessID "12345") "test log message"
        expected = "<15>Oct 11 22:14:15 host_name app_name[12345]: test log message"
      in
        result `shouldBe` expected

  describe "rsyslogPacket" $ do
    let
      (Just priVal) = maskedPriVal noMask User Debug
      (Just time) = parseTimeM True defaultTimeLocale "%FT%X%QZ" "2003-10-11T22:14:15.003Z" :: Maybe UTCTime

    it "correctly formats the message" $
      let
        result = rsyslogPacket priVal time (HostName "host_name") (AppName "app_name") (ProcessID "12345") "test log message"
        expected = "<15>2003-10-11T22:14:15.003Z host_name app_name[12345]: test log message"
      in
        result `shouldBe` expected