context("queue_base")
test_that("empty", {
ctx <- context::context_save(tempfile(), storage_type = "environment")
obj <- queue_base$new(ctx, initialize = FALSE)
expect_equal(obj$task_list(), character(0))
expect_equal(obj$task_status(), set_names(character(0), character(0)))
expect_equal(obj$task_status(named = FALSE), character(0))
tt <- obj$task_times()
expect_is(tt, "data.frame")
expect_equal(nrow(tt), 0)
expect_error(obj$task_get(ids::random_id()),
"Task does not exist")
## Behaviour of missing tasks is tested elsewhere
expect_is(obj$task_get(ids::random_id(), FALSE), "queuer_task")
expect_error(obj$task_result(ids::random_id()), "unfetchable: MISSING",
class = "UnfetchableTask")
expect_false(obj$task_delete(ids::random_id()))
expect_equal(obj$task_bundle_list(), character(0))
info <- obj$task_bundle_info()
expect_is(info, "data.frame")
expect_equal(nrow(info), 0)
expect_error(obj$task_bundle_get(ids::adjective_animal()),
"not found", class = "KeyError")
})
test_that("enqueue", {
ctx <- context::context_save(tempfile(), storage_type = "environment")
ctx <- context::context_load(ctx, new.env(parent = .GlobalEnv))
obj <- queue_base$new(ctx)
t <- obj$enqueue(sin(1))
expect_equal(t$status(), "PENDING")
context::task_run(t$id, ctx)
expect_equal(t$status(), "COMPLETE")
expect_equal(t$result(), sin(1))
})
test_that("enqueue with dependencies", {
ctx <- context::context_save(tempfile(), storage_type = "environment")
ctx <- context::context_load(ctx, new.env(parent = .GlobalEnv))
obj <- queue_base$new(ctx)
t <- obj$enqueue(sin(1))
expect_error(obj$enqueue(sin(1), depends_on = "123"),
"Failed to save as dependency 123 does not exist")
t2 <- obj$enqueue(sin(1), depends_on = t$id)
t3 <- obj$enqueue(sin(1), depends_on = c(t$id, t2$id))
expect_equal(context::task_deps(t2$id, ctx), list(t$id))
expect_equal(context::task_deps(t3$id, ctx), list(c(t$id, t2$id)))
})
test_that("create by id", {
ctx <- context::context_save(tempfile(), storage_type = "environment")
obj <- queue_base$new(ctx$id, ctx$root)
expect_equal(obj$context$id, ctx$id)
})
test_that("invalid creation", {
ctx <- context::context_save(tempfile(), storage_type = "environment")
expect_error(queue_base$new(ctx, ctx$root),
"'root' must be NULL")
})
test_that("retry tasks", {
ctx <- context::context_save(tempfile(), storage_type = "environment")
ctx <- context::context_load(ctx, new.env(parent = .GlobalEnv))
obj <- queue_base$new(ctx)
t <- obj$enqueue(stop("fail"))
t2 <- obj$enqueue(sin(1))
expect_equal(t$status(), "PENDING")
expect_equal(t2$status(), "PENDING")
context::task_run(t$id, ctx)
context::task_run(t2$id, ctx)
expect_equal(t$status(), "ERROR")
expect_equal(t2$status(), "COMPLETE")
now <- Sys.time()
expect_lt(t$times()$submitted, now)
expect_lt(t2$times()$submitted, now)
obj$task_retry_failed(c(t$id, t2$id))
expect_gt(t$times()$submitted, now)
expect_lt(t2$times()$submitted, now)
expect_equal(t$status(), "PENDING")
expect_equal(t2$status(), "COMPLETE")
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.