diff options
Diffstat (limited to '')
-rw-r--r-- | src/arrow/r/tests/testthat/test-filesystem.R | 178 |
1 files changed, 178 insertions, 0 deletions
diff --git a/src/arrow/r/tests/testthat/test-filesystem.R b/src/arrow/r/tests/testthat/test-filesystem.R new file mode 100644 index 000000000..5ee096f13 --- /dev/null +++ b/src/arrow/r/tests/testthat/test-filesystem.R @@ -0,0 +1,178 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + + +test_that("LocalFilesystem", { + fs <- LocalFileSystem$create() + expect_identical(fs$type_name, "local") + DESCRIPTION <- system.file("DESCRIPTION", package = "arrow") + info <- fs$GetFileInfo(DESCRIPTION)[[1]] + expect_equal(info$base_name(), "DESCRIPTION") + expect_equal(info$extension(), "") + expect_equal(info$type, FileType$File) + expect_equal(info$path, DESCRIPTION) + info <- file.info(DESCRIPTION) + + expect_equal(info$size, info$size) + # This fails due to a subsecond difference on Appveyor on Windows with R 3.3 only + # So add a greater tolerance to allow for that + expect_equal(info$mtime, info$mtime, tolerance = 1) + + tf <- tempfile(fileext = ".txt") + fs$CopyFile(DESCRIPTION, tf) + info <- fs$GetFileInfo(tf)[[1]] + expect_equal(info$extension(), "txt") + expect_equal(info$size, info$size) + expect_equal(readLines(DESCRIPTION), readLines(tf)) + + tf2 <- tempfile(fileext = ".txt") + fs$Move(tf, tf2) + infos <- fs$GetFileInfo(c(tf, tf2, dirname(tf))) + expect_equal(infos[[1]]$type, FileType$NotFound) + expect_equal(infos[[2]]$type, FileType$File) + expect_equal(infos[[3]]$type, FileType$Directory) + + fs$DeleteFile(tf2) + expect_equal(fs$GetFileInfo(tf2)[[1L]]$type, FileType$NotFound) + expect_true(!file.exists(tf2)) + + expect_equal(fs$GetFileInfo(tf)[[1L]]$type, FileType$NotFound) + expect_true(!file.exists(tf)) + + td <- tempfile() + fs$CreateDir(td) + expect_equal(fs$GetFileInfo(td)[[1L]]$type, FileType$Directory) + fs$CopyFile(DESCRIPTION, file.path(td, "DESCRIPTION")) + fs$DeleteDirContents(td) + expect_equal(length(dir(td)), 0L) + fs$DeleteDir(td) + expect_equal(fs$GetFileInfo(td)[[1L]]$type, FileType$NotFound) + + tf3 <- tempfile() + os <- fs$OpenOutputStream(path = tf3) + bytes <- as.raw(1:40) + os$write(bytes) + os$close() + + is <- fs$OpenInputStream(tf3) + buf <- is$Read(40) + expect_equal(buf$data(), bytes) + is$close() +}) + +test_that("SubTreeFilesystem", { + dir.create(td <- tempfile()) + DESCRIPTION <- system.file("DESCRIPTION", package = "arrow") + file.copy(DESCRIPTION, file.path(td, "DESCRIPTION")) + + st_fs <- SubTreeFileSystem$create(td) + expect_r6_class(st_fs, "SubTreeFileSystem") + expect_r6_class(st_fs, "FileSystem") + expect_r6_class(st_fs$base_fs, "LocalFileSystem") + expect_identical( + capture.output(print(st_fs)), + paste0("SubTreeFileSystem: ", "file://", st_fs$base_path) + ) + + # FIXME windows has a trailing slash for one but not the other + # expect_identical(normalizePath(st_fs$base_path), normalizePath(td)) # nolint + + st_fs$CreateDir("test") + st_fs$CopyFile("DESCRIPTION", "DESC.txt") + infos <- st_fs$GetFileInfo(c("DESCRIPTION", "test", "nope", "DESC.txt")) + expect_equal(infos[[1L]]$type, FileType$File) + expect_equal(infos[[2L]]$type, FileType$Directory) + expect_equal(infos[[3L]]$type, FileType$NotFound) + expect_equal(infos[[4L]]$type, FileType$File) + expect_equal(infos[[4L]]$extension(), "txt") + + local_fs <- LocalFileSystem$create() + local_fs$DeleteDirContents(td) + infos <- st_fs$GetFileInfo(c("DESCRIPTION", "test", "nope", "DESC.txt")) + expect_equal(infos[[1L]]$type, FileType$NotFound) + expect_equal(infos[[2L]]$type, FileType$NotFound) + expect_equal(infos[[3L]]$type, FileType$NotFound) + expect_equal(infos[[4L]]$type, FileType$NotFound) +}) + +test_that("LocalFileSystem + Selector", { + fs <- LocalFileSystem$create() + dir.create(td <- tempfile()) + writeLines("blah blah", file.path(td, "one.txt")) + writeLines("yada yada", file.path(td, "two.txt")) + dir.create(file.path(td, "dir")) + writeLines("...", file.path(td, "dir", "three.txt")) + + selector <- FileSelector$create(td, recursive = TRUE) + infos <- fs$GetFileInfo(selector) + expect_equal(length(infos), 4L) + types <- sapply(infos, function(.x) .x$type) + expect_equal(sum(types == FileType$File), 3L) + expect_equal(sum(types == FileType$Directory), 1L) + + selector <- FileSelector$create(td, recursive = FALSE) + infos <- fs$GetFileInfo(selector) + expect_equal(length(infos), 3L) + types <- sapply(infos, function(.x) .x$type) + expect_equal(sum(types == FileType$File), 2L) + expect_equal(sum(types == FileType$Directory), 1L) +}) + +test_that("FileSystem$from_uri", { + skip_on_cran() + skip_if_not_available("s3") + skip_if_offline() + fs_and_path <- FileSystem$from_uri("s3://ursa-labs-taxi-data") + expect_r6_class(fs_and_path$fs, "S3FileSystem") + expect_identical(fs_and_path$fs$region, "us-east-2") +}) + +test_that("SubTreeFileSystem$create() with URI", { + skip_on_cran() + skip_if_not_available("s3") + skip_if_offline() + fs <- SubTreeFileSystem$create("s3://ursa-labs-taxi-data") + expect_r6_class(fs, "SubTreeFileSystem") + expect_identical( + capture.output(print(fs)), + "SubTreeFileSystem: s3://ursa-labs-taxi-data/" + ) +}) + +test_that("S3FileSystem", { + skip_on_cran() + skip_if_not_available("s3") + skip_if_offline() + s3fs <- S3FileSystem$create() + expect_r6_class(s3fs, "S3FileSystem") +}) + +test_that("s3_bucket", { + skip_on_cran() + skip_if_not_available("s3") + skip_if_offline() + bucket <- s3_bucket("ursa-labs-r-test") + expect_r6_class(bucket, "SubTreeFileSystem") + expect_r6_class(bucket$base_fs, "S3FileSystem") + expect_identical(bucket$region, "us-west-2") + expect_identical( + capture.output(print(bucket)), + "SubTreeFileSystem: s3://ursa-labs-r-test/" + ) + skip_on_os("windows") # FIXME + expect_identical(bucket$base_path, "ursa-labs-r-test/") +}) |