diff options
| author | Alexander Pickering <alex@cogarr.net> | 2020-09-15 03:40:00 -0400 |
|---|---|---|
| committer | Alexander Pickering <alex@cogarr.net> | 2020-09-15 03:40:00 -0400 |
| commit | 105ea66aba31825512fea8f281b67f9c2a1d79a5 (patch) | |
| tree | 2bd4d2bd4fa552d770d960420a3c35bf5c91e283 /spec/startup_spec.lua | |
| parent | 94f798fe243313f78f055a48267313e87afe2a67 (diff) | |
| download | lua-nng-105ea66aba31825512fea8f281b67f9c2a1d79a5.tar.gz lua-nng-105ea66aba31825512fea8f281b67f9c2a1d79a5.tar.bz2 lua-nng-105ea66aba31825512fea8f281b67f9c2a1d79a5.zip | |
dos2unix
Diffstat (limited to 'spec/startup_spec.lua')
| -rw-r--r-- | spec/startup_spec.lua | 294 |
1 files changed, 147 insertions, 147 deletions
diff --git a/spec/startup_spec.lua b/spec/startup_spec.lua index e0faa82..94b0d39 100644 --- a/spec/startup_spec.lua +++ b/spec/startup_spec.lua @@ -1,147 +1,147 @@ ---[[
-test startup of the nng 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, "Average was:" .. avg)
- assert(avg < 0.6, "Average was:" .. avg)
- end)
- it("should be able to use publish and subscribe sockets to transfer information", function()
- --for i = 1,1000 do
- for i = 1,10 do
- local s1 = assert(nng.pub0_open())
- local s2 = assert(nng.sub0_open())
- local s3 = assert(nng.sub0_open())
- --local listener, err = s1:listen("tcp://127.0.0.1:1000")
- local listener, err = s1:listen("ipc:///tmp/pub.ipc")
- local dialers = {}
- local num_addr_in_use = 0
- while err == "Address in use" do
- num_addr_in_use = num_addr_in_use + 1
- if num_addr_in_use > 10 then
- error("After multiple attempts, failed to bind on round " .. i)
- end
- listener, err = s1:listen("tcp://127.0.0.1:1000")
- --listener, err = s1:listen("ipc:///tmp/pub.ipc")
- end
- assert(s2:dial("tcp://127.0.0.1:1000"))
- assert(s3:dial("tcp://127.0.0.1:1000"))
- --local d1 = assert(s2:dial("ipc:///tmp/pub.ipc"))
- --local d2 = assert(s3:dial("ipc:///tmp/pub.ipc"))
- assert(s2:subscribe(""))
- assert(s3:subscribe(""))
- table.insert(dialers, d1)
- table.insert(dialers, d2)
- assert(s1:send("hello 1"))
- local r1 = assert(s2:recv())
- assert.are_equal(r1,"hello 1")
- local r2 = assert(s2:recv())
- assert.are_equal(s2,"hello 1")
- listener:close()
- s1:close()
- s2:close()
- s3:close()
- end
- end)
- describe("socket option",function()
- describe("LOCADDR",function()
- it("should return the local address for a socket",function()
- local nng = require("nng")
- local s1 = assert(nng.bus0_open())
- local s2 = assert(nng.bus0_open())
- local listener = assert(s1:listen("tcp://127.0.0.1:1001"))
- local dialer = assert(s2:dial("tcp://127.0.0.1:1001"))
- --local listener = s1:listen("ipc:///tmp/locaddr.ipc")
- --local dialer = s2:dial("ipc:///tmp/locaddr.ipc")
- assert(s1:send("test"))
- assert(s2:recv() == "test")
- local addr = dialer[nng.NNG_OPT_URL]
- end)
- end)
- end)
- describe("tcp transport",function()
- it("has a keepalive option that prevents the tcp connection from closing #writing2",function()
- local nng = require("nng")
- local s1 = assert(nng.pair1_open())
- local s2 = assert(nng.pair1_open())
- s1[nng.NNG_OPT_TCP_KEEPALIVE] = true
- --print(s1[nng.NNG_OPT_TCP_KEEPALIVE])
- assert(s1:listen("tcp://127.0.0.1:1000"))
- assert(s2:dial("tcp://127.0.0.1:1000"))
- end)
- end)
-end)
+--[[ +test startup of the nng 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, "Average was:" .. avg) + assert(avg < 0.6, "Average was:" .. avg) + end) + it("should be able to use publish and subscribe sockets to transfer information", function() + --for i = 1,1000 do + for i = 1,10 do + local s1 = assert(nng.pub0_open()) + local s2 = assert(nng.sub0_open()) + local s3 = assert(nng.sub0_open()) + --local listener, err = s1:listen("tcp://127.0.0.1:1000") + local listener, err = s1:listen("ipc:///tmp/pub.ipc") + local dialers = {} + local num_addr_in_use = 0 + while err == "Address in use" do + num_addr_in_use = num_addr_in_use + 1 + if num_addr_in_use > 10 then + error("After multiple attempts, failed to bind on round " .. i) + end + listener, err = s1:listen("tcp://127.0.0.1:1000") + --listener, err = s1:listen("ipc:///tmp/pub.ipc") + end + assert(s2:dial("tcp://127.0.0.1:1000")) + assert(s3:dial("tcp://127.0.0.1:1000")) + --local d1 = assert(s2:dial("ipc:///tmp/pub.ipc")) + --local d2 = assert(s3:dial("ipc:///tmp/pub.ipc")) + assert(s2:subscribe("")) + assert(s3:subscribe("")) + table.insert(dialers, d1) + table.insert(dialers, d2) + assert(s1:send("hello 1")) + local r1 = assert(s2:recv()) + assert.are_equal(r1,"hello 1") + local r2 = assert(s2:recv()) + assert.are_equal(s2,"hello 1") + listener:close() + s1:close() + s2:close() + s3:close() + end + end) + describe("socket option",function() + describe("LOCADDR",function() + it("should return the local address for a socket",function() + local nng = require("nng") + local s1 = assert(nng.bus0_open()) + local s2 = assert(nng.bus0_open()) + local listener = assert(s1:listen("tcp://127.0.0.1:1001")) + local dialer = assert(s2:dial("tcp://127.0.0.1:1001")) + --local listener = s1:listen("ipc:///tmp/locaddr.ipc") + --local dialer = s2:dial("ipc:///tmp/locaddr.ipc") + assert(s1:send("test")) + assert(s2:recv() == "test") + local addr = dialer[nng.NNG_OPT_URL] + end) + end) + end) + describe("tcp transport",function() + it("has a keepalive option that prevents the tcp connection from closing #writing2",function() + local nng = require("nng") + local s1 = assert(nng.pair1_open()) + local s2 = assert(nng.pair1_open()) + s1[nng.NNG_OPT_TCP_KEEPALIVE] = true + --print(s1[nng.NNG_OPT_TCP_KEEPALIVE]) + assert(s1:listen("tcp://127.0.0.1:1000")) + assert(s2:dial("tcp://127.0.0.1:1000")) + end) + end) +end) |
