Nothing
test_that("process works", {
px <- get_tool("px")
p <- process$new(px, c("sleep", "5"))
on.exit(try_silently(p$kill(grace = 0)), add = TRUE)
expect_true(p$is_alive())
})
test_that("get_exit_status", {
px <- get_tool("px")
p <- process$new(px, c("return", "1"))
on.exit(p$kill(), add = TRUE)
p$wait()
expect_identical(p$get_exit_status(), 1L)
})
test_that("non existing process", {
expect_error(process$new(tempfile()))
## This closes connections in finalizers
gc()
})
test_that("post processing", {
px <- get_tool("px")
p <- process$new(
px, c("return", "0"), post_process = function() "foobar")
p$wait(5000)
p$kill()
expect_equal(p$get_result(), "foobar")
p <- process$new(
px, c("sleep", "5"), post_process = function() "yep")
expect_error(p$get_result(), "alive")
p$kill()
expect_equal(p$get_result(), "yep")
## Only runs once
xx <- 0
p <- process$new(
px, c("return", "0"), post_process = function() xx <<- xx + 1)
p$wait(5000)
p$kill()
p$get_result()
expect_equal(xx, 1)
p$get_result()
expect_equal(xx, 1)
})
test_that("working directory", {
px <- get_tool("px")
dir.create(tmp <- tempfile())
on.exit(unlink(tmp, recursive = TRUE), add = TRUE)
cat("foo\nbar\n", file = file.path(tmp, "file"))
p <- process$new(px, c("cat", "file"), wd = tmp, stdout = "|")
on.exit(p$kill(), add = TRUE)
p$wait()
expect_equal(p$read_all_output_lines(), c("foo", "bar"))
})
test_that("working directory does not exist", {
px <- get_tool("px")
expect_error(process$new(px, wd = tempfile()))
## This closes connections in finalizers
gc()
})
test_that("R process is installed with a SIGTERM cleanup handler", {
# https://github.com/r-lib/callr/pull/250
skip_if_not_installed("callr", "3.7.3.9001")
# Needs POSIX signal handling
skip_on_os("windows")
# Enabled case
withr::local_envvar(c(PROCESSX_R_SIGTERM_CLEANUP = "true"))
out <- tempfile()
fn <- function(file) {
file.create(tempfile())
writeLines(tempdir(), file)
}
p <- callr::r_session$new()
p$run(fn, list(file = out))
p_temp_dir <- readLines(out)
expect_true(dir.exists(p_temp_dir))
p$signal(ps::signals()$SIGTERM)
p$wait()
expect_false(dir.exists(p_temp_dir))
# Disabled case
withr::local_envvar(c(PROCESSX_R_SIGTERM_CLEANUP = NA_character_))
# Just in case R adds tempdir cleanup on SIGTERM
skip_on_cran()
p <- callr::r_session$new()
p$run(fn, list(file = out))
p_temp_dir <- readLines(out)
expect_true(dir.exists(p_temp_dir))
p$signal(ps::signals()$SIGTERM)
p$wait()
# Was not cleaned up
expect_true(dir.exists(p_temp_dir))
})
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.