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.

109 lines
2.4 KiB

local test = require("u-test")
local network = require("network")
local serialization = require("serialization")
local BaseControl = require("bc")
function test.get_network_robust()
local bc1 = BaseControl:new()
bc1:register("getrob1", 123)
bc1:finalize()
local bc2 = BaseControl:new()
local addr2 = network.get_scene()
network.inject(
addr2,
"A-GETROB-1",
BaseControl.Network.default_port,
serialization.serialize{
ty=BaseControl.Message.NounResponse,
noun="getrob2",
value=321,
}
)
test.equal(123, bc2:get("getrob1"), "wrong value")
test.error_raised(function()
bc2:get("getrob2")
end, "unknown")
end
function test.call_sync_network_robust()
local bc1 = BaseControl:new()
local addr1 = network.get_scene()
local n = 0
bc1:register("syncr1", function(p1, p2)
test.equal(p2, 12)
n = n + 1
return p1 + 10, "hello"
end)
bc1:finalize()
local bc2 = BaseControl:new()
local addr2 = network.get_scene()
test.is_true(bc2:call("syncr1", 20, 12), "call not true")
network.inject(
addr2,
addr1,
BaseControl.Network.default_port,
serialization.serialize{
ty=BaseControl.Message.VerbResponse,
verb="syncr2",
ret={1, 2, 3},
}
)
local ret, val = bc2:call_sync("syncr1", 30, 12)
test.equal(40, ret, "local sync not correct")
test.equal("hello", val, "local sync not multiple")
test.equal(2, n, "wrong invokation number")
end
function test.finalize_robust()
local bc1 = BaseControl:new()
bc1:register("finaln1", 123)
bc1:finalize()
local bc2 = BaseControl:new()
local addr2 = network.get_scene()
network.inject(
addr2,
"A-FINALIZE-1",
BaseControl.Network.default_port,
serialization.serialize({
ty=BaseControl.Message.Register,
nouns={"finaln2"},
})
)
network.inject(
addr2,
"A-FINALIZE-1",
BaseControl.Network.default_port,
serialization.serialize({
ty=BaseControl.Message.VerbRequest,
verb="finaln2v",
param={1, 2},
})
)
network.inject(
addr2,
"A-FINALIZE-2",
BaseControl.Network.default_port,
serialization.serialize({
ty=BaseControl.Message.Register,
nouns={"finaln3"},
})
)
bc2:finalize{"finaln1", "finaln2", "finaln3"}
test.is_true(bc2:has_noun("finaln1"), "noun missing")
test.is_true(bc2:has_noun("finaln2"), "noun missing")
test.is_true(bc2:has_noun("finaln3"), "noun missing")
end