Nothing
test_that("get_cache_files", {
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)
pri_files <- get_private(cmc)$get_cache_files("primary")
rep_files <- get_private(cmc)$get_cache_files("replica")
check <- function(files, root) {
expect_equal(files$root, root)
expect_true(all(c("meta", "lock", "rds") %in% names(files)))
expect_equal(
fs::path_common(c(files$rds, files$lock, files$rds, root)),
root)
expect_true(inherits(files$pkgs, "tbl"))
expect_equal(
sort(names(files$pkgs)),
sort(c("path", "etag", "basedir", "base", "mirror", "url",
"fallback_url", "platform", "r_version", "type",
"bioc_version", "meta_path", "meta_etag", "meta_url",
"bin_path", "bin_etag", "bin_url"
))
)
expect_equal(
fs::path_common(c(files$pkgs$path, files$pkgs$etag, root)),
root)
}
check(pri_files, pri)
check(rep_files, rep)
})
test_that("get_current_data", {
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)
set_private(cmc, "data") <- "DATA"
set_private(cmc, "data_time") <- Sys.time()
expect_equal(get_private(cmc)$get_current_data(oneday()), "DATA")
set_private(cmc, "data_time") <- Sys.time() - 2 * oneday()
expect_error(
get_private(cmc)$get_current_data(oneday()),
"Loaded data outdated")
set_private(cmc, "data_time") <- NULL
expect_error(
get_private(cmc)$get_current_data(oneday()),
"Loaded data outdated")
set_private(cmc, "data") <- NULL
expect_error(get_private(cmc)$get_current_data(oneday()), "No data loaded")
})
test_that("load_replica_rds", {
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)
expect_error(
get_private(cmc)$load_replica_rds(oneday()),
"No replica RDS file in cache"
)
rep_files <- get_private(cmc)$get_cache_files("replica")
mkdirp(dirname(rep_files$rds))
save_rds("This is it", rep_files$rds)
file_set_time(rep_files$rds, Sys.time() - 2 * oneday())
expect_error(
get_private(cmc)$load_replica_rds(oneday()),
"Replica RDS cache file outdated"
)
file_set_time(rep_files$rds, Sys.time() - 1/2 * oneday())
expect_equal(
suppressMessages(get_private(cmc)$load_replica_rds(oneday())),
"This is it")
expect_equal(get_private(cmc)$data, "This is it")
expect_true(Sys.time() - get_private(cmc)$data_time < oneday())
})
test_that("load_primary_rds", {
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)
expect_error(
get_private(cmc)$load_primary_rds(oneday()),
"No primary RDS file in cache"
)
pri_files <- get_private(cmc)$get_cache_files("primary")
mkdirp(dirname(pri_files$rds))
save_rds("This is it", pri_files$rds)
file_set_time(pri_files$rds, Sys.time() - 2 * oneday())
expect_error(
get_private(cmc)$load_primary_rds(oneday()),
"Primary RDS cache file outdated"
)
file_set_time(pri_files$rds, Sys.time() - 1/2 * oneday())
for (f in pri_files$pkgs$path) { mkdirp(dirname(f)); cat("x", file = f) }
file_set_time(pri_files$pkgs$path, Sys.time() - 2 * oneday())
expect_equal(
suppressMessages(get_private(cmc)$load_primary_rds(oneday())),
"This is it")
expect_equal(get_private(cmc)$data, "This is it")
expect_true(Sys.time() - get_private(cmc)$data_time < oneday())
## Replica was also updated
expect_equal(
suppressMessages(get_private(cmc)$load_replica_rds(oneday())),
"This is it")
})
test_that("locking failures", {
pri <- test_temp_dir()
rep <- test_temp_dir()
cmc <- cranlike_metadata_cache$new(pri, rep, "source", bioc = FALSE)
mockery::stub(cmc__load_primary_rds, "filelock::lock", function(...) NULL)
expect_error(
cmc__load_primary_rds(cmc, get_private(cmc), oneday()),
"Cannot acquire lock to copy RDS")
mockery::stub(cmc__load_primary_pkgs, "filelock::lock", function(...) NULL)
expect_error(
cmc__load_primary_pkgs(cmc, get_private(cmc), oneday()),
"Cannot acquire lock to copy PACKAGES")
})
test_that("load_primary_rds 3", {
pri <- test_temp_dir()
rep <- test_temp_dir()
cmc <- cranlike_metadata_cache$new(pri, rep, "source", bioc = FALSE)
pri_files <- get_private(cmc)$get_cache_files("primary")
touch(pri_files$rds)
expect_error(
cmc__load_primary_rds(cmc, get_private(cmc), oneday()),
"Primary PACKAGES missing")
})
test_that("load_primary_pkgs", {
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, c("macos", "source"),
bioc = FALSE)
expect_error(
get_private(cmc)$load_primary_pkgs(oneday()),
"Some primary PACKAGES files don't exist")
pri_files <- get_private(cmc)$get_cache_files("primary")
mkdirp(dirname(pri_files$pkgs$path))
fs::file_copy(test_path("fixtures/PACKAGES-mac.gz"), pri_files$pkgs$path[1])
# if this fails, then we need to add a new R version to the list or
# CRAN macOS platforms in platform.R
expect_error(
synchronise(get_private(cmc)$load_primary_pkgs(oneday())),
"Some primary PACKAGES files don't exist")
for (i in utils::tail(seq_len(nrow(pri_files$pkgs)), -1)) {
fs::file_copy(test_path("fixtures/PACKAGES-src.gz"), pri_files$pkgs$path[i])
}
file_set_time(pri_files$pkgs$path, Sys.time() - 2 * oneday())
expect_error(
synchronise(get_private(cmc)$load_primary_pkgs(oneday())),
"Some primary PACKAGES files are outdated")
file_set_time(pri_files$pkgs$path, Sys.time() - 1/2 * oneday())
res <- suppressMessages(
synchronise(get_private(cmc)$load_primary_pkgs(oneday()))
)
check_packages_data(res)
## RDS was updated as well
rep_files <- get_private(cmc)$get_cache_files("replica")
expect_true(file.exists(rep_files$rds))
expect_true(Sys.time() - file_get_time(rep_files$rds) < oneday())
## Primary RDS was updated as well
expect_true(file.exists(pri_files$rds))
expect_true(Sys.time() - file_get_time(pri_files$rds) < oneminute())
})
test_that("update_replica_pkgs", {
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)
suppressMessages(synchronise(get_private(cmc)$update_replica_pkgs()))
rep_files <- get_private(cmc)$get_cache_files("replica")
expect_true(all(file.exists(rep_files$pkgs$path)))
expect_true(all(file.exists(rep_files$pkgs$etag)))
data <- suppressMessages(get_private(cmc)$update_replica_rds())
expect_identical(data, get_private(cmc)$data)
check_packages_data(data)
})
test_that("update_replica_rds", {
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("macos", "source"),
bioc = FALSE)
rep_files <- get_private(cmc)$get_cache_files("replica")
mkdirp(dirname(rep_files$pkgs$path))
fs::file_copy(test_path("fixtures/PACKAGES-mac.gz"), rep_files$pkgs$path[1])
for (i in utils::tail(seq_len(nrow(rep_files$pkgs)), -1)) {
fs::file_copy(test_path("fixtures/PACKAGES-src.gz"), rep_files$pkgs$path[i])
}
data <- suppressMessages(get_private(cmc)$update_replica_rds())
expect_identical(get_private(cmc)$data, data)
expect_true(get_private(cmc)$data_time > Sys.time() - oneminute())
check_packages_data(data)
})
test_that("update_primary", {
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("macos", "source"),
bioc = FALSE)
pri_files <- get_private(cmc)$get_cache_files("primary")
rep_files <- get_private(cmc)$get_cache_files("replica")
mkdirp(dirname(rep_files$rds))
save_rds("RDS", rep_files$rds)
get_private(cmc)$update_primary(rds = TRUE, packages = FALSE)
expect_true(file.exists(pri_files$rds))
expect_equal(readRDS(pri_files$rds), "RDS")
lapply_rows(rep_files$pkgs, function(pkg) {
mkdirp(dirname(pkg$path))
cat(basename(pkg$path), "\n", sep = "", file = pkg$path)
mkdirp(dirname(pkg$etag))
cat(pkg$url, "\n", sep = "", file = pkg$etag)
})
get_private(cmc)$update_primary(rds = FALSE, packages = TRUE)
expect_true(all(file.exists(pri_files$pkgs$path)))
expect_true(all(file.exists(pri_files$pkgs$etag)))
lapply_rows(pri_files$pkgs, function(pkg) {
expect_equal(readLines(pkg$path), basename(pkg$path))
expect_equal(readLines(pkg$etag), pkg$url)
})
})
test_that("update_primary 2", {
expect_null(cmc__update_primary(NULL, NULL, FALSE, FALSE, FALSE))
pri <- test_temp_dir()
rep <- test_temp_dir()
cmc <- cranlike_metadata_cache$new(pri, rep, c("macos", "source"),
bioc = FALSE)
mockery::stub(cmc__update_primary, "filelock::lock", function(...) NULL)
expect_error(
cmc__update_primary(cmc, get_private(cmc), TRUE, TRUE, TRUE),
"Cannot acquire lock to update primary cache")
})
test_that("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)
data <- suppressMessages(cmc$update())
check_packages_data(data)
## Data is loaded
expect_identical(get_private(cmc)$data, data)
expect_true(Sys.time() - get_private(cmc)$data_time < oneminute())
## There is a replica RDS
rep_files <- get_private(cmc)$get_cache_files("replica")
expect_true(file.exists(rep_files$rds))
expect_true(Sys.time() - file_get_time(rep_files$rds) < oneminute())
## There is a primary RDS
pri_files <- get_private(cmc)$get_cache_files("primary")
expect_true(file.exists(pri_files$rds))
expect_true(Sys.time() - file_get_time(pri_files$rds) < oneminute())
## There are replicate PACKAGES, with Etag files
expect_true(all(file.exists(rep_files$pkgs$path)))
expect_true(all(file.exists(rep_files$pkgs$etag)))
## There are primary PACKAGES, with Etag files
expect_true(all(file.exists(pri_files$pkgs$path)))
expect_true(all(file.exists(pri_files$pkgs$etag)))
## List
expect_equal(as.list(data$pkgs), as.list(cmc$list()))
lst <- cmc$list(c("pkg1", "pkg2"))
expect_equal(sort(c("pkg1", "pkg2")), sort(unique(lst$package)))
## Revdeps
rdeps <- cmc$revdeps("pkg1")
expect_true("pkg2" %in% rdeps$package)
expect_true("pkg3" %in% rdeps$package)
rdeps <- cmc$revdeps("pkg1", recursive = FALSE)
expect_true("pkg2" %in% rdeps$package)
expect_false("pkg3" %in% rdeps$package)
})
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.