| (ns zilch.test.mq |
| (:use clojure.test) |
| (:import [java.util Arrays UUID]) |
| (:require [zilch.mq :as mq])) |
| |
| (defn uuid [] (str (UUID/randomUUID))) |
| |
| (defn random-msg [] |
| (byte-array (map byte (for [i (range (int (rand 100)))] |
| (int (rand 100)) |
| )))) |
| |
| (def url |
| (str "inproc://" (uuid)) |
| ;; (str "ipc://" (uuid)) |
| ;; (str "tcp://127.0.0.1:" (+ 4000 (Math/round (rand 1000))))) |
| ) |
| |
| (deftest zilch |
| (testing "zilch" |
| (testing "should be able to" |
| |
| (testing "push / pull" |
| (mq/with-context context 2 |
| (with-open [s0 (-> context |
| (mq/socket mq/pull) |
| (mq/bind url)) |
| s1 (-> context |
| (mq/socket mq/push) |
| (mq/connect url))] |
| (let [msg (random-msg) |
| push (future (mq/send s1 msg)) |
| pull (future (mq/recv s0))] |
| (is (Arrays/equals msg @pull)))))) |
| |
| (testing "pub / sub" |
| (mq/with-context context 2 |
| (with-open [s0 (-> context |
| (mq/socket mq/pub) |
| (mq/bind url)) |
| s1 (-> context |
| (mq/socket mq/sub) |
| (mq/subscribe) |
| (mq/connect url))] |
| (let [msg (random-msg) |
| pub (future (mq/send s0 msg)) |
| sub (future (mq/recv s1))] |
| (is (Arrays/equals msg @sub)))))) |
| |
| (testing "pair / pair" |
| (mq/with-context context 2 |
| (with-open [s0 (-> context |
| (mq/socket mq/pair) |
| (mq/bind url)) |
| s1 (-> context |
| (mq/socket mq/pair) |
| (mq/connect url))] |
| (let [msg0 (random-msg) |
| pair0 (future (mq/send s0 msg0) |
| (mq/recv s0)) |
| msg1 (random-msg) |
| pair1 (future (mq/send s1 msg1) |
| (mq/recv s1))] |
| (is (Arrays/equals msg1 @pair0)) |
| (is (Arrays/equals msg0 @pair1)))))) |
| |
| (testing "req / rep" |
| (mq/with-context context 2 |
| (with-open [s0 (-> context |
| (mq/socket mq/rep) |
| (mq/bind url)) |
| s1 (-> context |
| (mq/socket mq/req) |
| (mq/connect url))] |
| (let [msg (random-msg) |
| req (future (mq/send s1 msg) |
| (mq/recv s1)) |
| rep (future (mq/recv s0) |
| (mq/send s0 msg))] |
| (is (Arrays/equals msg @req)))))) |
| |
| (testing "req / xrep") |
| |
| (testing "xreq / rep") |
| |
| (testing "xreq / xrep")))) |