tests/testthat/test-SshResource.R

.make_ssh_resource <- function(host = "localhost", port = 22, path = "/work/dir", exec = "plink,ls", identity = "username", secret = "password") {
  url <- httr::build_url(structure(
    list(
      scheme = "ssh",
      hostname = host,
      port = port,
      path = path,
      query = list(exec = exec)
    ),
    class = "url"
  ))
  newResource(
    name = "test",
    url = url,
    identity = identity,
    secret = secret,
    format = NULL
  )
}

test_that("ssh resource resolver works", {
  res <- .make_ssh_resource()
  resolver <- SshResourceResolver$new()
  expect_true(resolver$isFor(res))
  res$format <- "csv"
  expect_false(resolver$isFor(res))
})

test_that("ssh resource client factory, connection refused", {
  res <- .make_ssh_resource()
  resolver <- SshResourceResolver$new()
  client <- resolver$newClient(res)
  expect_equal(class(client), c("SshResourceClient", "CommandResourceClient", "ResourceClient", "R6"))
  expect_error(client$asDataFrame(), "Operation not applicable")
  expect_error(client$getConnection())
})

test_that("ssh resource client factory, connection refused", {
  res <- .make_ssh_resource()
  resolver <- SshResourceResolver$new()
  client <- resolver$newClient(res)
  expect_equal(client$getAllowedCommands(), c("plink","ls"))
  expect_equal(client$exec("ls", test = TRUE), "cd /work/dir && ls")
  expect_equal(client$exec("plink", params = c("--compress", "--out", "out.bin"), test = TRUE), "cd /work/dir && plink --compress --out out.bin")
  expect_error(client$exec("cd", "..", test = TRUE), "Shell command not allowed: cd")
  expect_error(client$exec("ls", "-la .", test = TRUE), "Invalid characters in the parameters")
  expect_error(client$exec("ls", "-la&ls", test = TRUE), "Invalid characters in the parameters")
  expect_error(client$exec("ls", "-la|ls", test = TRUE), "Invalid characters in the parameters")
  expect_error(client$exec("ls", "-la;ls", test = TRUE), "Invalid characters in the parameters")
  expect_error(client$exec("ls", "-la#ls", test = TRUE), "Invalid characters in the parameters")
  expect_error(client$exec("ls", "`rm`", test = TRUE), "Invalid characters in the parameters")
  expect_error(client$exec("ls", "$PATH", test = TRUE), "Invalid characters in the parameters")
})
obiba/resourcer documentation built on May 5, 2023, 10:08 a.m.