test_that("with_random_port() tries expected number of ports in range", {
min <- 2000L
max <- 4000L
n <- 25
tried_ports <- c()
try_unavailable_port <- function(port) {
tried_ports <<- c(tried_ports, port)
stop("Port ", port, " is unavailable.")
}
expect_error(
with_random_port(
try_unavailable_port,
min = min,
max = max,
n = n
)
)
expect_length(tried_ports, n)
expect_true(all(tried_ports >= min))
expect_true(all(tried_ports <= max))
})
test_that("with_random_port() stops trying for `error_stop_port_search` errors", {
tried_ports <- c()
try_port_with_fatal_error <- function(port) {
tried_ports <<- c(tried_ports, port)
rlang::abort(
paste0("Port ", port, " is unavailable."),
class = "error_stop_port_search"
)
}
expect_error(
with_random_port(try_port_with_fatal_error),
class = "error_stop_port_search"
)
expect_length(tried_ports, 1)
})
test_that("with_random_port() returns result of `startup()`", {
tried_ports <- c()
accept_round_port <- function(port) {
if (port %% 5 == 0) {
return(port)
}
tried_ports <<- c(tried_ports, port)
stop("Odd port")
}
port <- with_random_port(accept_round_port, n = 100)
expect_true(port %% 5 == 0)
if (length(tried_ports)) {
expect_true(all(tried_ports %% 5 > 0))
}
})
test_that("with_random_port() startup function can return NULL", {
accept_any_port <- function(port) {
NULL
}
port <- with_random_port(accept_any_port)
expect_null(port)
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.