{-| Module : Jupyter.Test.ZeroMQ Description : Miscellaneous tests for Jupyter.ZeroMQ. Copyright : (c) Andrew Gibiansky, 2016 License : MIT Maintainer : andrew.gibiansky@gmail.com Stability : stable Portability : POSIX -} {-# LANGUAGE OverloadedStrings #-} module Jupyter.Test.ZeroMQ (zmqTests) where -- Imports from 'transformers' import Control.Monad.IO.Class (liftIO) -- Imports from 'tasty' import Test.Tasty (TestTree, testGroup) -- Imports from 'tasty-hunit' import Test.Tasty.HUnit (testCase, (@=?)) -- Imports from 'zeromq4-haskell' import System.ZMQ4.Monadic (Req(..), send, receive) -- Imports from 'jupyter' import Jupyter.ZeroMQ import Jupyter.Test.Utils (inTempDir, connectedSocket) zmqTests :: TestTree zmqTests = testGroup "ZeroMQ Tests" [testHeartbeatSocket, testReadProfile] -- Test that messages can be sent and received on the heartbeat socket. testHeartbeatSocket :: TestTree testHeartbeatSocket = testCase "Heartbeat Socket" $ withKernelSockets Nothing $ \profile socks -> do heartbeatClientSocket <- connectedSocket profile profileHeartbeatPort Req let message = "heartbeat" send heartbeatClientSocket [] message received <- receive (kernelHeartbeatSocket socks) liftIO $ message @=? received -- Test that kernel profile encoding and decoding works as expected. testReadProfile :: TestTree testReadProfile = testCase "Reading profile file" $ inTempDir $ \_ -> do let filename = "profile.json" writeProfile testProfile filename profile <- readProfile filename Just testProfile @=? profile where testProfile = KernelProfile { profileIp = "127.0.0.1" , profileTransport = TCP , profileStdinPort = 3982 , profileControlPort = 3983 , profileHeartbeatPort = 3984 , profileShellPort = 3945 , profileIopubPort = 3942 , profileSignatureKey = "" }