library(rzmq)
# ZMQ inproc endpoint to use in tests cases.
test.ENDPOINT <- "inproc://poll"
# Testing helpers.
assert <- function(condition, message="Assertion Failed") if(!condition) stop(message)
assert.fails <- function(expr, message="Assertion Failed") {
result <- try(expr, TRUE)
assert(inherits(result, 'try-error'), message)
}
# Generate the power set of an input vector.
powerset <- function(x) do.call(c, Map(function(n) combn(x, n, simplify=FALSE), 1:length(x)))
# A basic test of poll functionality.
test.rzmq.poll.basic <- function() {
ctx <- init.context()
s.rep <- init.socket(ctx, "ZMQ_REP")
s.req <- init.socket(ctx, "ZMQ_REQ")
bind.socket(s.rep, test.ENDPOINT)
connect.socket(s.req, test.ENDPOINT)
pollrc <- poll.socket(list(s.rep), list("read"), timeout=0L)
assert(pollrc[[1]]$read == FALSE, "Poll should return $read==FALSE")
send.socket(s.req, "Hello")
pollrc <- poll.socket(list(s.rep), list("read"), timeout=0L)
assert(pollrc[[1]]$read == TRUE, "Poll should return $read==TRUE")
receive.socket(s.rep)
pollrc <- poll.socket(list(s.rep), list("read"), timeout=0L)
assert(pollrc[[1]]$read == FALSE, "Poll should return $read==FALSE")
}
# Ensures that poll fails when supplied with invalid
# arguments.
test.rzmq.poll.invalidargs <- function() {
ctx <- init.context()
s.rep <- init.socket(ctx, "ZMQ_REP")
bind.socket(s.rep, test.ENDPOINT)
assert.fails(poll.socket(list(s.rep), list("read", "read")), "poll shall only accept socket and event lists of equal length.")
assert.fails(poll.socket(list(s.rep), list("read2")), "poll shall only accept event names: read, write, and error.")
assert.fails(poll.socket(list(s.rep), list(2)), "poll shall only accept event names: read, write, and error.")
assert.fails(poll.socket(list(), list("read")), "poll shall not accept an empty list of sockets.")
}
# Tests the powerset of {read, write, error} to ensure
# poll returns the correct flags.
test.rzmq.poll.returntypes <- function() {
ctx <- init.context()
s.rep <- init.socket(ctx, "ZMQ_REP")
bind.socket(s.rep, test.ENDPOINT)
combinations <- powerset(c("read", "write", "error"))
testEventInput <- function(events) {
pollrc <- poll.socket(list(s.rep), list(events), timeout=0L)
assert(all(names(pollrc[[1]]) == events), "poll shall only return logical flags for events that it has requested.")
}
for (events in combinations) testEventInput(events)
}
# Run tests.
test.rzmq.poll.basic()
test.rzmq.poll.invalidargs()
test.rzmq.poll.returntypes()
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.