]> gitweb @ CieloNegro.org - haskell-dns.git/blob - DNSUnitTest.hs
QueryType and QueryClass should also be exported.
[haskell-dns.git] / DNSUnitTest.hs
1 import           Data.Binary
2 import qualified Data.ByteString.Lazy as LBS
3 import           Data.Word
4 import           Network.DNS.Message
5 import           Network.Socket
6 import           System.IO.Unsafe
7 import           Test.HUnit
8
9
10 messages :: [([Word8], Message)]
11 messages = [ ( [ 0x22, 0x79, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00
12                , 0x00, 0x00, 0x00, 0x00, 0x04, 0x6D, 0x61, 0x69
13                , 0x6C, 0x0A, 0x63, 0x69, 0x65, 0x6C, 0x6F, 0x6E
14                , 0x65, 0x67, 0x72, 0x6F, 0x03, 0x6F, 0x72, 0x67
15                , 0x00, 0x00, 0x05, 0x00, 0x01
16                ]
17              , Message {
18                  msgHeader = Header {
19                                hdMessageID             = 8825
20                              , hdMessageType           = Query
21                              , hdOpcode                = StandardQuery
22                              , hdIsAuthoritativeAnswer = False
23                              , hdIsTruncated           = False
24                              , hdIsRecursionDesired    = True
25                              , hdIsRecursionAvailable  = False
26                              , hdResponseCode          = NoError
27                              }
28                , msgQuestions   = [ wrapQuestion $
29                                     Question {
30                                       qName  = mkDomainName "mail.cielonegro.org."
31                                     , qType  = CNAME
32                                     , qClass = IN
33                                     }
34                                   ]
35                , msgAnswers     = []
36                , msgAuthorities = []
37                , msgAdditionals = []
38                }
39              )
40            , ( [ 0x22, 0x79, 0x85, 0x00, 0x00, 0x01, 0x00, 0x01
41                , 0x00, 0x01, 0x00, 0x01, 0x04, 0x6D, 0x61, 0x69
42                , 0x6C, 0x0A, 0x63, 0x69, 0x65, 0x6C, 0x6F, 0x6E
43                , 0x65, 0x67, 0x72, 0x6F, 0x03, 0x6F, 0x72, 0x67
44                , 0x00, 0x00, 0x05, 0x00, 0x01, 0xC0, 0x0C, 0x00
45                , 0x05, 0x00, 0x01, 0x00, 0x01, 0x51, 0x80, 0x00
46                , 0x06, 0x03, 0x6E, 0x65, 0x6D, 0xC0, 0x11, 0xC0
47                , 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x0E
48                , 0x10, 0x00, 0x02, 0xC0, 0x31, 0xC0, 0x31, 0x00
49                , 0x01, 0x00, 0x01, 0x00, 0x00, 0x0E, 0x10, 0x00
50                , 0x04, 0xDB, 0x5E, 0x82, 0x8B
51                ]
52              , Message {
53                  msgHeader = Header {
54                                hdMessageID             = 8825
55                              , hdMessageType           = Response
56                              , hdOpcode                = StandardQuery
57                              , hdIsAuthoritativeAnswer = True
58                              , hdIsTruncated           = False
59                              , hdIsRecursionDesired    = True
60                              , hdIsRecursionAvailable  = False
61                              , hdResponseCode          = NoError
62                              }
63                , msgQuestions   = [ wrapQuestion $
64                                     Question {
65                                       qName  = mkDomainName "mail.cielonegro.org."
66                                     , qType  = CNAME
67                                     , qClass = IN
68                                     }
69                                   ]
70                , msgAnswers     = [ wrapRecord $
71                                     ResourceRecord {
72                                       rrName  = mkDomainName "mail.cielonegro.org."
73                                     , rrType  = CNAME
74                                     , rrClass = IN
75                                     , rrTTL   = 86400
76                                     , rrData  = mkDomainName "nem.cielonegro.org."
77                                     }
78                                   ]
79                , msgAuthorities = [ wrapRecord $
80                                     ResourceRecord {
81                                       rrName  = mkDomainName "cielonegro.org."
82                                     , rrType  = NS
83                                     , rrClass = IN
84                                     , rrTTL   = 3600
85                                     , rrData  = mkDomainName "nem.cielonegro.org."
86                                     }
87                                   ]
88                , msgAdditionals = [ wrapRecord $
89                                     ResourceRecord {
90                                       rrName  = mkDomainName "nem.cielonegro.org."
91                                     , rrType  = A
92                                     , rrClass = IN
93                                     , rrTTL   = 3600
94                                     , rrData  = unsafePerformIO (inet_addr "219.94.130.139")
95                                     }
96                                   ]
97                }
98              )
99            ]
100
101 packMsg :: Message -> [Word8]
102 packMsg = LBS.unpack . encode
103
104 unpackMsg :: [Word8] -> Message
105 unpackMsg = decode . LBS.pack
106
107 testData :: [Test]
108 testData = map mkPackTest messages
109            ++
110            map mkUnpackTest messages
111     where
112       mkPackTest :: ([Word8], Message) -> Test
113       mkPackTest (bin, msg) = packMsg msg ~?= bin
114
115       mkUnpackTest :: ([Word8], Message) -> Test
116       mkUnpackTest (bin, msg) = unpackMsg bin ~?= msg
117
118 main :: IO ()
119 main = runTestTT (test testData) >> return ()