tests/testthat/test-5-cache.R

test_that("init", {
  pc <- package_cache$new(tmp <- tempfile())
  on.exit(unlink(tmp, recursive = TRUE))
  expect_true(file.exists(tmp))
})

test_that("add / list / find / delete", {
  pc <- package_cache$new(tmp <- tempfile())
  on.exit(unlink(tmp, recursive = TRUE))
  cat("f1\n", file = f1 <- tempfile())

  sha256 <- shasum256(f1)
  new <- pc$add(f1, path = "f/b", package = "p", url = "u",
                etag = "e", sha256 = sha256)

  path <- file.path("f", "b")
  fullpath <- file.path(tmp, path)
  exp <- list(fullpath = fullpath, path = path, package = "p", url = "u",
              etag = "e", sha256 = sha256)

  expect_equal(as.list(new), exp)

  expect_equal(as.list(pc$list()), exp)

  expect_equal(as.list(pc$find(package = "p")), exp)

  pc$copy_to(f2 <- tempfile(), package = "p")
  expect_true(file.exists(f2))
  expect_equal(shasum256(f2), sha256)

  pc$delete(package = "p")

  empty <- data.frame(
    stringsAsFactors = FALSE,
    fullpath = character(),  path = character(), package = character(),
    url = character(), etag = character(), sha256 = character()
  )

  expect_equal(pc$list(), empty)

  pc$find(package = "p")
  expect_equal(pc$find(package = "p"), empty)
})

test_that("add_url", {

  pc <- package_cache$new(tmp <- tempfile())
  on.exit(unlink(tmp, recursive = TRUE))

  url <- http$url("/etag/foobar")
  new <- pc$add_url(url, "f/b", package = "p",
                    http_headers = c("accept-encoding" = ""))

  path <- file.path("f", "b")
  fullpath <- file.path(tmp, path)
  exp <- list(fullpath = fullpath, path = path, package = "p", url = url,
              etag = "foobar", sha256 = shasum256(fullpath))
  expect_equal(as.list(new), exp)
})

test_that("copy_or_add, positive", {
  pc <- package_cache$new(tmp <- tempfile())
  on.exit(unlink(tmp, recursive = TRUE))

  cat("f1\n", file = f1 <- tempfile())

  sha256 <- shasum256(f1)
  new <- pc$add(f1, path = "f/b", package = "p", url = "u",
                etag = "e", sha256 = sha256)
  attr(new, "action") <- "Had"

  hit <- pc$copy_or_add(f1 <- tempfile(), url = "u", path = "f/b",
                        package = "p")
  expect_true(file.exists(f1))
  expect_equal(readLines(f1, warn = FALSE), "f1")
  expect_equal(new, hit)
})

test_that("copy_or_add, negative", {

  pc <- package_cache$new(tmp <- tempfile())
  on.exit(unlink(tmp, recursive = TRUE))

  cat("f1\n", file = f1 <- tempfile())

  sha256 <- shasum256(f1)
  new <- pc$add(f1, path = "f/b", package = "p", url = "u",
                etag = "e", sha256 = sha256)

  url <- http$url("/etag/foobar")
  hit <- pc$copy_or_add(url = url, f1 <- tempfile(), path = "f/b",
    package = "p2", http_headers = c("accept-encoding" = ""))

  path <- file.path("f", "b")
  fullpath <- file.path(tmp, path)
  exp <- list(fullpath = fullpath, path = path, package = "p2", url = url,
              etag = "foobar", sha256 = shasum256(fullpath))
  attr(exp, "action") <- "Got"
  expect_equal(as.list(hit), exp)
  expect_true(file.exists(f1))
  expect_true(any(grepl("url\"*:.*/etag/foobar",
                        readLines(f1, warn = FALSE))))

  hit2 <- pc$find(url = url)
  attr(hit2, "action") <- "Got"
  expect_equal(hit2, hit)
})

test_that("update_or_add, not in cache", {

  pc <- package_cache$new(tmp <- tempfile())
  on.exit(unlink(tmp, recursive = TRUE))

  url <- http$url("/etag/foobar")
  hit <- pc$update_or_add(url = url, f1 <- tempfile(), path = "f/b",
    package = "p", http_headers = c("accept-encoding" = ""))

  path <- file.path("f", "b")
  fullpath <- file.path(tmp, path)
  exp <- list(fullpath = fullpath, path = path, package = "p", url = url,
              etag = "foobar", sha256 = shasum256(fullpath))
  attr(exp, "action") <- "Got"
  expect_equal(as.list(hit), exp)

  expect_true(file.exists(f1))
  expect_true(any(grepl("url\"*:.*/etag/foobar",
                        readLines(f1, warn = FALSE))))

  hit2 <- pc$find(url = url)
  attr(hit2, "action") <- "Got"
  expect_equal(hit2, hit)
})

test_that("update_or_add, cache is too old", {

  pc <- package_cache$new(tmp <- tempfile())
  on.exit(unlink(tmp, recursive = TRUE))

  cat("f1\n", file = f1 <- tempfile())

  url <- http$url("/etag/foobar")
  sha256 <- shasum256(f1)
  pc$add(f1, path = "f/b", package = "p", url = url, etag = "e", sha256 = sha256)

  hit <- pc$update_or_add(url = url, f1 <- tempfile(), path = "f/b",
    package = "p", http_headers = c("accept-encoding" = ""))

  path <- file.path("f", "b")
  fullpath <- file.path(tmp, path)
  exp <- list(fullpath = fullpath, path = path, package = "p", url = url,
              etag = "foobar", sha256 = shasum256(fullpath))
  attr(exp, "action") <- "Got"
  expect_equal(as.list(hit), exp)

  expect_true(file.exists(f1))
  expect_true(any(grepl("url\"*:.*/etag/foobar",
                        readLines(f1, warn = FALSE))))

  hit2 <- pc$find(url = url, etag = "foobar")
  attr(hit2, "action") <- "Got"
  expect_equal(hit2, hit)
})

test_that("update_or_add, cache is current", {
  pc <- package_cache$new(tmp <- tempfile())
  on.exit(unlink(tmp, recursive = TRUE))

  cat("f1\n", file = f1 <- tempfile())

  url <- http$url("/etag/foobar")
  sha256 <- shasum256(f1)
  pc$add(f1, path = "f/b", package = "p", url = url, etag = "foobar",
         sha256 = sha256)

  hit <- pc$update_or_add(url = url, f1 <- tempfile(), path = "f/b",
    package = "p", http_headers = c("accept-encoding" = ""))

  path <- file.path("f", "b")
  fullpath <- file.path(tmp, path)
  exp <- list(fullpath = fullpath, path = path, package = "p", url = url,
              etag = "foobar", sha256 = sha256)
  attr(exp, "action") <- "Current"
  expect_equal(as.list(hit), exp)

  expect_true(file.exists(f1))
  expect_equal(readLines(f1), "f1")

  hit2 <- pc$find(url = url)
  attr(hit2, "action") <- "Current"
  expect_equal(hit2, hit)
})
r-lib/pkgcache documentation built on April 7, 2024, 5:57 a.m.