import Control.Exception
import Data.Typeable
import Network.Fancy
import System.IO
import System.Directory
import System.Random
main = do
ipv4_test
ipv6_test
unix_test
putStrLn "> connect tests"
tryE $ connectStream $ IPv4 "google.com" 80
tryE $ connectStream $ IPv4 "foobarbaz.invalid" 0
tryE $ connectDgram $ IPv4 "foobarbaz.invalid" 0
tryE $ connectStream $ IP "foobarbaz.invalid" 0
putStrLn "> done"
print =<< getCurrentHost
putStrLn ">testing instances"
let a = IP "" 0
print a
print (a == a)
print (a < a)
putStrLn "> dgram server"
tryE $ do
addr <- IPv4 "127.0.0.1" `fmap` rport
let rev :: String -> String
rev = reverse
dgramServer (serverSpec { address = addr, reverseAddress = ReverseName }) (\s sa -> putStrLn ("< connect from "++show sa) >> return [rev s])
withDgram addr $ \s -> do
send s "PING"
"GNIP" <- recv s 99
return ()
rport = randomRIO (2000,50000)
ipv4_test = server_test =<< (IPv4 "127.0.0.1" `fmap` rport)
ipv6_test = server_test =<< (IPv6 "::1" `fmap` rport)
unix_test = do
tryE $ removeFile "/tmp/unix_test"
server_test $ Unix "/tmp/unix_test"
server_test adr = tryE $ do
putStrLn ("> running server_test "++show adr)
streamServer (serverSpec { address = adr }) (\h sa -> putStrLn ("< connect from "++show sa) >> hGetLine h >>= hPutStrLn h . reverse)
putStrLn "> starting client"
withStream adr $ \h -> do
putStrLn ("> client to "++show adr)
hPutStrLn h "PING"
hFlush h
"GNIP" <- hGetLine h
putStrLn "> ok"
tryE :: IO a -> IO ()
tryE x = try x >>= eh
eh :: Either SomeException a -> IO ()
eh (Left e) = print e
eh _ = return ()