Browse Source

make test/Tests.hs typecheck

master
Philipp Balzarek 13 years ago
parent
commit
9f552d0e98
  1. 62
      tests/Tests.hs

62
tests/Tests.hs

@ -39,7 +39,7 @@ supervisor = read "uart14@species64739.dyndns.org"
testNS :: Text testNS :: Text
testNS = "xmpp:library:test" testNS = "xmpp:library:test"
type Xmpp a = CSession -> IO a type Xmpp a = Context -> IO a
data Payload = Payload data Payload = Payload
{ payloadCounter :: Int { payloadCounter :: Int
@ -59,8 +59,8 @@ payloadP = xpWrap (\((counter,flag) , message) -> Payload counter flag message)
invertPayload (Payload count flag message) = Payload (count + 1) (not flag) (Text.reverse message) invertPayload (Payload count flag message) = Payload (count + 1) (not flag) (Text.reverse message)
iqResponder csession = do iqResponder context = do
chan' <- listenIQChan Get testNS csession chan' <- listenIQChan Get testNS context
chan <- case chan' of chan <- case chan' of
Left _ -> liftIO $ putStrLn "Channel was already taken" Left _ -> liftIO $ putStrLn "Channel was already taken"
>> error "hanging up" >> error "hanging up"
@ -72,15 +72,15 @@ iqResponder csession = do
let answerPayload = invertPayload payload let answerPayload = invertPayload payload
let answerBody = pickleElem payloadP answerPayload let answerBody = pickleElem payloadP answerPayload
unless (payloadCounter payload == 3) . void $ unless (payloadCounter payload == 3) . void $
answerIQ next (Right $ Just answerBody) csession answerIQ next (Right $ Just answerBody) context
when (payloadCounter payload == 10) $ do when (payloadCounter payload == 10) $ do
threadDelay 1000000 threadDelay 1000000
endSession (session csession) endSession (session context)
autoAccept :: Xmpp () autoAccept :: Xmpp ()
autoAccept csession = forever $ do autoAccept context = forever $ do
st <- waitForPresence isPresenceSubscribe csession st <- waitForPresence isPresenceSubscribe context
sendPresence (presenceSubscribed (fromJust $ presenceFrom st)) csession sendPresence (presenceSubscribed (fromJust $ presenceFrom st)) context
simpleMessage :: Jid -> Text -> Message simpleMessage :: Jid -> Text -> Message
simpleMessage to txt = message simpleMessage to txt = message
@ -100,19 +100,19 @@ simpleMessage to txt = message
, messagePayload = [] , messagePayload = []
} }
sendUser m csession = sendMessage (simpleMessage supervisor $ Text.pack m) csession sendUser m context = sendMessage (simpleMessage supervisor $ Text.pack m) context
expect debug x y csession | x == y = debug "Ok." expect debug x y context | x == y = debug "Ok."
| otherwise = do | otherwise = do
let failMSG = "failed" ++ show x ++ " /= " ++ show y let failMSG = "failed" ++ show x ++ " /= " ++ show y
debug failMSG debug failMSG
sendUser failMSG csession sendUser failMSG context
wait3 :: MonadIO m => m () wait3 :: MonadIO m => m ()
wait3 = liftIO $ threadDelay 1000000 wait3 = liftIO $ threadDelay 1000000
discoTest debug csession = do discoTest debug context = do
q <- Disco.queryInfo "species64739.dyndns.org" Nothing csession q <- Disco.queryInfo "species64739.dyndns.org" Nothing context
case q of case q of
Left (Disco.DiscoXMLError el e) -> do Left (Disco.DiscoXMLError el e) -> do
debug (ppElement el) debug (ppElement el)
@ -121,7 +121,7 @@ discoTest debug csession = do
x -> debug $ show x x -> debug $ show x
q <- Disco.queryItems "species64739.dyndns.org" q <- Disco.queryItems "species64739.dyndns.org"
(Just "http://jabber.org/protocol/commands") csession (Just "http://jabber.org/protocol/commands") context
case q of case q of
Left (Disco.DiscoXMLError el e) -> do Left (Disco.DiscoXMLError el e) -> do
debug (ppElement el) debug (ppElement el)
@ -129,30 +129,30 @@ discoTest debug csession = do
debug (show $ length $ elementNodes el) debug (show $ length $ elementNodes el)
x -> debug $ show x x -> debug $ show x
iqTest debug we them csession = do iqTest debug we them context = do
forM [1..10] $ \count -> do forM [1..10] $ \count -> do
let message = Text.pack . show $ localpart we let message = Text.pack . show $ localpart we
let payload = Payload count (even count) (Text.pack $ show count) let payload = Payload count (even count) (Text.pack $ show count)
let body = pickleElem payloadP payload let body = pickleElem payloadP payload
debug "sending" debug "sending"
answer <- sendIQ' (Just them) Get Nothing body csession answer <- sendIQ' (Just them) Get Nothing body context
case answer of case answer of
IQResponseResult r -> do IQResponseResult r -> do
debug "received" debug "received"
let Right answerPayload = unpickleElem payloadP let Right answerPayload = unpickleElem payloadP
(fromJust $ iqResultPayload r) (fromJust $ iqResultPayload r)
expect debug (invertPayload payload) answerPayload csession expect debug (invertPayload payload) answerPayload context
IQResponseTimeout -> do IQResponseTimeout -> do
debug $ "Timeout in packet: " ++ show count debug $ "Timeout in packet: " ++ show count
IQResponseError e -> do IQResponseError e -> do
debug $ "Error in packet: " ++ show count debug $ "Error in packet: " ++ show count
liftIO $ threadDelay 100000 liftIO $ threadDelay 100000
sendUser "All tests done" csession sendUser "All tests done" context
debug "ending session" debug "ending session"
fork action csession = do fork action context = do
csession' <- forkCSession csession context' <- forkContext context
forkIO $ action csession' forkIO $ action context'
ibrTest debug uname pw = IBR.registerWith [ (IBR.Username, "testuser2") ibrTest debug uname pw = IBR.registerWith [ (IBR.Username, "testuser2")
, (IBR.Password, "pwd") , (IBR.Password, "pwd")
@ -166,13 +166,13 @@ runMain debug number multi = do
0 -> (testUser2, testUser1,False) 0 -> (testUser2, testUser1,False)
let debug' = liftIO . atomically . let debug' = liftIO . atomically .
debug . (("Thread " ++ show number ++ ":") ++) debug . (("Thread " ++ show number ++ ":") ++)
csession <- newSessionChans context <- newContext
setConnectionClosedHandler (\e s -> do setConnectionClosedHandler (\e s -> do
debug' $ "connection lost because " ++ show e debug' $ "connection lost because " ++ show e
endSession s) (session csession) endSession s) (session context)
debug' "running" debug' "running"
flip withConnection (session csession) $ Ex.catch (do flip withConnection (session context) $ Ex.catch (do
connect "localhost" (PortNumber 5222) "species64739.dyndns.org" connect "localhost" (PortNumber 5222) "species64739.dyndns.org"
startTLS exampleParams startTLS exampleParams
-- debug' "ibr start" -- debug' "ibr start"
@ -188,15 +188,15 @@ runMain debug number multi = do
liftIO . void $ forM features $ \f -> debug' $ ppElement f liftIO . void $ forM features $ \f -> debug' $ ppElement f
) )
(\e -> debug' $ show (e ::Ex.SomeException)) (\e -> debug' $ show (e ::Ex.SomeException))
sendPresence presenceOnline csession sendPresence presenceOnline context
thread1 <- fork autoAccept csession thread1 <- fork autoAccept context
sendPresence (presenceSubscribe them) csession sendPresence (presenceSubscribe them) context
thread2 <- fork iqResponder csession thread2 <- fork iqResponder context
when active $ do when active $ do
liftIO $ threadDelay 1000000 -- Wait for the other thread to go online liftIO $ threadDelay 1000000 -- Wait for the other thread to go online
-- discoTest debug' -- discoTest debug'
when multi $ iqTest debug' we them csession when multi $ iqTest debug' we them context
closeConnection (session csession) closeConnection (session context)
killThread thread1 killThread thread1
killThread thread2 killThread thread2
return () return ()
@ -207,7 +207,7 @@ runMain debug number multi = do
putStrLn "" putStrLn ""
putStrLn "" putStrLn ""
) )
csession context
liftIO . forever $ threadDelay 1000000 liftIO . forever $ threadDelay 1000000
return () return ()

Loading…
Cancel
Save