Using Hspec.

This commit is contained in:
Kazu Yamamoto 2012-12-11 17:35:56 +09:00
parent 10dbaaa4cc
commit 5b0ac4390c
4 changed files with 75 additions and 77 deletions

74
Test.hs
View File

@ -1,74 +0,0 @@
{-# LANGUAGE OverloadedStrings, TemplateHaskell #-}
module Test where
import qualified Data.ByteString.Char8 as BS
import Data.List
import Network.DNS as DNS
import Test.Framework.Providers.HUnit
import Test.Framework.TH.Prime
import Test.HUnit
----------------------------------------------------------------
main :: IO ()
main = $(defaultMainGenerator)
----------------------------------------------------------------
(?=) :: (Eq a, Show a) => IO a -> a -> IO ()
a ?= b = a >>= (@?= b)
case_lookupA :: Assertion
case_lookupA = do
rs <- makeResolvSeed defaultResolvConf
withResolver rs $ \resolver ->
DNS.lookupA resolver "www.mew.org" ?= Just ["202.232.15.101"]
(??=) :: (Ord a, Show a) => IO (Maybe [a]) -> [a] -> Assertion
a ??= bs = do
mas <- a
case mas of
Nothing -> False @? "should be Nothing"
Just as -> sort as @?= sort bs
case_lookupAAAA :: Assertion
case_lookupAAAA = do
rs <- makeResolvSeed defaultResolvConf
withResolver rs $ \resolver -> do
DNS.lookupAAAA resolver "mew.org" ?= Nothing
DNS.lookupAAAA resolver "www.mew.org" ?= Just ["2001:240:11e:c00::101"]
case_lookupTXT :: Assertion
case_lookupTXT = do
rs <- makeResolvSeed defaultResolvConf
withResolver rs $ \resolver ->
DNS.lookupTXT resolver "mew.org" ?= Just ["v=spf1 +mx -all"]
case_lookupAviaMX :: Assertion
case_lookupAviaMX = do
rs <- makeResolvSeed defaultResolvConf
withResolver rs $ \resolver ->
DNS.lookupAviaMX resolver "mixi.jp" ??= ["202.32.29.4", "202.32.29.5"]
case_lookupAviaCNAME :: Assertion
case_lookupAviaCNAME = do
rs <- makeResolvSeed defaultResolvConf
withResolver rs $ \resolver ->
DNS.lookupA resolver "ghs.google.com" ??= ["72.14.203.121"]
case_lookupPTR :: Assertion
case_lookupPTR = do
rs <- makeResolvSeed defaultResolvConf
withResolver rs $ \resolver ->
DNS.lookupPTR resolver rev ?= Just ["www-v4.iij.ad.jp."]
where
target = "210.130.137.80"
rev = BS.intercalate "." (reverse (BS.split '.' target))
`BS.append` ".in-addr.arpa"
case_lookupSRV :: Assertion
case_lookupSRV = do
rs <- makeResolvSeed defaultResolvConf
withResolver rs $ \resolver ->
DNS.lookupSRV resolver "_sip._tcp.cisco.com" ?= Just [(1,0,5060,"vcsgw.cisco.com.")]

View File

@ -7,10 +7,11 @@ License-File: LICENSE
Synopsis: DNS library in Haskell
Description: DNS library for clients and servers.
Category: Network
Cabal-Version: >= 1.6
Cabal-Version: >= 1.10
Build-Type: Simple
Extra-Source-Files: Test.hs, TestProtocol.hs
library
Library
Default-Language: Haskell2010
GHC-Options: -Wall
Exposed-Modules: Network.DNS
Network.DNS.Lookup
@ -49,6 +50,19 @@ library
, network-bytestring
, network-conduit
, random
Test-Suite spec
Type: exitcode-stdio-1.0
Default-Language: Haskell2010
Hs-Source-Dirs: test
Ghc-Options: -Wall
Main-Is: Spec.hs
Other-Modules: LookupSpec
Build-Depends: base
, bytestring
, dns
, hspec
Source-Repository head
Type: git
Location: git://github.com/kazu-yamamoto/dns.git

57
test/LookupSpec.hs Normal file
View File

@ -0,0 +1,57 @@
{-# LANGUAGE OverloadedStrings #-}
module LookupSpec where
import Control.Applicative
import qualified Data.ByteString.Char8 as BS
import Data.List
import Network.DNS as DNS
import Test.Hspec
spec :: Spec
spec = do
describe "lookupA" $ do
it "gets IPv4 addresses" $ do
rs <- makeResolvSeed defaultResolvConf
withResolver rs $ \resolver ->
DNS.lookupA resolver "www.mew.org" `shouldReturn` Just ["202.232.15.101"]
it "gets IPv4 addresses via CNAME" $ do
rs <- makeResolvSeed defaultResolvConf
withResolver rs $ \resolver ->
DNS.lookupA resolver "ghs.google.com" `shouldReturn` Just ["72.14.203.121"]
describe "lookupAAAA" $ do
it "gets IPv6 addresses" $ do
rs <- makeResolvSeed defaultResolvConf
withResolver rs $ \resolver -> do
DNS.lookupAAAA resolver "mew.org" `shouldReturn` Nothing
DNS.lookupAAAA resolver "www.mew.org" `shouldReturn` Just ["2001:240:11e:c00::101"]
describe "lookupTXT" $ do
it "gets TXT" $ do
rs <- makeResolvSeed defaultResolvConf
withResolver rs $ \resolver ->
DNS.lookupTXT resolver "mew.org" `shouldReturn` Just ["v=spf1 +mx -all"]
describe "lookupAviaMX" $ do
it "gets IPv4 addresses via MX" $ do
rs <- makeResolvSeed defaultResolvConf
withResolver rs $ \resolver -> do
as <- DNS.lookupAviaMX resolver "mixi.jp"
sort <$> as `shouldBe` Just ["202.32.29.4", "202.32.29.5"]
describe "lookupPTR" $ do
it "gets PTR" $ do
rs <- makeResolvSeed defaultResolvConf
withResolver rs $ \resolver -> do
let target = "210.130.137.80"
rev = BS.intercalate "." (reverse (BS.split '.' target))
`BS.append` ".in-addr.arpa"
DNS.lookupPTR resolver rev `shouldReturn` Just ["www-v4.iij.ad.jp."]
describe "lookupSRV" $ do
it "gets SRV" $ do
rs <- makeResolvSeed defaultResolvConf
withResolver rs $ \resolver ->
DNS.lookupSRV resolver "_sip._tcp.cisco.com" `shouldReturn` Just [(1,0,5060,"vcsgw.cisco.com.")]

1
test/Spec.hs Normal file
View File

@ -0,0 +1 @@
{-# OPTIONS_GHC -F -pgmF hspec-discover #-}