]> gitweb @ CieloNegro.org - haskell-dns.git/blobdiff - DNSUnitTest.hs
defaultUserHooks --> simpleUserHooks
[haskell-dns.git] / DNSUnitTest.hs
index b388345d5f9174e441fceb08b8ddc3e9c3d99543..a77b049a40343cab60e89dbbc1f4170f7fbe229e 100644 (file)
@@ -2,45 +2,215 @@ import           Data.Binary
 import qualified Data.ByteString.Lazy as LBS
 import           Data.Word
 import           Network.DNS.Message
+import           Network.Socket.IsString ()
 import           Test.HUnit
 
 
-parseMsg :: [Word8] -> Message
-parseMsg = decode . LBS.pack
+messages :: [([Word8], Message)]
+messages = [ ( [ 0x22, 0x79, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00
+               , 0x00, 0x00, 0x00, 0x00, 0x04, 0x6D, 0x61, 0x69
+               , 0x6C, 0x0A, 0x63, 0x69, 0x65, 0x6C, 0x6F, 0x6E
+               , 0x65, 0x67, 0x72, 0x6F, 0x03, 0x6F, 0x72, 0x67
+               , 0x00, 0x00, 0x05, 0x00, 0x01
+               ]
+             , Message {
+                 msgHeader = Header {
+                               hdMessageID             = 8825
+                             , hdMessageType           = Query
+                             , hdOpcode                = StandardQuery
+                             , hdIsAuthoritativeAnswer = False
+                             , hdIsTruncated           = False
+                             , hdIsRecursionDesired    = True
+                             , hdIsRecursionAvailable  = False
+                             , hdResponseCode          = NoError
+                             }
+               , msgQuestions   = [ wrapQuestion $
+                                    Question {
+                                      qName  = "mail.cielonegro.org."
+                                    , qType  = CNAME
+                                    , qClass = IN
+                                    }
+                                  ]
+               , msgAnswers     = []
+               , msgAuthorities = []
+               , msgAdditionals = []
+               }
+             )
+           , ( [ 0x22, 0x79, 0x85, 0x00, 0x00, 0x01, 0x00, 0x01
+               , 0x00, 0x01, 0x00, 0x01, 0x04, 0x6D, 0x61, 0x69
+               , 0x6C, 0x0A, 0x63, 0x69, 0x65, 0x6C, 0x6F, 0x6E
+               , 0x65, 0x67, 0x72, 0x6F, 0x03, 0x6F, 0x72, 0x67
+               , 0x00, 0x00, 0x05, 0x00, 0x01, 0xC0, 0x0C, 0x00
+               , 0x05, 0x00, 0x01, 0x00, 0x01, 0x51, 0x80, 0x00
+               , 0x06, 0x03, 0x6E, 0x65, 0x6D, 0xC0, 0x11, 0xC0
+               , 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x0E
+               , 0x10, 0x00, 0x02, 0xC0, 0x31, 0xC0, 0x31, 0x00
+               , 0x01, 0x00, 0x01, 0x00, 0x00, 0x0E, 0x10, 0x00
+               , 0x04, 0xDB, 0x5E, 0x82, 0x8B
+               ]
+             , Message {
+                 msgHeader = Header {
+                               hdMessageID             = 8825
+                             , hdMessageType           = Response
+                             , hdOpcode                = StandardQuery
+                             , hdIsAuthoritativeAnswer = True
+                             , hdIsTruncated           = False
+                             , hdIsRecursionDesired    = True
+                             , hdIsRecursionAvailable  = False
+                             , hdResponseCode          = NoError
+                             }
+               , msgQuestions   = [ wrapQuestion $
+                                    Question {
+                                      qName  = "mail.cielonegro.org."
+                                    , qType  = CNAME
+                                    , qClass = IN
+                                    }
+                                  ]
+               , msgAnswers     = [ wrapRecord $
+                                    ResourceRecord {
+                                      rrName  = "mail.cielonegro.org."
+                                    , rrType  = CNAME
+                                    , rrClass = IN
+                                    , rrTTL   = 86400
+                                    , rrData  = "nem.cielonegro.org."
+                                    }
+                                  ]
+               , msgAuthorities = [ wrapRecord $
+                                    ResourceRecord {
+                                      rrName  = "cielonegro.org."
+                                    , rrType  = NS
+                                    , rrClass = IN
+                                    , rrTTL   = 3600
+                                    , rrData  = "nem.cielonegro.org."
+                                    }
+                                  ]
+               , msgAdditionals = [ wrapRecord $
+                                    ResourceRecord {
+                                      rrName  = "nem.cielonegro.org."
+                                    , rrType  = A
+                                    , rrClass = IN
+                                    , rrTTL   = 3600
+                                    , rrData  = "219.94.130.139"
+                                    }
+                                  ]
+               }
+             )
+           , ( [ 0xED, 0x68, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00
+               , 0x00, 0x00, 0x00, 0x00, 0x0A, 0x63, 0x69, 0x65
+               , 0x6C, 0x6F, 0x6E, 0x65, 0x67, 0x72, 0x6F, 0x03
+               , 0x6F, 0x72, 0x67, 0x00, 0x00, 0x06, 0x00, 0x01
+               ]
+             , Message {
+                 msgHeader = Header {
+                               hdMessageID             = 60776
+                             , hdMessageType           = Query
+                             , hdOpcode                = StandardQuery
+                             , hdIsAuthoritativeAnswer = False
+                             , hdIsTruncated           = False
+                             , hdIsRecursionDesired    = True
+                             , hdIsRecursionAvailable  = False
+                             , hdResponseCode          = NoError
+                             }
+               , msgQuestions   = [ wrapQuestion $
+                                    Question {
+                                      qName  = "cielonegro.org."
+                                    , qType  = SOA
+                                    , qClass = IN
+                                    }
+                                  ]
+               , msgAnswers     = []
+               , msgAuthorities = []
+               , msgAdditionals = []
+               }
+             )
+           , ( [ 0xED, 0x68, 0x85, 0x00, 0x00, 0x01, 0x00, 0x01
+               , 0x00, 0x01, 0x00, 0x01, 0x0A, 0x63, 0x69, 0x65
+               , 0x6C, 0x6F, 0x6E, 0x65, 0x67, 0x72, 0x6F, 0x03
+               , 0x6F, 0x72, 0x67, 0x00, 0x00, 0x06, 0x00, 0x01
+               , 0xC0, 0x0C, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00
+               , 0x0E, 0x10, 0x00, 0x21, 0x03, 0x6E, 0x65, 0x6D
+               , 0xC0, 0x0C, 0x04, 0x72, 0x6F, 0x6F, 0x74, 0xC0
+               , 0x2C, 0x77, 0xAF, 0xFC, 0x84, 0x00, 0x00, 0x0E
+               , 0x10, 0x00, 0x00, 0x03, 0x84, 0x00, 0x36, 0xEE
+               , 0x80, 0x00, 0x00, 0x0E, 0x10, 0xC0, 0x0C, 0x00
+               , 0x02, 0x00, 0x01, 0x00, 0x00, 0x0E, 0x10, 0x00
+               , 0x02, 0xC0, 0x2C, 0xC0, 0x2C, 0x00, 0x01, 0x00
+               , 0x01, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x04, 0xDB
+               , 0x5E, 0x82, 0x8B
+               ]
+             , Message {
+                 msgHeader = Header {
+                               hdMessageID             = 60776
+                             , hdMessageType           = Response
+                             , hdOpcode                = StandardQuery
+                             , hdIsAuthoritativeAnswer = True
+                             , hdIsTruncated           = False
+                             , hdIsRecursionDesired    = True
+                             , hdIsRecursionAvailable  = False
+                             , hdResponseCode          = NoError
+                             }
+               , msgQuestions   = [ wrapQuestion $
+                                    Question {
+                                      qName  = "cielonegro.org."
+                                    , qType  = SOA
+                                    , qClass = IN
+                                    }
+                                  ]
+               , msgAnswers     = [ wrapRecord $
+                                    ResourceRecord {
+                                      rrName  = "cielonegro.org."
+                                    , rrType  = SOA
+                                    , rrClass = IN
+                                    , rrTTL   = 3600
+                                    , rrData  = SOAFields {
+                                                  soaMasterNameServer   = "nem.cielonegro.org."
+                                                , soaResponsibleMailbox = "root.nem.cielonegro.org."
+                                                , soaSerialNumber       = 2008022148
+                                                , soaRefreshInterval    = 3600
+                                                , soaRetryInterval      = 900
+                                                , soaExpirationLimit    = 3600000
+                                                , soaMinimumTTL         = 3600
+                                                }
+                                    }
+                                  ]
+               , msgAuthorities = [ wrapRecord $
+                                    ResourceRecord {
+                                      rrName  = "cielonegro.org."
+                                    , rrType  = NS
+                                    , rrClass = IN
+                                    , rrTTL   = 3600
+                                    , rrData  = "nem.cielonegro.org."
+                                    }
+                                  ]
+               , msgAdditionals = [ wrapRecord $
+                                    ResourceRecord {
+                                      rrName  = "nem.cielonegro.org."
+                                    , rrType  = A
+                                    , rrClass = IN
+                                    , rrTTL   = 3600
+                                    , rrData  = "219.94.130.139"
+                                    }
+                                  ]
+               }
+             )
+           ]
+
+packMsg :: Message -> [Word8]
+packMsg = LBS.unpack . encode
 
