test_that("esgf_query()", {
options(epwshiftr.verbose = FALSE)
# Dataset query
expect_s3_class(
qd <- esgf_query(variable = "tas", source = "EC-Earth3", frequency = "day", limit = 1L),
"data.table"
)
# only check when LLNL ESGF node works
if (nrow(qd)) {
fq_qd <- unlist(attr(qd, "response")$responseHeader$params$fq)
expect_true(
all(c("type:Dataset",
"project:\"CMIP6\"",
"activity_id:\"ScenarioMIP\"",
"experiment_id:\"ssp126\" || experiment_id:\"ssp245\" || experiment_id:\"ssp370\" || experiment_id:\"ssp585\"",
"source_id:\"EC-Earth3\"",
"variable_id:\"tas\"",
"nominal_resolution:\"100km\" || nominal_resolution:\"50km\" || nominal_resolution:\"100 km\" || nominal_resolution:\"50 km\"",
"frequency:\"day\"",
"replica:false",
"latest:true",
"variant_label:\"r1i1p1f1\""
) %in% fq_qd)
)
expect_named(qd,
c(
"dataset_id", "mip_era", "activity_drs", "institution_id", "source_id",
"experiment_id", "member_id", "table_id", "frequency", "grid_label",
"version", "nominal_resolution", "variable_id", "variable_long_name",
"variable_units", "data_node", "dataset_pid"
)
)
}
# File query
expect_s3_class(
qf <- esgf_query(variable = "tas", source = "EC-Earth3", frequency = "day", limit = 1L, type = "File"),
"data.table"
)
# only check when LLNL ESGF node works
if (nrow(qf)) {
fq_qf <- unlist(attr(qf, "response")$responseHeader$params$fq)
expect_true(
all(c("type:File",
"project:\"CMIP6\"",
"activity_id:\"ScenarioMIP\"",
"experiment_id:\"ssp126\" || experiment_id:\"ssp245\" || experiment_id:\"ssp370\" || experiment_id:\"ssp585\"",
"source_id:\"EC-Earth3\"",
"variable_id:\"tas\"",
"nominal_resolution:\"100km\" || nominal_resolution:\"50km\" || nominal_resolution:\"100 km\" || nominal_resolution:\"50 km\"",
"frequency:\"day\"",
"replica:false",
"latest:true",
"variant_label:\"r1i1p1f1\""
) %in% fq_qf)
)
expect_named(qf,
c(
"file_id", "dataset_id", "mip_era", "activity_drs", "institution_id",
"source_id", "experiment_id", "member_id", "table_id", "frequency",
"grid_label", "version", "nominal_resolution", "variable_id",
"variable_long_name", "variable_units", "datetime_start",
"datetime_end", "file_size", "data_node", "file_url", "tracking_id"
)
)
}
# empty found
expect_s3_class(q <- esgf_query(variable = "NONSENSE"), "data.table")
expect_equal(q, data.table(), ignore_attr = TRUE)
# can return if no data has been found
expect_s3_class(esgf_query(resolution = "1 m"), "data.table")
})
test_that("init_cmip6_index()", {
options(epwshiftr.dir = tempdir())
# can return if no data has been found
expect_s3_class(init_cmip6_index(resolution = "1 m"), "data.table")
expect_s3_class(
idx <- init_cmip6_index(variable = "tas", source = "EC-Earth3",
experiment = "ssp585", years = 2060, limit = 1, save = TRUE
),
"data.table"
)
# only check when LLNL ESGF node works
if (nrow(idx)) {
expect_equal(names(idx),
c(
"file_id", "dataset_id", "mip_era", "activity_drs", "institution_id",
"source_id", "experiment_id", "member_id", "table_id", "frequency",
"grid_label", "version", "nominal_resolution", "variable_id",
"variable_long_name", "variable_units", "datetime_start",
"datetime_end", "file_size", "data_node", "file_url", "dataset_pid",
"tracking_id"
)
)
expect_true(file.exists(file.path(.data_dir(), "cmip6_index.csv")))
}
})
test_that("load_cmip6_index()", {
skip_on_cran()
dir <- file.path(tempdir(), "test1")
dir.create(dir, FALSE)
options(epwshiftr.dir = dir)
# can stop if 'cmip6_index.csv' file was not found
expect_error(load_cmip6_index(TRUE))
unlink(dir, TRUE)
# can stop if malformed input
options(epwshiftr.dir = tempdir())
index <- file.path(tempdir(), "cmip6_index.csv")
file.create(index)
expect_error(load_cmip6_index(TRUE))
unlink(index, TRUE)
expect_s3_class(
idx <- init_cmip6_index(
variable = "tas", source = "EC-Earth3", years = 2060,
experiment = "ssp585", limit = 1, save = TRUE
),
"data.table"
)
# only check when LLNL ESGF node works
if (nrow(idx)) {
cache <- get_cache()
expect_s3_class(idx1 <- load_cmip6_index(), "data.table")
expect_equal(idx, idx1)
# remove exising db
this$index_db <- NULL
expect_s3_class(idx2 <- load_cmip6_index(TRUE), "data.table")
expect_equal(idx, idx2)
}
})
test_that("set_cmip6_index()", {
skip_on_cran()
# can overwrite index
if (file.exists(file.path(tempdir(), "cmip6_index.csv"))) {
idx <- load_cmip6_index()
expect_s3_class(set_cmip6_index(idx, save = TRUE), "data.table")
}
})
test_that("get_data_dir()", {
options("epwshiftr.dir" = "a")
expect_error(get_data_dir(), "not exists")
options("epwshiftr.dir" = NULL)
skip_on_cran()
.data_dir(TRUE)
if (.Platform$OS.type == "windows") {
expect_identical(get_data_dir(), normalizePath(user_data_dir(appauthor = "epwshiftr")))
} else {
expect_identical(get_data_dir(), normalizePath(user_data_dir(appname = "epwshiftr")))
}
})
test_that("get_data_node()", {
skip_on_cran()
expect_s3_class(node <- get_data_node(), "data.table")
expect_named(node, c("data_node", "status"))
# can test speed using pingr
expect_s3_class(node <- get_data_node(TRUE, 1), "data.table")
expect_named(node, c("data_node", "status", "ping"))
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.