You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
88 lines
2.1 KiB
88 lines
2.1 KiB
|
4 years ago
|
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())
|