]> gitweb @ CieloNegro.org - haskell-dns.git/blob - DNSUnitTest.hs
07d3adff52fdbe6a28ecf3ab62482a35c495b602
[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 parseMsg :: [Word8] -> Message
11 parseMsg = decode . LBS.pack
12
13
14 testData :: [Test]
15 testData = [ (parseMsg [ 0x22, 0x79, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00
16                        , 0x00, 0x00, 0x00, 0x00, 0x04, 0x6D, 0x61, 0x69
17                        , 0x6C, 0x0A, 0x63, 0x69, 0x65, 0x6C, 0x6F, 0x6E
18                        , 0x65, 0x67, 0x72, 0x6F, 0x03, 0x6F, 0x72, 0x67
19                        , 0x00, 0x00, 0x05, 0x00, 0x01
20                        ]
21               ~?=
22               Message {
23                 msgHeader = Header {
24                               hdMessageID             = 8825
25                             , hdMessageType           = Query
26                             , hdOpcode                = StandardQuery
27                             , hdIsAuthoritativeAnswer = False
28                             , hdIsTruncated           = False
29                             , hdIsRecursionDesired    = True
30                             , hdIsRecursionAvailable  = False
31                             , hdResponseCode          = NoError
32                             }
33               , msgQuestions   = [ Question {
34                                      qName  = mkDomainName "mail.cielonegro.org."
35                                    , qType  = wrapQueryType CNAME
36                                    , qClass = IN
37                                    }
38                                  ]
39               , msgAnswers     = []
40               , msgAuthorities = []
41               , msgAdditionals = []
42               }
43              )
44            , (parseMsg [ 0x22, 0x79, 0x85, 0x00, 0x00, 0x01, 0x00, 0x01
45                        , 0x00, 0x01, 0x00, 0x01, 0x04, 0x6D, 0x61, 0x69
46                        , 0x6C, 0x0A, 0x63, 0x69, 0x65, 0x6C, 0x6F, 0x6E
47                        , 0x65, 0x67, 0x72, 0x6F, 0x03, 0x6F, 0x72, 0x67
48                        , 0x00, 0x00, 0x05, 0x00, 0x01, 0xC0, 0x0C, 0x00
49                        , 0x05, 0x00, 0x01, 0x00, 0x01, 0x51, 0x80, 0x00
50                        , 0x06, 0x03, 0x6E, 0x65, 0x6D, 0xC0, 0x11, 0xC0
51                        , 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x0E
52                        , 0x10, 0x00, 0x02, 0xC0, 0x31, 0xC0, 0x31, 0x00
53                        , 0x01, 0x00, 0x01, 0x00, 0x00, 0x0E, 0x10, 0x00
54                        , 0x04, 0xDB, 0x5E, 0x82, 0x8B
55                        ]
56               ~?=
57               Message {
58                 msgHeader = Header {
59                               hdMessageID             = 8825
60                             , hdMessageType           = Response
61                             , hdOpcode                = StandardQuery
62                             , hdIsAuthoritativeAnswer = True
63                             , hdIsTruncated           = False
64                             , hdIsRecursionDesired    = True
65                             , hdIsRecursionAvailable  = False
66                             , hdResponseCode          = NoError
67                             }
68               , msgQuestions   = [ Question {
69                                      qName  = mkDomainName "mail.cielonegro.org."
70                                    , qType  = wrapQueryType CNAME
71                                    , qClass = IN
72                                    }
73                                  ]
74               , msgAnswers     = [ wrapRecord $
75                                    ResourceRecord {
76                                      rrName  = mkDomainName "mail.cielonegro.org."
77                                    , rrType  = CNAME
78                                    , rrClass = IN
79                                    , rrTTL   = 86400
80                                    , rrData  = mkDomainName "nem.cielonegro.org."
81                                    }
82                                  ]
83               , msgAuthorities = [ wrapRecord $
84                                    ResourceRecord {
85                                      rrName  = mkDomainName "cielonegro.org."
86                                    , rrType  = NS
87                                    , rrClass = IN
88                                    , rrTTL   = 3600
89                                    , rrData  = mkDomainName "nem.cielonegro.org."
90                                    }
91                                  ]
92               , msgAdditionals = [ wrapRecord $
93                                    ResourceRecord {
94                                      rrName  = mkDomainName "nem.cielonegro.org."
95                                    , rrType  = A
96                                    , rrClass = IN
97                                    , rrTTL   = 3600
98                                    , rrData  = unsafePerformIO (inet_addr "219.94.130.139")
99                                    }
100                                  ]
101               }
102              )
103            ]
104
105
106 main :: IO ()
107 main = runTestTT (test testData) >> return ()