dns-0.3.0: TestProtocol.hs
{-# LANGUAGE OverloadedStrings #-}
module TestProtocol where
import Data.IP
import Network.DNS
import Network.DNS.Internal
import Test.Framework (defaultMain, testGroup, Test)
import Test.Framework.Providers.HUnit
import Test.HUnit hiding (Test)
tests :: [Test]
tests =
[ testGroup "Test case"
[ testCase "QueryA" (test_Format testQueryA)
, testCase "QueryAAAA" (test_Format testQueryAAAA)
, testCase "ResponseA" (test_Format testResponseA)
]
]
defaultHeader :: DNSHeader
defaultHeader = header defaultQuery
testQueryA :: DNSFormat
testQueryA = defaultQuery
{ header = defaultHeader
{ identifier = 1000
, qdCount = 1
}
, question = [makeQuestion "www.mew.org." A]
}
testQueryAAAA :: DNSFormat
testQueryAAAA = defaultQuery
{ header = defaultHeader
{ identifier = 1000
, qdCount = 1
}
, question = [makeQuestion "www.mew.org." AAAA]
}
testResponseA :: DNSFormat
testResponseA = DNSFormat { header = DNSHeader { identifier = 61046
, flags = DNSFlags { qOrR = QR_Response
, opcode = OP_STD
, authAnswer = False
, trunCation = False
, recDesired = True
, recAvailable = True
, rcode = NoErr
}
, qdCount = 1
, anCount = 8
, nsCount = 2
, arCount = 4
}
, question = [Question {qname = "492056364.qzone.qq.com.", qtype = A}]
, answer = [ ResourceRecord { rrname = "492056364.qzone.qq.com."
, rrtype = A
, rrttl = 568
, rdlen = 4
, rdata = RD_A $ toIPv4 [119, 147, 15, 122]
}
, ResourceRecord { rrname = "492056364.qzone.qq.com."
, rrtype = A
, rrttl = 568
, rdlen = 4
, rdata = RD_A $ toIPv4 [119, 147, 79, 106]
}
, ResourceRecord { rrname = "492056364.qzone.qq.com."
, rrtype = A
, rrttl = 568
, rdlen = 4
, rdata = RD_A $ toIPv4 [183, 60, 55, 43]
}
, ResourceRecord { rrname = "492056364.qzone.qq.com."
, rrtype = A
, rrttl = 568
, rdlen = 4
, rdata = RD_A $ toIPv4 [183, 60, 55, 107]
}
, ResourceRecord { rrname = "492056364.qzone.qq.com."
, rrtype = A
, rrttl = 568
, rdlen = 4
, rdata = RD_A $ toIPv4 [113, 108, 7, 172]
}
, ResourceRecord { rrname = "492056364.qzone.qq.com."
, rrtype = A
, rrttl = 568
, rdlen = 4
, rdata = RD_A $ toIPv4 [113, 108, 7, 174]
}
, ResourceRecord { rrname = "492056364.qzone.qq.com."
, rrtype = A
, rrttl = 568
, rdlen = 4
, rdata = RD_A $ toIPv4 [113, 108, 7, 175]
}
, ResourceRecord { rrname = "492056364.qzone.qq.com."
, rrtype = A
, rrttl = 568
, rdlen = 4
, rdata = RD_A $ toIPv4 [119, 147, 15, 100]
}
]
, authority = [ ResourceRecord { rrname = "qzone.qq.com."
, rrtype = NS
, rrttl = 45919
, rdlen = 10
, rdata = RD_NS "ns-tel2.qq.com."
}
, ResourceRecord { rrname = "qzone.qq.com."
, rrtype = NS
, rrttl = 45919
, rdlen = 10
, rdata = RD_NS "ns-tel1.qq.com."
}
]
, additional = [ ResourceRecord { rrname = "ns-tel1.qq.com."
, rrtype = A
, rrttl = 46520
, rdlen = 4
, rdata = RD_A $ toIPv4 [121, 14, 73, 115]
}
, ResourceRecord { rrname = "ns-tel2.qq.com."
, rrtype = A
, rrttl = 2890
, rdlen = 4
, rdata = RD_A $ toIPv4 [222, 73, 76, 226]
}
, ResourceRecord { rrname = "ns-tel2.qq.com."
, rrtype = A
, rrttl = 2890
, rdlen = 4
, rdata = RD_A $ toIPv4 [183, 60, 3, 202]
}
, ResourceRecord { rrname = "ns-tel2.qq.com."
, rrtype = A
, rrttl = 2890
, rdlen = 4
, rdata = RD_A $ toIPv4 [218, 30, 72, 180]
}
]
}
assertEither :: (a -> String) -> Either a b -> IO ()
assertEither f = either (assertFailure . f) (const $ return ())
test_Format :: DNSFormat -> IO ()
test_Format fmt = do
assertEither id result
let (Right fmt') = result
assertEqual "fail" fmt fmt'
where
bs = encode fmt
result = decode bs
main :: IO ()
main = defaultMain tests