packages feed

msgpack-rpc-0.9.0: test.hs

{-# LANGUAGE OverloadedStrings #-}

import Control.Concurrent
import Control.Concurrent.Async
import Control.Monad.Trans

import Test.Hspec

import Network (withSocketsDo)
import Network.MessagePackRpc.Server
import Network.MessagePackRpc.Client

port :: Int
port = 5000

main :: IO ()
main = withSocketsDo $ hspec $ do
  describe "add service" $ do
    it "correct" $ do
      server `race_` (threadDelay 1000 >> client)

server :: IO ()
server =
  serve port
    [ ("add", toMethod add)
    , ("echo", toMethod echo)
    ]
  where
    add :: Int -> Int -> Method Int
    add x y = return $ x + y

    echo :: String -> Method String
    echo s = return $ "***" ++ s ++ "***"

client :: IO ()
client = runClient "localhost" port $ do
  r1 <- add 123 456
  liftIO $ r1 `shouldBe` 123 + 456
  r2 <- echo "hello"
  liftIO $ r2 `shouldBe` "***hello***"
  where
    add :: Int -> Int -> Client Int
    add = call "add"

    echo :: String -> Client String
    echo = call "echo"