]> gitweb @ CieloNegro.org - haskell-dns.git/blob - DNSUnitTest.hs
defaultUserHooks --> simpleUserHooks
[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.IsString ()
6 import           Test.HUnit
7
8
9 messages :: [([Word8], Message)]
10 messages = [ ( [ 0x22, 0x79, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00
11                , 0x00, 0x00, 0x00, 0x00, 0x04, 0x6D, 0x61, 0x69
12                , 0x6C, 0x0A, 0x63, 0x69, 0x65, 0x6C, 0x6F, 0x6E
13                , 0x65, 0x67, 0x72, 0x6F, 0x03, 0x6F, 0x72, 0x67
14                , 0x00, 0x00, 0x05, 0x00, 0x01
15                ]
16              , Message {
17                  msgHeader = Header {
18                                hdMessageID             = 8825
19                              , hdMessageType           = Query
20                              , hdOpcode                = StandardQuery
21                              , hdIsAuthoritativeAnswer = False
22                              , hdIsTruncated           = False
23                              , hdIsRecursionDesired    = True
24                              , hdIsRecursionAvailable  = False
25                              , hdResponseCode          = NoError
26                              }
27                , msgQuestions   = [ wrapQuestion $
28                                     Question {
29                                       qName  = "mail.cielonegro.org."
30                                     , qType  = CNAME
31                                     , qClass = IN
32                                     }
33                                   ]
34                , msgAnswers     = []
35                , msgAuthorities = []
36                , msgAdditionals = []
37                }
38              )
39            , ( [ 0x22, 0x79, 0x85, 0x00, 0x00, 0x01, 0x00, 0x01
40                , 0x00, 0x01, 0x00, 0x01, 0x04, 0x6D, 0x61, 0x69
41                , 0x6C, 0x0A, 0x63, 0x69, 0x65, 0x6C, 0x6F, 0x6E
42                , 0x65, 0x67, 0x72, 0x6F, 0x03, 0x6F, 0x72, 0x67
43                , 0x00, 0x00, 0x05, 0x00, 0x01, 0xC0, 0x0C, 0x00
44                , 0x05, 0x00, 0x01, 0x00, 0x01, 0x51, 0x80, 0x00
45                , 0x06, 0x03, 0x6E, 0x65, 0x6D, 0xC0, 0x11, 0xC0
46                , 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x0E
47                , 0x10, 0x00, 0x02, 0xC0, 0x31, 0xC0, 0x31, 0x00
48                , 0x01, 0x00, 0x01, 0x00, 0x00, 0x0E, 0x10, 0x00
49                , 0x04, 0xDB, 0x5E, 0x82, 0x8B
50                ]
51              , Message {
52                  msgHeader = Header {
53                                hdMessageID             = 8825
54                              , hdMessageType           = Response
55                              , hdOpcode                = StandardQuery
56                              , hdIsAuthoritativeAnswer = True
57                              , hdIsTruncated           = False
58                              , hdIsRecursionDesired    = True
59                              , hdIsRecursionAvailable  = False
60                              , hdResponseCode          = NoError
61                              }
62                , msgQuestions   = [ wrapQuestion $
63                                     Question {
64                                       qName  = "mail.cielonegro.org."
65                                     , qType  = CNAME
66                                     , qClass = IN
67                                     }
68                                   ]
69                , msgAnswers     = [ wrapRecord $
70                                     ResourceRecord {
71                                       rrName  = "mail.cielonegro.org."
72                                     , rrType  = CNAME
73                                     , rrClass = IN
74                                     , rrTTL   = 86400
75                                     , rrData  = "nem.cielonegro.org."
76                                     }
77                                   ]
78                , msgAuthorities = [ wrapRecord $
79                                     ResourceRecord {
80                                       rrName  = "cielonegro.org."
81                                     , rrType  = NS
82                                     , rrClass = IN
83                                     , rrTTL   = 3600
84                                     , rrData  = "nem.cielonegro.org."
85                                     }
86                                   ]
87                , msgAdditionals = [ wrapRecord $
88                                     ResourceRecord {
89                                       rrName  = "nem.cielonegro.org."
90                                     , rrType  = A
91                                     , rrClass = IN
92                                     , rrTTL   = 3600
93                                     , rrData  = "219.94.130.139"
94                                     }
95                                   ]
96                }
97              )
98            , ( [ 0xED, 0x68, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00
99                , 0x00, 0x00, 0x00, 0x00, 0x0A, 0x63, 0x69, 0x65
100                , 0x6C, 0x6F, 0x6E, 0x65, 0x67, 0x72, 0x6F, 0x03
101                , 0x6F, 0x72, 0x67, 0x00, 0x00, 0x06, 0x00, 0x01
102                ]
103              , Message {
104                  msgHeader = Header {
105                                hdMessageID             = 60776
106                              , hdMessageType           = Query
107                              , hdOpcode                = StandardQuery
108                              , hdIsAuthoritativeAnswer = False
109                              , hdIsTruncated           = False
110                              , hdIsRecursionDesired    = True
111                              , hdIsRecursionAvailable  = False
112                              , hdResponseCode          = NoError
113                              }
114                , msgQuestions   = [ wrapQuestion $
115                                     Question {
116                                       qName  = "cielonegro.org."
117                                     , qType  = SOA
118                                     , qClass = IN
119                                     }
120                                   ]
121                , msgAnswers     = []
122                , msgAuthorities = []
123                , msgAdditionals = []
124                }
125              )
126            , ( [ 0xED, 0x68, 0x85, 0x00, 0x00, 0x01, 0x00, 0x01
127                , 0x00, 0x01, 0x00, 0x01, 0x0A, 0x63, 0x69, 0x65
128                , 0x6C, 0x6F, 0x6E, 0x65, 0x67, 0x72, 0x6F, 0x03
129                , 0x6F, 0x72, 0x67, 0x00, 0x00, 0x06, 0x00, 0x01
130                , 0xC0, 0x0C, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00
131                , 0x0E, 0x10, 0x00, 0x21, 0x03, 0x6E, 0x65, 0x6D
132                , 0xC0, 0x0C, 0x04, 0x72, 0x6F, 0x6F, 0x74, 0xC0
133                , 0x2C, 0x77, 0xAF, 0xFC, 0x84, 0x00, 0x00, 0x0E
134                , 0x10, 0x00, 0x00, 0x03, 0x84, 0x00, 0x36, 0xEE
135                , 0x80, 0x00, 0x00, 0x0E, 0x10, 0xC0, 0x0C, 0x00
136                , 0x02, 0x00, 0x01, 0x00, 0x00, 0x0E, 0x10, 0x00
137                , 0x02, 0xC0, 0x2C, 0xC0, 0x2C, 0x00, 0x01, 0x00
138                , 0x01, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x04, 0xDB
139                , 0x5E, 0x82, 0x8B
140                ]
141              , Message {
142                  msgHeader = Header {
143                                hdMessageID             = 60776
144                              , hdMessageType           = Response
145                              , hdOpcode                = StandardQuery
146                              , hdIsAuthoritativeAnswer = True
147                              , hdIsTruncated           = False
148                              , hdIsRecursionDesired    = True
149                              , hdIsRecursionAvailable  = False
150                              , hdResponseCode          = NoError
151                              }
152                , msgQuestions   = [ wrapQuestion $
153                                     Question {
154                                       qName  = "cielonegro.org."
155                                     , qType  = SOA
156                                     , qClass = IN
157                                     }
158                                   ]
159                , msgAnswers     = [ wrapRecord $
160                                     ResourceRecord {
161                                       rrName  = "cielonegro.org."
162                                     , rrType  = SOA
163                                     , rrClass = IN
164                                     , rrTTL   = 3600
165                                     , rrData  = SOAFields {
166                                                   soaMasterNameServer   = "nem.cielonegro.org."
167                                                 , soaResponsibleMailbox = "root.nem.cielonegro.org."
168                                                 , soaSerialNumber       = 2008022148
169                                                 , soaRefreshInterval    = 3600
170                                                 , soaRetryInterval      = 900
171                                                 , soaExpirationLimit    = 3600000
172                                                 , soaMinimumTTL         = 3600
173                                                 }
174                                     }
175                                   ]
176                , msgAuthorities = [ wrapRecord $
177                                     ResourceRecord {
178                                       rrName  = "cielonegro.org."
179                                     , rrType  = NS
180                                     , rrClass = IN
181                                     , rrTTL   = 3600
182                                     , rrData  = "nem.cielonegro.org."
183                                     }
184                                   ]
185                , msgAdditionals = [ wrapRecord $
186                                     ResourceRecord {
187                                       rrName  = "nem.cielonegro.org."
188                                     , rrType  = A
189                                     , rrClass = IN
190                                     , rrTTL   = 3600
191                                     , rrData  = "219.94.130.139"
192                                     }
193                                   ]
194                }
195              )
196            ]
197
198 packMsg :: Message -> [Word8]
199 packMsg = LBS.unpack . encode
200
201 unpackMsg :: [Word8] -> Message
202 unpackMsg = decode . LBS.pack
203
204 testData :: [Test]
205 testData = map mkPackTest messages
206            ++
207            map mkUnpackTest messages
208     where
209       mkPackTest :: ([Word8], Message) -> Test
210       mkPackTest (bin, msg) = packMsg msg ~?= bin
211
212       mkUnpackTest :: ([Word8], Message) -> Test
213       mkUnpackTest (bin, msg) = unpackMsg bin ~?= msg
214
215 main :: IO ()
216 main = runTestTT (test testData) >> return ()