aboutsummaryrefslogtreecommitdiff
path: root/spec/startup_spec.lua
blob: dacf9e9152857250603cd2630ba635c54f0ce64b (plain)
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)