Nothing
test_that("concurrency in update", {
setup_fake_apps()
dir.create(pri <- fs::path_norm(tempfile()))
on.exit(unlink(pri, recursive = TRUE), add = TRUE)
dir.create(rep <- fs::path_norm(tempfile()))
on.exit(unlink(rep, recursive = TRUE), add = TRUE)
cmc <- cranlike_metadata_cache$new(pri, rep, "source", bioc = FALSE)
## TODO: somehow check that there are no parallel downloads
do <- function() {
dx1 <- cmc$async_update()
dx2 <- cmc$async_update()
dx3 <- cmc$async_update()
when_all(dx1, dx2, dx3)
}
res <- suppressMessages(synchronise(do()))
check_packages_data(res[[1]])
check_packages_data(res[[2]])
check_packages_data(res[[3]])
expect_null(get_private(cmc)$update_deferred)
})
test_that("cmc__get_repos", {
repos <- c(CRAN = "bad")
## No bioc, CRAN is replaced
expect_equal(
cmc__get_repos(repos, FALSE, cran_mirror = "good", r_version = "3.5"),
data_frame(name = "CRAN", url = "good", type = "cran",
r_version = "*", bioc_version = NA_character_)
)
## BioC, all new
res <- cmc__get_repos(repos, TRUE, "good", r_version = "3.5")
expect_equal(
res$name,
c("CRAN", "BioCsoft", "BioCann", "BioCexp", "BioCworkflows"))
expect_equal(res$url[1], "good")
expect_equal(res$type, c("cran", "bioc", "bioc", "bioc", "bioc"))
expect_equal(
res$bioc_version,
c(NA_character_, "3.8", "3.8", "3.8", "3.8"))
## BioC, some are custom
repos <- c(CRAN = "bad", BioCsoft = "ok")
res <- cmc__get_repos(repos, TRUE, "good", r_version = "3.5")
expect_equal(
res$name,
c("CRAN", "BioCsoft", "BioCsoft", "BioCann", "BioCexp", "BioCworkflows"))
expect_equal(res$url[1], "good")
expect_equal(res$url[2], "ok")
expect_equal(res$type, c("cran", "cranlike", "bioc", "bioc", "bioc", "bioc"))
expect_equal(
res$bioc_version,
c(NA_character_, NA_character_, "3.8", "3.8", "3.8", "3.8"))
})
test_that("cleanup", {
mockery::stub(cmc_cleanup, "interactive", FALSE)
expect_error(cmc_cleanup(NULL, NULL, FALSE), "Not cleaning up cache")
})
test_that("cleanup", {
dir.create(pri <- fs::path_norm(tempfile()))
on.exit(unlink(pri, recursive = TRUE), add = TRUE)
dir.create(rep <- fs::path_norm(tempfile()))
on.exit(unlink(rep, recursive = TRUE), add = TRUE)
cmc <- cranlike_metadata_cache$new(pri, rep, "source", bioc = FALSE)
mockery::stub(cmc_cleanup, "interactive", TRUE)
mockery::stub(cmc_cleanup, "readline", "")
expect_error(cmc_cleanup(cmc, get_private(cmc), FALSE), "Aborted")
})
test_that("memory cache", {
setup_fake_apps()
pri <- test_temp_dir()
rep <- test_temp_dir()
cmc <- cranlike_metadata_cache$new(pri, rep, "source", bioc = FALSE)
data <- suppressMessages(cmc$list())
rep2 <- test_temp_dir()
cmc2 <- cranlike_metadata_cache$new(pri, rep2, "source", bioc = FALSE)
week <- as.difftime(7, units = "days")
data2 <- get_private(cmc2)$get_memory_cache(week)
expect_identical(data, data2$pkgs)
rep3 <- test_temp_dir()
cmc3 <- cranlike_metadata_cache$new(pri, rep3, "source", bioc = FALSE)
instance <- as.difftime(1/100000, units = "secs")
expect_error(data3 <- get_private(cmc3)$get_memory_cache(instance),
"Memory cache outdated")
})
test_that("update_memory_cache", {
pri <- test_temp_dir()
rep <- test_temp_dir()
cmc <- cranlike_metadata_cache$new(pri, rep, c("macos", "source"),
bioc = FALSE)
mockery::stub(cmc__copy_to_replica, "filelock::lock", function(...) NULL)
expect_error(
cmc__copy_to_replica(cmc, get_private(cmc), TRUE, TRUE, TRUE),
"Cannot acquire lock to copy primary cache")
})
test_that("summary", {
pri <- test_temp_dir()
rep <- test_temp_dir()
cmc <- cranlike_metadata_cache$new(pri, rep, c("macos", "source"),
bioc = FALSE)
sum <- cmc$summary()
expect_equal(
names(sum),
c("cachepath", "lockfile", "current_rds", "raw_files", "rds_files",
"size")
)
})
test_that("corrupt metadata", {
# The nullfile() trick does not work on Windows, we need a different
# way to corrupt the files there
skip_on_os("windows")
setup_fake_apps()
pri <- nullfile()
dir.create(rep <- fs::path_norm(tempfile()))
on.exit(unlink(rep, recursive = TRUE), add = TRUE)
cmc <- cranlike_metadata_cache$new(pri, rep, "source", bioc = FALSE)
expect_snapshot(error = TRUE, suppressMessages(cmc$list()))
})
test_that("missing packages note", {
fake_cran2 <- webfakes::local_app_process(
cran_app(cran_app_pkgs),
opts = webfakes::server_opts(num_threads = 3)
)
withr::local_options(
repos = c(CRAN = fake_cran$url(), FOO = fake_cran2$url())
)
dir.create(pri <- fs::path_norm(tempfile()))
on.exit(unlink(pri, recursive = TRUE), add = TRUE)
dir.create(rep <- fs::path_norm(tempfile()))
on.exit(unlink(rep, recursive = TRUE), add = TRUE)
cmc <- cranlike_metadata_cache$new(pri, rep, c("source", "windows"), bioc = FALSE)
msg <- ""
withCallingHandlers(
invisible(cmc$update()),
message = function(m) {
msg <<- paste0(msg, conditionMessage(m))
invokeRestart("muffleMessage")
}
)
expect_match(msg, "packages are missing from CRAN and 127.0.0.1:", fixed = TRUE)
})
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.