util.hashring: Support associating arbitrary data with nodes
In this API, a 'node' is always a simple text string. Sometimes the caller may
have a more complex structure representing a node, but the hash ring is really
only concerned with the node's name.
This API change allows :add_nodes() to take a table of `node_name = value`
pairs, as well as the simple array of node names previously accepted.
The 'value' of the selected node is returned as a new second result from
:get_node().
If no value is passed when a node is added, it defaults to `true` (as before,
but this was never previously exposed).
local random = require "util.random";
describe("util.random", function()
describe("#bytes()", function()
it("should return a string", function()
assert.is_string(random.bytes(16));
end);
it("should return the requested number of bytes", function()
-- Makes no attempt at testing how random the bytes are,
-- just that it returns the number of bytes requested
for i = 1, 20 do
assert.are.equal(2^i, #random.bytes(2^i));
end
end);
end);
end);