1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137
|
{-# LANGUAGE OverloadedStrings #-}
module EncodeSpec where
import Data.IP
import Test.Hspec
import Network.DNS
spec :: Spec
spec = do
describe "encode" $ do
it "encodes DNSMessage correctly" $ do
check1 testQueryA
check1 testQueryAAAA
check1 testResponseA
check1 testResponseTXT
describe "decode" $ do
it "decodes DNSMessage correctly" $ do
check2 testQueryA
check2 testQueryAAAA
check2 testResponseA
check2 testResponseTXT
check1 :: DNSMessage -> Expectation
check1 inp = out `shouldBe` Right inp
where
bs = encode inp
out = decode bs
check2 :: DNSMessage -> Expectation
check2 inp = bs' `shouldBe` bs
where
bs = encode inp
Right out = decode bs
bs' = encode out
defaultHeader :: DNSHeader
defaultHeader = header defaultQuery
testQueryA :: DNSMessage
testQueryA = defaultQuery {
header = defaultHeader {
identifier = 1000
}
, question = [Question "www.mew.org." A]
}
testQueryAAAA :: DNSMessage
testQueryAAAA = defaultQuery {
header = defaultHeader {
identifier = 1001
}
, question = [Question "www.mew.org." AAAA]
}
testResponseA :: DNSMessage
testResponseA = DNSMessage {
header = DNSHeader {
identifier = 61046
, flags = DNSFlags {
qOrR = QR_Response
, opcode = OP_STD
, authAnswer = False
, trunCation = False
, recDesired = True
, recAvailable = True
, rcode = NoErr
, authenData = False
, chkDisable = False
}
}
, ednsHeader = NoEDNS
, question = [Question {
qname = "492056364.qzone.qq.com."
, qtype = A
}
]
, answer =
[ ResourceRecord "492056364.qzone.qq.com." A classIN 568 (RD_A $ toIPv4 [119, 147, 15, 122])
, ResourceRecord "492056364.qzone.qq.com." A classIN 568 (RD_A $ toIPv4 [119, 147, 79, 106])
, ResourceRecord "492056364.qzone.qq.com." A classIN 568 (RD_A $ toIPv4 [183, 60, 55, 43])
, ResourceRecord "492056364.qzone.qq.com." A classIN 568 (RD_A $ toIPv4 [183, 60, 55, 107])
, ResourceRecord "492056364.qzone.qq.com." A classIN 568 (RD_A $ toIPv4 [113, 108, 7, 172])
, ResourceRecord "492056364.qzone.qq.com." A classIN 568 (RD_A $ toIPv4 [113, 108, 7, 174])
, ResourceRecord "492056364.qzone.qq.com." A classIN 568 (RD_A $ toIPv4 [113, 108, 7, 175])
, ResourceRecord "492056364.qzone.qq.com." A classIN 568 (RD_A $ toIPv4 [119, 147, 15, 100])
]
, authority =
[ ResourceRecord "qzone.qq.com." NS classIN 45919 (RD_NS "ns-tel2.qq.com.")
, ResourceRecord "qzone.qq.com." NS classIN 45919 (RD_NS "ns-tel1.qq.com.")
]
, additional =
[ ResourceRecord "ns-tel1.qq.com." A classIN 46520 (RD_A $ toIPv4 [121, 14, 73, 115])
, ResourceRecord "ns-tel2.qq.com." A classIN 2890 (RD_A $ toIPv4 [222, 73, 76, 226])
, ResourceRecord "ns-tel2.qq.com." A classIN 2890 (RD_A $ toIPv4 [183, 60, 3, 202])
, ResourceRecord "ns-tel2.qq.com." A classIN 2890 (RD_A $ toIPv4 [218, 30, 72, 180])
]
}
testResponseTXT :: DNSMessage
testResponseTXT = DNSMessage {
header = DNSHeader {
identifier = 48724
, flags = DNSFlags {
qOrR = QR_Response
, opcode = OP_STD
, authAnswer = False
, trunCation = False
, recDesired = True
, recAvailable = True
, rcode = NoErr
, authenData = False
, chkDisable = False
}
}
, ednsHeader = EDNSheader defaultEDNS
, question = [Question {
qname = "492056364.qzone.qq.com."
, qtype = TXT
}
]
, answer =
[ ResourceRecord "492056364.qzone.qq.com." TXT classIN 0 (RD_TXT "simple txt line")
]
, authority =
[ ResourceRecord "qzone.qq.com." NS classIN 45919 (RD_NS "ns-tel2.qq.com.")
, ResourceRecord "qzone.qq.com." NS classIN 45919 (RD_NS "ns-tel1.qq.com.")
]
, additional =
[ ResourceRecord "ns-tel1.qq.com." A classIN 46520 (RD_A $ toIPv4 [121, 14, 73, 115])
, ResourceRecord "ns-tel2.qq.com." A classIN 2890 (RD_A $ toIPv4 [222, 73, 76, 226])
, ResourceRecord "ns-tel2.qq.com." A classIN 2890 (RD_A $ toIPv4 [183, 60, 3, 202])
, ResourceRecord "ns-tel2.qq.com." A classIN 2890 (RD_A $ toIPv4 [218, 30, 72, 180])
]
}
|