message("\n---- Test s2_download() from GCloud and safe_getMetadata() ----")
testthat::skip_on_cran()
skip_full_tests()
# NOTE: these tests require a high amount of time (depending on connection speed),
# so the download is disabled by default if SAFE archives are already present.
# To perform the test also on download, replace 'test_download = FALSE' with 'TRUE'.
test_download = FALSE
# NOTE 2: causing to the reduction of the retention time in SciHub, tests on SciHub
# difficult to be updated in order to grant SAFE availability.
# For this reason, GCloud is used by default to verify output structure,
# while SciHub is tested on a recent, random product.
s2_sel_list <- c(
"S2A_MSIL1C_20190723T101031_N0208_R022_T32TNR_20190723T121220.SAFE" =
"gs://gcp-public-data-sentinel-2/tiles/32/T/NR/S2A_MSIL1C_20190723T101031_N0208_R022_T32TNR_20190723T121220.SAFE/",
"S2A_MSIL2A_20190723T101031_N0213_R022_T32TNR_20190723T125722.SAFE" =
"gs://gcp-public-data-sentinel-2/L2/tiles/32/T/NR/S2A_MSIL2A_20190723T101031_N0213_R022_T32TNR_20190723T125722.SAFE/"
)
testthat::test_that(
"Tests on s2_download - Error if internet is down", {
testthat::expect_error(
httptest::without_internet(suppressWarnings({
s2_download(
s2_sel_list,
downloader = "builtin",
outdir = safe_dir,
service = "dhus",
overwrite = test_download
)
})),
regexp = gsub(
" ", "[ \n]",
"[Ii]nternet connection or SciHub may be down"
)
)
}
)
testthat::test_that(
"Tests on s2_download - Gcloud downloader", {
testthat::skip_if_not(is_gcloud_configured(), "Google account is not set")
testthat::skip_if_not(check_gcloud_connection(), "Google Cloud server is not reachable")
suppressWarnings(s2_downloaded <- s2_download(
s2_sel_list,
outdir = safe_dir,
overwrite = test_download
)) # suppressWarnings used to manage possible warnings for skept Md5sum checks
exp_outsafe_1 <- file.path(safe_dir, names(s2_downloaded))
testthat::expect_true(all(file.exists(exp_outsafe_1)))
testthat::expect_equal(length(s2_downloaded), length(s2_sel_list))
testthat::expect_true(grepl("gs://gcp-public-data-sentinel-2/tiles/32/T/NR/", s2_downloaded[1]))
testthat::expect_true(grepl("gs://gcp-public-data-sentinel-2/L2/tiles/32/T/NR/", s2_downloaded[2]))
# test raster metadata on L1C
exp_meta_ex <- sen2r::raster_metadata(
list.files(
file.path(
exp_outsafe_1[grepl("L1C", exp_outsafe_1)],
"GRANULE/L1C_T32TNR_A021326_20190723T101347/IMG_DATA"
),
"T32TNR_20190723T101031_B02", full.names = TRUE
), format = "list"
)[[1]]
testthat::expect_equal(exp_meta_ex$size, c("x" = 10980, "y" = 10980))
testthat::expect_equal(exp_meta_ex$res, c("x" = 10, "y" = 10))
testthat::expect_equal(
as.numeric(exp_meta_ex$bbox),
c(499980, 4990200, 609780, 5100000)
)
testthat::expect_equal(exp_meta_ex$proj$epsg, 32632)
testthat::expect_equal(exp_meta_ex$outformat, "JP2OpenJPEG")
# test raster metadata on L2A
exp_meta_ex <- sen2r::raster_metadata(
list.files(
file.path(
exp_outsafe_1[grepl("L2A", exp_outsafe_1)],
"GRANULE/L2A_T32TNR_A021326_20190723T101347/IMG_DATA/R20m"
),
"T32TNR_20190723T101031_B8A", full.names = TRUE
), format = "list"
)[[1]]
testthat::expect_equal(exp_meta_ex$size, c("x" = 5490, "y" = 5490))
testthat::expect_equal(exp_meta_ex$res, c("x" = 20, "y" = 20))
testthat::expect_equal(
as.numeric(exp_meta_ex$bbox),
c(499980, 4990200, 609780, 5100000)
)
testthat::expect_equal(exp_meta_ex$proj$epsg, 32632)
testthat::expect_equal(exp_meta_ex$outformat, "JP2OpenJPEG")
# test SAFE metadata
if (Sys.info()["sysname"] == "Linux") {
safe_metadata1 <- safe_getMetadata(exp_outsafe_1)
testthat::expect_is(safe_metadata1, "data.table")
testthat::expect_equal(safe_metadata1$prod_type, rep("product",2))
testthat::expect_equal(safe_metadata1$version, rep("compact",2))
testthat::expect_equal(
safe_metadata1$xml_main,
paste0(exp_outsafe_1,"/MTD_MSIL",c("1C","2A"),".xml")
)
testthat::expect_equal(
dirname(safe_metadata1$xml_granules),
file.path(exp_outsafe_1,paste0("GRANULE/L",c("1C","2A"),"_T32TNR_A021326_20190723T101347"))
)
testthat::expect_equal(safe_metadata1$mission, rep("2A",2))
testthat::expect_equal(safe_metadata1$level, c("1C","2A"))
testthat::expect_equal(as.Date(safe_metadata1$sensing_datetime), rep(as.Date("2019-07-23"),2))
testthat::expect_equal(safe_metadata1$id_orbit, rep("022",2))
testthat::expect_equal(safe_metadata1$id_tile, rep("32TNR",2))
testthat::expect_equal(safe_metadata1$utm, rep("32N",2))
testthat::expect_equal(safe_metadata1$direction, rep("DESCENDING",2))
testthat::expect_equal(safe_metadata1$orbit_n, rep("22",2))
testthat::expect_equal(safe_metadata1$nodata_value, rep("0",2))
testthat::expect_equal(safe_metadata1$saturated_value, rep("65535",2))
}
safe_metadata2 <- safe_getMetadata(exp_outsafe_1[2], info=c("tiles", "level", "id_tile"), format = "list")
testthat::expect_is(safe_metadata2, "list")
testthat::expect_equal(length(safe_metadata2), 4)
testthat::expect_equal(safe_metadata2$name, basename(exp_outsafe_1[2]))
testthat::expect_equal(safe_metadata2$tiles, "32TNR")
testthat::expect_equal(safe_metadata2$level, "2A")
testthat::expect_equal(safe_metadata2$id_tile, safe_metadata2$tiles)
}
)
message("\n---- Test s2_download() from SciHub ----")
dir.create(safe_dir_temp <- tempfile("safe_"))
testthat::test_that(
"Tests on s2_download - Built-in downloader, dhus service", {
testthat::skip_if_not(is_scihub_configured(), "SciHub credentials are not set")
testthat::skip_if_not(check_scihub_connection(service = "apihub"), "API Hub server is not reachable")
testthat::skip_if_not(check_scihub_connection(service = "dhus"), "SciHub dhus server is not reachable")
s2_l2a_list <- s2_list(
tile = "32TNT",
orbit = 22,
service = "dhus",
time_interval = c(Sys.Date()-11, Sys.Date()-2),
level = "L2A",
apihub = tests_apihub_path
)
testthat::skip_if(length(s2_l2a_list) == 0)
if (!all(safe_is_online(s2_l2a_list))) {
s2_order(s2_l2a_list)
testthat::skip("s2_l2a_list contains offline products")
}
suppressWarnings(s2_l2a_downloaded <- s2_download(
s2_l2a_list[1],
downloader = "builtin",
outdir = safe_dir,
apihub = tests_apihub_path,
service = "dhus",
overwrite = test_download
)) # suppressWarnings used to manage possible warnings for skept Md5sum checks
exp_outsafe_1 <- file.path(safe_dir, names(s2_l2a_downloaded))
testthat::expect_true(file.exists(exp_outsafe_1))
testthat::expect_equal(length(s2_l2a_downloaded), 1)
testthat::expect_true(grepl("https://scihub.copernicus.eu/dhus/", s2_l2a_downloaded))
# test raster metadata
granule_name <- list.files(
file.path(exp_outsafe_1, "GRANULE"),
"^L[12][AC]\\_T[A-Z0-9]{5}\\_A[0-9]{6}\\_[0-9]{8}T[0-9]{6}$"
)
exp_meta_ex <- raster_metadata(
list.files(
file.path(
exp_outsafe_1,
"GRANULE", granule_name, "IMG_DATA/R10m"
),
"T32TNT_([0-9]{8}T[0-9]{6})_B02_10m", full.names = TRUE
), format = "list"
)[[1]]
testthat::expect_equal(exp_meta_ex$size, c("x" = 10980, "y" = 10980))
testthat::expect_equal(exp_meta_ex$res, c("x" = 10, "y" = 10))
testthat::expect_equal(
as.numeric(exp_meta_ex$bbox),
c(499980, 5190240, 609780, 5300040)
)
testthat::expect_equal(exp_meta_ex$proj$epsg, 32632)
testthat::expect_equal(exp_meta_ex$outformat, "JP2OpenJPEG")
# test SAFE metadata
if (Sys.info()["sysname"] == "Linux") {
safe_metadata1 <- safe_getMetadata(exp_outsafe_1)
testthat::expect_is(safe_metadata1, "data.table")
testthat::expect_equal(safe_metadata1$prod_type, "product")
testthat::expect_equal(safe_metadata1$version, "compact")
testthat::expect_equal(
safe_metadata1$xml_main,
file.path(exp_outsafe_1,"MTD_MSIL2A.xml")
)
testthat::expect_match(safe_metadata1$mission, "2[AB]")
testthat::expect_equal(safe_metadata1$level, "2A")
testthat::expect_equal(safe_metadata1$id_orbit, "022")
testthat::expect_equal(safe_metadata1$id_tile, "32TNT")
testthat::expect_equal(safe_metadata1$utm, "32N")
testthat::expect_equal(safe_metadata1$direction, "DESCENDING")
testthat::expect_equal(safe_metadata1$orbit_n, "22")
testthat::expect_equal(safe_metadata1$nodata_value, "0")
testthat::expect_equal(safe_metadata1$saturated_value, "65535")
}
}
)
# if (Sys.info()["sysname"] != "Linux") {
# testthat::skip_on_ci() # aria2 not installed on Windows and macOS CI
# }
testthat::test_that(
"Tests on s2_download - check aria2 installation", {
if (Sys.info()["sysname"] == "Windows") {
aria2_path <- install_aria2(dirname(attr(load_binpaths(), "path")), force = TRUE)
# testthat::expect_equal(aria2_path, normalize_path("~/.sen2r/aria2c.exe"))
testthat::expect_equal(aria2_path, load_binpaths()$aria2)
} else {
testthat::expect_warning(
install_aria2(dirname(attr(load_binpaths(), "path")), force = TRUE),
"[Tt]his function is only for Windows"
)
if (Sys.which("aria2c") != "") {
testthat::expect_equivalent(load_binpaths("aria2")$aria2, normalize_path(Sys.which("aria2c")))
}
}
}
)
testthat::test_that(
"Tests on s2_download - aria2 downloader", {
testthat::skip_if_not(is_scihub_configured(), "SciHub credentials are not set")
testthat::skip_if_not(check_scihub_connection(service = "apihub"), "API Hub server is not reachable")
testthat::skip_if_not(check_scihub_connection(service = "dhus"), "SciHub dhus server is not reachable")
if (Sys.info()["sysname"] != "Linux") {
testthat::skip_on_ci() # because sometimes the following error appears:
# Download of file
# S2B_MSIL1C_20210617T100559_N0300_R022_T32TNT_20210617T121634.SAFE was
# incomplete (Md5sum check failed). Please retry to launch the download."
}
s2_l1c_list <- s2_list(
tile = "32TNT",
orbit = 22,
service = "apihub",
time_interval = c(Sys.Date()-11, Sys.Date()-2),
level = "L1C",
apihub = tests_apihub_path
)
testthat::skip_if(length(s2_l1c_list) == 0)
if (!all(safe_is_online(s2_l1c_list))) {
s2_order(s2_l1c_list)
testthat::skip("s2_l1c_list contains offline products")
}
suppressWarnings(s2_l1c_downloaded <- s2_download(
rev(s2_l1c_list)[1],
downloader = "aria2",
outdir = safe_dir,
apihub = tests_apihub_path,
overwrite = test_download
)) # suppressWarnings used to manage possible warnings for skept Md5sum checks
exp_outsafe_2 <- file.path(safe_dir, names(s2_l1c_downloaded))
testthat::expect_true(file.exists(exp_outsafe_2))
testthat::expect_equal(length(s2_l1c_downloaded), 1)
# test raster metadata
granule_name <- list.files(
file.path(exp_outsafe_2, "GRANULE"),
"^L[12][AC]\\_T[A-Z0-9]{5}\\_A[0-9]{6}\\_[0-9]{8}T[0-9]{6}$"
)
exp_meta_ex <- raster_metadata(
list.files(
file.path(
exp_outsafe_2,
"GRANULE", granule_name, "IMG_DATA"
),
"T32TNT_([0-9]{8}T[0-9]{6})_B01", full.names = TRUE
), format = "list"
)[[1]]
testthat::expect_equal(exp_meta_ex$size, c("x" = 1830, "y" = 1830))
testthat::expect_equal(exp_meta_ex$res, c("x" = 60, "y" = 60))
testthat::expect_equal(
as.numeric(exp_meta_ex$bbox),
c(499980, 5190240, 609780, 5300040)
)
testthat::expect_equal(exp_meta_ex$proj$epsg, 32632)
testthat::expect_equal(exp_meta_ex$outformat, "JP2OpenJPEG")
# test SAFE metadata
if (Sys.info()["sysname"] == "Linux") {
testthat::expect_error(safe_getMetadata(basename(exp_outsafe_2)))
safe_metadata <- safe_getMetadata(exp_outsafe_2, format = "vector")
testthat::expect_is(safe_metadata, "list")
testthat::expect_equivalent(safe_metadata$prod_type, "product")
testthat::expect_equivalent(safe_metadata$version, "compact")
testthat::expect_equal(
as.vector(safe_metadata$xml_main),
file.path(exp_outsafe_2,"MTD_MSIL1C.xml")
)
testthat::expect_match(safe_metadata$mission, "2[AB]")
testthat::expect_equivalent(safe_metadata$level, "1C")
testthat::expect_equivalent(safe_metadata$id_orbit, "022")
testthat::expect_equivalent(safe_metadata$id_tile, "32TNT")
testthat::expect_equivalent(safe_metadata$utm, "32N")
testthat::expect_equivalent(safe_metadata$direction, "DESCENDING")
testthat::expect_equivalent(safe_metadata$orbit_n, "22")
testthat::expect_equivalent(safe_metadata$nodata_value, "0")
testthat::expect_equivalent(safe_metadata$saturated_value, "65535")
}
# test rm_invalid_safe() should not have effect
testthat::expect_true(file.exists(exp_outsafe_2))
rm_invalid_safe(exp_outsafe_2)
testthat::expect_true(file.exists(exp_outsafe_2))
}
)
unlink(safe_dir_temp, recursive = TRUE)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.