+unpackMsg :: [Word8] -> Message
+unpackMsg = decode . LBS.pack
 
 testData :: [Test]
-testData = [ (parseMsg [ 0x22, 0x79, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00
-                       , 0x00, 0x00, 0x00, 0x00, 0x04, 0x6D, 0x61, 0x69
-                       , 0x6C, 0x0A, 0x63, 0x69, 0x65, 0x6C, 0x6F, 0x6E
-                       , 0x65, 0x67, 0x72, 0x6F, 0x03, 0x6F, 0x72, 0x67
-                       , 0x00, 0x00, 0x05, 0x00, 0x01
-                       ]
-              ~?=
-              Message {
-                msgHeader = Header {
-                              hdMessageID             = 8825
-                            , hdMessageType           = Query
-                            , hdOpcode                = StandardQuery
-                            , hdIsAuthoritativeAnswer = False
-                            , hdIsTruncated           = False
-                            , hdIsRecursionDesired    = True
-                            , hdIsRecursionAvailable  = False
-                            , hdResponseCode          = NoError
-                            }
-              , msgQuestions   = [ Question {
-                                     qName  = mkDomainName "mail.cielonegro.org."
-                                   , qType  = mkQueryType CNAME
-                                   , qClass = IN
-                                   }
-                                 ]
-              , msgAnswers     = []
-              , msgAuthorities = []
-              , msgAdditionals = []
-              }
-             )
-           ]
+testData = map mkPackTest messages
+           ++
+           map mkUnpackTest messages
+    where
+      mkPackTest :: ([Word8], Message) -> Test
+      mkPackTest (bin, msg) = packMsg msg ~?= bin
 
+      mkUnpackTest :: ([Word8], Message) -> Test
+      mkUnpackTest (bin, msg) = unpackMsg bin ~?= msg
 
 main :: IO ()
 main = runTestTT (test testData) >> return ()
\ No newline at end of file