{-# LANGUAGE OverloadedStrings, ScopedTypeVariables #-}
import Data.Conduit.Pool (Pool, createPool)
import Network.Riak (defaultClient, connect, disconnect,
Client(port), Connection)
import Control.Exception (assert)
import Control.Monad (mapM)
import System.ZMQ as ZMQ
import System.IO
import qualified Data.ByteString.Lazy as BW
import Data.Maybe
import Network.Riak.MontageClient as MO
import Utils (putDecimal, generateUI)
threadCount :: Int
threadCount = 1
eachGet :: (Maybe MontageObject, MontageObject) -> IO ()
eachGet (mr, d) = case mr of
Just mo -> assert (comparable d == comparable mo) $ return ()
where comparable m = (MO.bucket m, MO.key m, MO.data' m)
Nothing -> error $ "found nothing at bucket " ++ show (bucket d) ++ " key " ++ show (key d)
main :: IO ()
main = do
ctx <- ZMQ.init 1
-- Montage ZeroMQ
montageZpool <- createPool (do
s <- ZMQ.socket ctx Req
ZMQ.connect s "tcp://localhost:7078"
return s
) ZMQ.close 1 5 threadCount
let (bucket, key) = ("u-info", 1) :: (BW.ByteString, Int)
let ds = map generateUI $ zip [x | x <- [1..3]] [1..3]
-- test get many
mr <- montagePutMany montageZpool ds
assert (length mr == length ds) $ return ()
mr <- montageGetMany montageZpool $ zip [ bucket | _ <- [1..3]] $ map putDecimal [1..3]
assert (mr /= []) $ return ()
mapM_ eachGet $ zip mr ds
hPutStrLn stdout "\nsuccessfully matched put many with get many\n"