tests/testthat/test-queue-library.R

context("queue_library")

test_that("Create queue library", {
  dide_id <- "824612"
  client <- list(
    login = mockery::mock(),
    submit = mockery::mock(dide_id),
    status_job = mockery::mock("PENDING", "RUNNING", "COMPLETE"))

  cluster <- "fi--didemrchnb"
  config <- example_config()
  root <- file.path(config$workdir, "context")
  ctx <- context::context_save(root)
  data <- batch_data(root, ctx$id, config)

  obj <- queue_library$new(data, cluster, client)
  expect_s3_class(obj, "queue_library")

  expected <- list(complete = FALSE, found = character(0), missing = "context")
  expect_equal(
    obj$check("context"),
    expected)

  ## Quick interaction check as this one just passes through
  mock_conan_check <- mockery::mock(expected)
  mockery::stub(obj$check, "conan::conan_check", mock_conan_check)
  expect_equal(obj$check("context"), expected)
  mockery::expect_called(mock_conan_check, 1L)
  expect_equal(mockery::mock_args(mock_conan_check)[[1]],
               list("context", data$paths$local$lib))

  ## Really nasty interaction test here:
  expect_equal(
    obj$provision("context", show_progress = FALSE, show_log = FALSE, poll = 0),
    "COMPLETE")

  expect_length(dir(file.path(data$paths$local$conan, "bin")), 1)
  id <- dir(file.path(data$paths$local$conan, "bin"))
  path_batch_local <-
    file.path(data$paths$local$conan, "batch", paste0(id, ".bat"))
  expect_true(file.exists(path_batch_local))
  expect_true(paste0("set CONAN_ID=", id) %in% readLines(path_batch_local))

  mockery::expect_called(client$login, 1L)
  mockery::expect_called(client$submit, 1L)
  args <- mockery::mock_args(client$submit)[[1]]
  path_batch <- windows_path(file.path(data$paths$remote$conan, "batch",
                                       paste0(id, ".bat")))
  expect_equal(
    args,
    list(path_batch, paste0("conan:", id), "BuildQueue", cluster))

  mockery::expect_called(client$status_job, 3)
  expect_equal(
    mockery::mock_args(client$status_job),
    rep(list(list(dide_id, cluster)), 3))
})


test_that("provisioning selects appropriate queue", {
  expect_equal(queue_template("fi--didemrchnb"), "BuildQueue")
  expect_equal(queue_template("fi--dideclusthn"), "GeneralNodes")
  expect_equal(queue_template("wpia-hn"), "BuildQueue")
  expect_error(queue_template("unknown_cluster"), 
               "Invalid cluster 'unknown_cluster'")
})


test_that("provisioning policy logic", {
  expect_equal(provision_policy(TRUE), "verylazy")
  expect_equal(provision_policy(FALSE), "later")
  expect_equal(provision_policy("lazy"), "lazy")
  expect_equal(provision_policy("verylazy"), "verylazy")
  expect_equal(provision_policy("upgrade"), "upgrade")
  expect_equal(provision_policy("fake"), "fake")
  expect_error(
    provision_policy("other", "policy"),
    "'policy' must be one of 'verylazy', 'lazy', 'upgrade', 'later', 'fake")
})
mrc-ide/didehpc documentation built on Aug. 20, 2023, 10:27 a.m.