require "luarocks.loader" package.path = package.path .. ";../?.lua" local lu = require("luaunit") local zmq = require("zeromq") function test_context_creation() local ctx, err = zmq.ctx_new() lu.assertNil(err) ctx:term() end function test_req_rep() local err, msg local ctx = zmq.ctx_new() local rep = ctx:socket(zmq.REP) rep:bind("inproc://foo") rep:setsockopt_int(zmq.RCVTIMEO, 5000) local req = ctx:socket(zmq.REQ) req:connect("inproc://foo") _, err = req:send({ "foo", "bar" }) lu.assertNil(err) msg, err = rep:recv() lu.assertNil(err) lu.assertEquals(#msg, 2) lu.assertEquals(msg[1], "foo") lu.assertEquals(msg[2], "bar") end function test_router_pair() local err, msg local ctx = zmq.ctx_new() local server = ctx:socket(zmq.ROUTER) server:setsockopt_str(zmq.SOCKOPT_ROUTING_ID, "server") server:setsockopt_int(zmq.SOCKOPT_RCVTIMEO, 1000) server:bind("inproc://foo") local client = ctx:socket(zmq.ROUTER) client:setsockopt_str(zmq.SOCKOPT_ROUTING_ID, "client") client:setsockopt_int(zmq.SOCKOPT_ROUTER_MANDATORY, 1) client:connect("inproc://foo") repeat _, err = client:send({ "server", "foo" }) until not err msg, err = server:recv() lu.assertNil(err) lu.assertEquals(#msg, 2) lu.assertEquals(msg[1], "client") lu.assertEquals(msg[2], "foo") end function test_poll() local err, msg local ctx = zmq.ctx_new() local rep = ctx:socket(zmq.REP) rep:bind("inproc://foo") rep:setsockopt_int(zmq.RCVTIMEO, 5000) local req = ctx:socket(zmq.REQ) req:connect("inproc://foo") _, err = req:send({ "foo", "bar" }) lu.assertNil(err) local poller = ctx:poller() local poll_result poller:add(rep, zmq.POLLIN) poll_result, err = poller:poll(1500) lu.assertNil(err) lu.assertEquals(#poll_result, 1) if poll_result[1] == rep then msg, err = rep:recv() lu.assertNil(err) lu.assertEquals(#msg, 2) lu.assertEquals(msg[1], "foo") lu.assertEquals(msg[2], "bar") end end os.exit(lu.LuaUnit.run())