packages feed

net-spider-rpl-0.4.1.0: test/NetSpider/RPL/DIOSpec.hs

{-# LANGUAGE OverloadedStrings #-}
module NetSpider.RPL.DIOSpec (main,spec) where

import Test.Hspec

import JSONUtil (specJSONFromTo)

import NetSpider.RPL.DIO
  ( DIONode(..), NeighborType(..), DIOLink(..), MergedDIOLink(..)
  )

main :: IO ()
main = hspec spec

spec :: Spec
spec = do
  describe "DIONode" $ do
    specJSONFromTo
      "DIONode"
      "{\"rank\": 355, \"dio_interval\": 5}"
      (DIONode 355 5)
  describe "NeighborType" $ do
    specJSONFromTo "PreferredParent" "\"preferred_parent\"" PreferredParent
    specJSONFromTo "ParentCandidate" "\"parent_candidate\"" ParentCandidate
    specJSONFromTo "OtherNeighbor" "\"other_neighbor\"" OtherNeighbor
  describe "DIOLink" $ do
    specJSONFromTo
      "DIOLink with non-empty metric"
      "{\"neighbor_type\": \"parent_candidate\", \"neighbor_rank\": 590, \"metric\": 132}"
      DIOLink
      { neighborType = ParentCandidate,
        neighborRank = 590,
        metric = Just 132
      }
  describe "MergedDIOLink" $ do
    specJSONFromTo
      "MergedDIOLink with non-empty fromDest"
      (    "{\"from_source\": {\"neighbor_type\": \"preferred_parent\", \"neighbor_rank\": 590, \"metric\": 132},"
        <> " \"from_dest\": {\"neighbor_type\": \"other_neighbor\", \"neighbor_rank\": 722, \"metric\": null}}"
      )
      MergedDIOLink
      { fromSource = DIOLink PreferredParent 590 (Just 132),
        fromDest = Just $ DIOLink OtherNeighbor 722 Nothing
      }