1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
|
--[[
test startup of nanomsg api
]]
describe("nng",function()
local nng
it("should be included with require()",function()
nng = require("nng")
end)
it("should be able to create sockets",function()
local socket = assert(nng.pair1_open())
end)
it("should be able to extablish a connection over inter-process communication",function()
local s1 = assert(nng.pair1_open())
local s2 = assert(nng.pair1_open())
assert(s1:listen("ipc:///tmp/pair.ipc"))
assert(s2:dial("ipc://tmp/pair.ipc"))
assert(s2:send("hello"))
local rec = assert(s1:recv())
assert(rec == "hello","Failed to receive hello, received:" .. rec)
end)
it("should be able to use a bus socket to distribute information",function()
local b = {}
for i = 1,10 do
local s = assert(nng.bus0_open())
b[i] = s
end
for i = 1,10 do
local ipcaddr = string.format("ipc:///tmp/bus_%d.ipc",i)
assert(b[i]:listen(ipcaddr))
end
for i = 1,10 do
for j = 1,10 do
if i ~= j then
local addr = string.format("ipc:///tmp/bus_%d.ipc",j)
assert(b[i]:dial(addr))
end
end
end
assert(b[1]:send("Hello"))
for i = 2,10 do
local msg = assert(b[i]:recv())
assert(msg == "Hello")
end
end)
it("should be able to use a survey socket to gather information",function()
math.randomseed(os.time())
local s = assert(nng.surveyor0_open())
assert(s:listen("ipc:///tmp/survey.ipc"))
local b = {}
for i = 1,100 do
local r = assert(nng.respondent0_open())
assert(r:dial("ipc:///tmp/survey.ipc"))
b[i] = r
end
assert(s:send("Hello"))
for i = 1,100 do
local survey = assert(b[i]:recv())
assert(survey == "Hello")
assert(b[i]:send(string.format("%f",math.random())))
end
local responses = {}
while true do
local succ, msg = s:recv(nng.NNG_FLAG_NONBLOCK)
if succ then
table.insert(responses,tonumber(succ))
elseif msg == "Try again" then
os.execute("sleep 1")
elseif msg == "Incorrect state" then
break
end
end
local avg = 0
for _,v in pairs(responses) do
avg = avg + v
end
avg = avg / #responses
--avg should be about 0.5
assert(avg > 0.4)
assert(avg < 0.6)
end)
it("should be able to use publish and subscribe sockets to transfer information", function()
local s1 = assert(nng.pub0_open())
local s2 = assert(nng.sub0_open())
local s3 = assert(nng.sub0_open())
assert(s1:listen("ipc:///tmp/pub.ipc"))
assert(s2:subscribe(""))
assert(s3:subscribe(""))
assert(s2:dial("ipc:///tmp/pub.ipc"))
assert(s3:dial("ipc:///tmp/pub.ipc"))
assert(s1:send("hello 1"))
assert(s2:recv() == "hello 1")
assert(s3:recv() == "hello 1")
end)
end)
|