if (Sys.getenv("R_COVR") == "true") {
return()
}
test_that("ppm_repo_url", {
withr::local_envvar(
PKGCACHE_PPM_URL = NA_character_,
PKGCACHE_RSPM_URL = my <- "https://my.rspm/repo"
)
expect_equal(ppm_repo_url(), my)
})
test_that("ppm_repo_url 2", {
withr::local_envvar(
PKGCACHE_PPM_URL = NA_character_,
PKGCACHE_RSPM_URL = NA_character_
)
withr::local_options(
repos = c(
RSPM = "https://packagemanager.rstudio.com/all/__linux__/jammy/latest",
CRAN = "https://cran.rstudio.com"
)
)
expect_equal(ppm_repo_url(), "https://packagemanager.rstudio.com/all")
})
test_that("ppm_snapshots", {
ver <- c(
`2023-02-20T00:00:00Z` = "16856763",
`2023-02-21T00:00:00Z` = "16882269",
`2023-02-22T00:00:00Z` = "16903694",
`2023-02-24T00:00:00Z` = "16958782",
`2023-02-27T00:00:00Z` = "17028146",
`2023-02-28T00:00:00Z` = "17054670"
)
fake(
ppm_snapshots,
"async_get_ppm_versions",
function(...) async_constant(ver)
)
expect_snapshot(ppm_snapshots()[1:1000, ])
})
test_that("ppm_platforms", {
on.exit(pkgenv$ppm_distros <- NULL, add = TRUE)
plt <- structure(
list(
name = c("centos7", "centos8", "rhel9"),
os = c("linux", "linux", "linux"),
binary_url = c("centos7", "centos8", "rhel9"),
distribution = c("centos", "centos", "rockylinux"),
release = c("7", "8", "9"),
binaries = c(TRUE, TRUE, TRUE)
),
row.names = c(NA, 3L),
class = "data.frame"
)
fake(
ppm_platforms,
"async_get_ppm_status",
function(...) async_constant(list(distros = plt))
)
expect_snapshot(ppm_platforms())
})
test_that("async_get_ppm_status", {
on.exit(pkgenv$ppm_distros <- NULL, add = TRUE)
fake(
async_get_ppm_status,
"download_file",
function(...) stop("nope")
)
# uses cache by default
pkgenv$ppm_distros <- NULL
expect_silent(synchronise(async_get_ppm_status()))
expect_equal(pkgenv$ppm_distros, pkgenv$ppm_distros_cached)
# no update needed
pkgenv$ppm_distros <- NULL
expect_silent(synchronise(async_get_ppm_status(distribution = "ubuntu")))
expect_equal(pkgenv$ppm_distros, pkgenv$ppm_distros_cached)
# no update needed
pkgenv$ppm_distros <- NULL
expect_silent(synchronise(async_get_ppm_status(
distribution = "ubuntu",
release = "22.04"
)))
expect_equal(pkgenv$ppm_distros, pkgenv$ppm_distros_cached)
# forget = TRUE forces an update
expect_snapshot(
error = TRUE,
synchronise(async_get_ppm_status(forget = TRUE))
)
# so does an unknown distro or release, if we haven't updated yet
pkgenv$ppm_distros <- NULL
expect_snapshot(
error = TRUE,
synchronise(async_get_ppm_status(distribution = "123"))
)
pkgenv$ppm_distros <- NULL
expect_snapshot(
error = TRUE,
synchronise(async_get_ppm_status(
distribution = "ubuntu",
release = "123"
))
)
})
test_that("async_get_ppm_status 2", {
on.exit(pkgenv$ppm_distros <- NULL, add = TRUE)
withr::local_envvar(
PKGCACHE_PPM_STATUS_URL = repo$url("/ppmstatus")
)
pkgenv$ppm_distros <- NULL
ret <- synchronise(async_get_ppm_status(distribution = "notreal"))$distros
expect_snapshot(ret)
withr::local_envvar(
PKGCACHE_PPM_STATUS_URL = repo$url("/bogus")
)
pkgenv$ppm_distros <- NULL
expect_warning(
synchronise(async_get_ppm_status(distribution = "notreal")),
"Failed to download PPM status"
)
})
test_that("async_get_ppm_status 3", {
on.exit(pkgenv$ppm_distros <- NULL, add = TRUE)
withr::local_envvar(
PKGCACHE_PPM_STATUS_URL = repo$url("/ppmstatus")
)
pkgenv$ppm_r_versions <- NULL
pkgenv$ppm_distros <- NULL
ret <- synchronise(async_get_ppm_status(r_version = "1.0"))$r_versions
expect_snapshot(ret)
withr::local_envvar(
PKGCACHE_PPM_STATUS_URL = repo$url("/bogus")
)
pkgenv$ppm_distros <- NULL
expect_warning(
synchronise(async_get_ppm_status(distribution = "notreal")),
"Failed to download PPM status"
)
})
test_that("ppm_has_binaries", {
withr::local_envvar(PKGCACHE_PPM_BINARIES = "no")
expect_false(ppm_has_binaries())
})
test_that("ppm_has_binaries 2", {
on.exit(pkgenv$ppm_distros <- NULL, add = TRUE)
withr::local_envvar(PKGCACHE_PPM_BINARIES = NA_character_)
fake(
ppm_has_binaries,
"current_r_platform_data",
structure(
list(
cpu = "aarch64",
vendor = "pc",
os = "linux-gnu",
distribution = "ubuntu",
release = "22.04",
platform = "aarch64-pc-linux-gnu-ubuntu-22.04"
),
row.names = c(NA, -1L),
class = "data.frame"
)
)
expect_false(ppm_has_binaries())
fake(
ppm_has_binaries,
"current_r_platform_data",
structure(
list(
cpu = "x86_64",
vendor = "apple",
os = "darwin20",
platform = "x86_64-apple-darwin20"
),
row.names = c(NA, -1L),
class = "data.frame"
)
)
expect_false(ppm_has_binaries())
# Use cached values, no HTTP
pkgenv$ppm_distros <- pkgenv$ppm_distros_cached
pkgenv$ppm_r_versions <- pkgenv$ppm_r_versions_cached
fake(ppm_has_binaries, "async_ppm_get_status", NULL)
# Windows
fake(
ppm_has_binaries,
"current_r_platform_data",
structure(
list(
cpu = "x86_64",
vendor = "w64",
os = "mingw32",
platform = "x86_64-w64-mingw32"
),
row.names = c(NA, -1L),
class = "data.frame"
)
)
fake(ppm_has_binaries, "getRversion", "4.2.2")
expect_true(ppm_has_binaries())
# Not supported Linux
fake(
ppm_has_binaries,
"current_r_platform_data",
structure(
list(
cpu = "x86_64",
vendor = "pc",
os = "linux-gnu",
distribution = "ubuntu",
release = "14.04",
platform = "x86_64-pc-linux-gnu-ubuntu-14.04"
),
row.names = c(NA, -1L),
class = "data.frame"
)
)
fake(ppm_has_binaries, "getRversion", "4.2.2")
expect_false(ppm_has_binaries())
# Supported Linux
fake(
ppm_has_binaries,
"current_r_platform_data",
structure(
list(
cpu = "x86_64",
vendor = "pc",
os = "linux-gnu",
distribution = "ubuntu",
release = "22.04",
platform = "x86_64-pc-linux-gnu-ubuntu-22.04"
),
row.names = c(NA, -1L),
class = "data.frame"
)
)
fake(ppm_has_binaries, "getRversion", "4.4.3")
expect_true(ppm_has_binaries())
# Not supported R version
fake(ppm_has_binaries, "getRversion", "1.0.0")
expect_false(ppm_has_binaries())
})
test_that("ppm_r_versions", {
on.exit(pkgenv$ppm_distros <- NULL, add = TRUE)
rver <- c("3.5", "3.6", "4.2")
fake(
ppm_r_versions,
"async_get_ppm_status",
function(...) async_constant(list(r_versions = rver))
)
expect_snapshot(ppm_r_versions())
})
test_that("pkgenv$ppm_distros_cached is current", {
skip_on_cran()
cached <- pkgenv$ppm_distros_cached
current <- canonicalize_ppm_platforms(
synchronise(async_get_ppm_status(forget = TRUE))$distros
)
expect_equal(cached, current)
expect_snapshot(current)
})
test_that("ppm binary support is correctly detected", {
has_bins <- function(...) {
etc <- file.path(test_path("fixtures", "linux"), ...)
raw <- data.frame(raw = "foo")
platform <- current_r_platform_data_linux(raw = raw, etc = etc)
withr::local_options(
pkg.current_platform = paste0(
"x86_64-unknown-linux-gnu-",
platform$distribution,
"-",
platform$release
)
)
fake(ppm_has_binaries, "get_minor_r_version", "4.5")
fake(ppm_has_binaries, "async_get_ppm_status", NULL)
pkgenv$ppm_distros <- pkgenv$ppm_distros_cached
pkgenv$ppm_r_versions <- pkgenv$ppm_r_versions_cached
on.exit(
{
pkgenv$ppm_distros <- pkgenv$ppm_r_versions <- NULL
},
add = TRUE
)
ppm_has_binaries()
}
expect_true(has_bins("ubuntu", "16.04"))
expect_true(has_bins("ubuntu", "18.04"))
expect_true(has_bins("ubuntu", "20.04"))
expect_true(has_bins("ubuntu", "22.04"))
expect_false(has_bins("ubuntu", "22.10"))
expect_true(has_bins("ubuntu", "24.04"))
expect_false(has_bins("debian", "10"))
expect_true(has_bins("debian", "11"))
expect_true(has_bins("debian", "12"))
expect_true(has_bins("opensuse", "15.4"))
expect_true(has_bins("opensuse", "15.5"))
expect_true(has_bins("opensuse", "15.6"))
expect_false(has_bins("centos", "6"))
expect_true(has_bins("centos", "7"))
expect_true(has_bins("centos", "8"))
expect_false(has_bins("rhel", "6"))
expect_true(has_bins("rhel", "7"))
expect_true(has_bins("rhel", "8"))
expect_true(has_bins("rhel", "9"))
expect_false(has_bins("fedora", "39"))
expect_true(has_bins("sles", "15.4"))
expect_true(has_bins("sles", "15.5"))
expect_true(has_bins("sles", "15.6"))
expect_true(has_bins("almalinux", "8"))
expect_true(has_bins("almalinux", "9"))
expect_true(has_bins("rocky", "8"))
expect_true(has_bins("rocky", "9"))
expect_false(has_bins("alpine", "3.18"))
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.