{-# LANGUAGE OverloadedStrings #-} module Main where import Control.Monad ( replicateM ) import Network.Transport import Network.Transport.AMQP import Network.AMQP import Test.Tasty import Test.Tasty.HUnit main :: IO () main = defaultMain $ testGroup "API tests" [ testCase "simple" test_simple --, testCase "connection break" test_connectionBreak --, testCase "test multicast" test_multicast --, testCase "connect to non existent host" test_nonexists --, testCase "connect with prior knowledge" test_prior ] newTransport :: IO Transport newTransport = do conn <- openConnection "localhost" "/" "guest" "guest" let amqpTransport = AMQPParameters conn "simple-multicast" Nothing createTransport amqpTransport test_simple :: IO () test_simple = do transport <- newTransport Right ep1 <- newEndPoint transport Right ep2 <- newEndPoint transport Right c1 <- connect ep1 (address ep2) ReliableOrdered defaultConnectHints Right c2 <- connect ep2 (address ep1) ReliableOrdered defaultConnectHints Right _ <- send c1 ["123"] Right _ <- send c2 ["321"] close c1 close c2 [ConnectionOpened _ ReliableOrdered _, Received _ ["321"], ConnectionClosed _] <- replicateM 3 $ receive ep1 [ConnectionOpened _ ReliableOrdered _, Received _ ["123"], ConnectionClosed _] <- replicateM 3 $ receive ep2 closeTransport transport --test_connectionBreak :: IO () --test_connectionBreak = do -- (zmq, transport) <- -- createTransportExposeInternals defaultZMQParameters "127.0.0.1" -- Right ep1 <- newEndPoint transport -- Right ep2 <- newEndPoint transport -- Right ep3 <- newEndPoint transport -- -- Right c21 <- connect ep1 (address ep2) ReliableOrdered defaultConnectHints -- Right c22 <- connect ep2 (address ep1) ReliableOrdered defaultConnectHints -- Right c23 <- connect ep3 (address ep1) ReliableOrdered defaultConnectHints -- -- ConnectionOpened 1 ReliableOrdered _ <- receive ep2 -- ConnectionOpened 1 ReliableOrdered _ <- receive ep1 -- ConnectionOpened 2 ReliableOrdered _ <- receive ep1 -- -- breakConnection zmq (address ep1) (address ep2) -- -- ErrorEvent (TransportError (EventConnectionLost _ ) _) <- receive $ ep1 -- ErrorEvent (TransportError (EventConnectionLost _ ) _) <- receive $ ep2 -- -- Left (TransportError SendFailed _) <- send c21 ["test"] -- Left (TransportError SendFailed _) <- send c22 ["test"] -- -- Left (TransportError SendFailed _) <- send c23 ["test"] -- ErrorEvent (TransportError (EventConnectionLost _) _ ) <- receive ep1 -- Right c24 <- connect ep3 (address ep1) ReliableOrdered defaultConnectHints -- Right () <- send c24 ["final"] -- ConnectionOpened 3 ReliableOrdered _ <- receive ep1 -- Received 3 ["final"] <- receive ep1 -- closeTransport transport -- --test_multicast :: IO () --test_multicast = do -- transport <- createTransport defaultZMQParameters "127.0.0.1" -- Right ep1 <- newEndPoint transport -- Right ep2 <- newEndPoint transport -- Right g1 <- newMulticastGroup ep1 -- multicastSubscribe g1 -- threadDelay 1000000 -- multicastSend g1 ["test"] -- ReceivedMulticast _ ["test"] <- receive ep1 -- Right g2 <- resolveMulticastGroup ep2 (multicastAddress g1) -- multicastSubscribe g2 -- threadDelay 100000 -- multicastSend g2 ["test-2"] -- ReceivedMulticast _ ["test-2"] <- receive ep2 -- ReceivedMulticast _ ["test-2"] <- receive ep1 -- return () -- --test_auth :: IO () --test_auth = do -- tr2 <- -- createTransport defaultZMQParameters{ zmqSecurityMechanism = -- Just $ SecurityPlain "user" "password" } -- "127.0.0.1" -- Right ep3 <- newEndPoint tr2 -- Right ep4 <- newEndPoint tr2 -- Right c3 <- connect ep3 (address ep4) ReliableOrdered defaultConnectHints -- Right _ <- send c3 ["4456"] -- [ConnectionOpened 1 ReliableOrdered _, Received 1 ["4456"]] <- replicateM 2 $ receive ep4 -- Right c4 <- connect ep3 (address ep4) ReliableOrdered defaultConnectHints -- Right _ <- send c4 ["5567"] -- [ConnectionOpened 2 ReliableOrdered _, Received 2 ["5567"]] <- replicateM 2 $ receive ep4 -- return () -- --test_nonexists :: IO () --test_nonexists = do -- tr <- createTransport defaultZMQParameters "127.0.0.1" -- Right ep <- newEndPoint tr -- Left (TransportError ConnectFailed _) <- connect ep (EndPointAddress "tcp://129.0.0.1:7684") ReliableOrdered defaultConnectHints -- closeTransport tr -- --test_cleanup :: IO () --test_cleanup = do -- (zmq, transport) <- -- createTransportExposeInternals defaultZMQParameters "127.0.0.1" -- x <- newIORef (0::Int) -- Just _ <- registerCleanupAction zmq (modifyIORef x (+1)) -- Just u <- registerCleanupAction zmq (modifyIORef x (+1)) -- applyCleanupAction zmq u -- closeTransport transport -- 2 <- readIORef x -- return () -- --test_prior :: IO () --test_prior = do -- (zmqa, _) <- createTransportExposeInternals defaultZMQParameters "127.0.0.1" -- Right epa <- apiNewEndPoint defaultHints{hintsPort=Just 8888} zmqa -- -- (_, transportb) <- -- createTransportExposeInternals defaultZMQParameters "127.0.0.1" -- Right epb <- newEndPoint transportb -- Right _ <- connect epb (EndPointAddress "tcp://127.0.0.1:8888") ReliableOrdered defaultConnectHints -- (ConnectionOpened 1 ReliableOrdered _) <- receive epa -- return () --