if(serverResponse$status_code < 200 || serverResponse$status_code >= 300)
stop(paste("Server code:", serverResponse$status_code))
- print(paste("File deleted:", relativePath))
+ paste("File deleted:", relativePath)
},
move = function(from, to, uuid)
{
- #Todo Do we need this URLencode?
- collectionURL <- URLencode(paste0(private$api$getWebDavHostName(), "c=",
- uuid, "/"))
+ collectionURL <- paste0(private$api$getWebDavHostName(), "c=", uuid, "/")
fromURL <- paste0(collectionURL, from)
toURL <- paste0(collectionURL, to)
response <- private$http$PROPFIND(collectionURL, headers)
+ if(all(response == ""))
+ stop("Response is empty, reques may be misconfigured")
+
parsedResponse <- private$httpParser$parseWebDAVResponse(response, collectionURL)
parsedResponse[-1]
},
- getResourceSize = function(uuid, relativePath)
+ getResourceSize = function(relativePath, uuid)
{
collectionURL <- URLencode(paste0(private$api$getWebDavHostName(),
"c=", uuid))
http = NULL,
httpParser = NULL,
-
createNewFile = function(relativePath, uuid, contentType)
{
fileURL <- paste0(private$api$getWebDavHostName(), "c=",
if(serverResponse$status_code < 200 || serverResponse$status_code >= 300)
stop(paste("Server code:", serverResponse$status_code))
- print(paste("File created:", relativePath))
+ paste("File created:", relativePath)
}
),
expectedQueryFilters = NULL,
queryFiltersAreCorrect = NULL,
requestHeaderContainsAuthorizationField = NULL,
+ requestHeaderContainsDestinationField = NULL,
JSONEncodedBodyIsProvided = NULL,
numberOfGETRequests = NULL,
numberOfDELETERequests = NULL,
numberOfPUTRequests = NULL,
numberOfPOSTRequests = NULL,
+ numberOfMOVERequests = NULL,
- initialize = function(expectedURL = NULL,
- serverResponse = NULL,
- expectedFilters = NULL)
+ initialize = function(expectedURL = NULL,
+ serverResponse = NULL,
+ expectedFilters = NULL)
{
- self$content <- serverResponse
+ if(is.null(serverResponse))
+ {
+ self$content <- list()
+ self$content$status_code <- 200
+ }
+ else
+ self$content <- serverResponse
+
self$expectedURL <- expectedURL
self$URLIsProperlyConfigured <- FALSE
self$expectedQueryFilters <- expectedFilters
self$queryFiltersAreCorrect <- FALSE
self$requestHeaderContainsAuthorizationField <- FALSE
+ self$requestHeaderContainsDestinationField <- FALSE
self$JSONEncodedBodyIsProvided <- FALSE
self$numberOfGETRequests <- 0
self$numberOfDELETERequests <- 0
self$numberOfPUTRequests <- 0
self$numberOfPOSTRequests <- 0
+ self$numberOfMOVERequests <- 0
self$serverMaxElementsPerRequest <- 5
},
PROPFIND = function(url, headers = NULL)
{
+ private$validateURL(url)
+ private$validateHeaders(headers)
self$content
},
MOVE = function(url, headers = NULL)
{
+ private$validateURL(url)
+ private$validateHeaders(headers)
+ self$numberOfMOVERequests <- self$numberOfMOVERequests + 1
self$content
}
),
{
if(!is.null(headers$Authorization))
self$requestHeaderContainsAuthorizationField <- TRUE
+
+ if(!is.null(headers$Destination))
+ self$requestHeaderContainsDestinationField <- TRUE
},
validateBody = function(body)
--- /dev/null
+source("fakes/FakeArvados.R")
+
+context("REST service")
+
+test_that("create calls REST service properly", {
+
+ expectedURL <- "https:/webdavHost/c=aaaaa-j7d0g-ccccccccccccccc/file"
+ fakeHttp <- FakeHttpRequest$new(expectedURL)
+ fakeHttpParser <- FakeHttpParser$new()
+
+ arv <- FakeArvados$new("token",
+ "https:/host/",
+ "https:/webdavHost/",
+ fakeHttp,
+ fakeHttpParser)
+
+ REST <- RESTService$new(arv)
+
+ uuid <- "aaaaa-j7d0g-ccccccccccccccc"
+ REST$create("file", uuid)
+
+ expect_that(fakeHttp$URLIsProperlyConfigured, is_true())
+ expect_that(fakeHttp$requestHeaderContainsAuthorizationField, is_true())
+ expect_that(fakeHttp$numberOfPUTRequests, equals(1))
+})
+
+test_that("create raises exception if error code is not between 200 and 300", {
+
+ response <- list()
+ response$status_code <- 404
+ fakeHttp <- FakeHttpRequest$new(serverResponse = response)
+
+ arv <- FakeArvados$new("token",
+ "https:/host/",
+ "https:/webdavHost/",
+ fakeHttp,
+ FakeHttpParser$new())
+
+ uuid <- "aaaaa-j7d0g-ccccccccccccccc"
+ REST <- RESTService$new(arv)
+
+ expect_that(REST$create("file", uuid),
+ throws_error("Server code: 404"))
+})
+
+test_that("delete calls REST service properly", {
+
+ expectedURL <- "https:/webdavHost/c=aaaaa-j7d0g-ccccccccccccccc/file"
+ fakeHttp <- FakeHttpRequest$new(expectedURL)
+ fakeHttpParser <- FakeHttpParser$new()
+
+ arv <- FakeArvados$new("token",
+ "https:/host/",
+ "https:/webdavHost/",
+ fakeHttp,
+ fakeHttpParser)
+
+ REST <- RESTService$new(arv)
+
+ uuid <- "aaaaa-j7d0g-ccccccccccccccc"
+ REST$delete("file", uuid)
+
+ expect_that(fakeHttp$URLIsProperlyConfigured, is_true())
+ expect_that(fakeHttp$requestHeaderContainsAuthorizationField, is_true())
+ expect_that(fakeHttp$numberOfDELETERequests, equals(1))
+})
+
+test_that("delete raises exception if error code is not between 200 and 300", {
+
+ response <- list()
+ response$status_code <- 404
+ fakeHttp <- FakeHttpRequest$new(serverResponse = response)
+
+ arv <- FakeArvados$new("token",
+ "https:/host/",
+ "https:/webdavHost/",
+ fakeHttp,
+ FakeHttpParser$new())
+
+ uuid <- "aaaaa-j7d0g-ccccccccccccccc"
+ REST <- RESTService$new(arv)
+
+ expect_that(REST$delete("file", uuid),
+ throws_error("Server code: 404"))
+})
+
+test_that("move calls REST service properly", {
+
+ expectedURL <- "https:/webdavHost/c=aaaaa-j7d0g-ccccccccccccccc/file"
+ fakeHttp <- FakeHttpRequest$new(expectedURL)
+ fakeHttpParser <- FakeHttpParser$new()
+
+ arv <- FakeArvados$new("token",
+ "https:/host/",
+ "https:/webdavHost/",
+ fakeHttp,
+ fakeHttpParser)
+
+ REST <- RESTService$new(arv)
+
+ uuid <- "aaaaa-j7d0g-ccccccccccccccc"
+ REST$move("file", "newDestination/file", uuid)
+
+ expect_that(fakeHttp$URLIsProperlyConfigured, is_true())
+ expect_that(fakeHttp$requestHeaderContainsAuthorizationField, is_true())
+ expect_that(fakeHttp$requestHeaderContainsDestinationField, is_true())
+ expect_that(fakeHttp$numberOfMOVERequests, equals(1))
+})
+
+test_that("move raises exception if error code is not between 200 and 300", {
+
+ response <- list()
+ response$status_code <- 404
+ fakeHttp <- FakeHttpRequest$new(serverResponse = response)
+
+ arv <- FakeArvados$new("token",
+ "https:/host/",
+ "https:/webdavHost/",
+ fakeHttp,
+ FakeHttpParser$new())
+
+ uuid <- "aaaaa-j7d0g-ccccccccccccccc"
+ REST <- RESTService$new(arv)
+
+ expect_that(REST$move("file", "newDestination/file", uuid),
+ throws_error("Server code: 404"))
+})
+
+test_that("getCollectionContent retreives correct content from WebDAV server", {
+
+ expectedURL <- "https:/webdavHost/c=aaaaa-j7d0g-ccccccccccccccc"
+
+ # WevDAV server always return collection name as first entry in result array,
+ # so getCollectionContern need to filter it
+ returnContent <- c("aaaaa-j7d0g-ccccccccccccccc",
+ "animal", "animal/dog", "ball")
+ expectedContent <- c("animal", "animal/dog", "ball")
+
+ fakeHttp <- FakeHttpRequest$new(expectedURL, returnContent)
+ fakeHttpParser <- FakeHttpParser$new()
+
+ arv <- FakeArvados$new("token",
+ "https:/host/",
+ "https:/webdavHost/",
+ fakeHttp,
+ fakeHttpParser)
+
+ REST <- RESTService$new(arv)
+
+ uuid <- "aaaaa-j7d0g-ccccccccccccccc"
+ returnResult <- REST$getCollectionContent(uuid)
+ returnedContentMatchExpected <- all.equal(returnResult, expectedContent)
+
+ expect_that(returnedContentMatchExpected, is_true())
+ expect_that(fakeHttp$requestHeaderContainsAuthorizationField, is_true())
+})
+
+test_that("getCollectionContent raises exception if server returns empty response", {
+
+ response <- ""
+ fakeHttp <- FakeHttpRequest$new(serverResponse = response)
+
+ arv <- FakeArvados$new("token",
+ "https:/host/",
+ "https:/webdavHost/",
+ fakeHttp,
+ FakeHttpParser$new())
+
+ uuid <- "aaaaa-j7d0g-ccccccccccccccc"
+ REST <- RESTService$new(arv)
+
+ expect_that(REST$getCollectionContent(uuid),
+ throws_error("Response is empty, reques may be misconfigured"))
+})
+
+test_that("getCollectionContent parses server response", {
+
+ fakeHttp <- FakeHttpRequest$new()
+ fakeHttpParser <- FakeHttpParser$new()
+
+ arv <- FakeArvados$new("token",
+ "https:/host/",
+ "https:/webdavHost/",
+ fakeHttp,
+ fakeHttpParser)
+
+ REST <- RESTService$new(arv)
+
+ uuid <- "aaaaa-j7d0g-ccccccccccccccc"
+ REST$getCollectionContent(uuid)
+
+ expect_that(fakeHttpParser$parserCallCount, equals(1))
+})
+
+test_that("getResourceSize calls REST service properly", {
+
+ expectedURL <- "https:/webdavHost/c=aaaaa-j7d0g-ccccccccccccccc/file"
+ expectedContent <- c("6", "2", "931", "12003")
+ fakeHttp <- FakeHttpRequest$new(expectedURL, expectedContent)
+ fakeHttpParser <- FakeHttpParser$new()
+
+ arv <- FakeArvados$new("token",
+ "https:/host/",
+ "https:/webdavHost/",
+ fakeHttp,
+ fakeHttpParser)
+
+ REST <- RESTService$new(arv)
+
+ uuid <- "aaaaa-j7d0g-ccccccccccccccc"
+ returnResult <- REST$getResourceSize("file", uuid)
+ returnedContentMatchExpected <- all.equal(returnResult,
+ as.numeric(expectedContent))
+
+ expect_that(fakeHttp$URLIsProperlyConfigured, is_true())
+ expect_that(fakeHttp$requestHeaderContainsAuthorizationField, is_true())
+ expect_that(returnedContentMatchExpected, is_true())
+})
+
+test_that("getResourceSize parses server response", {
+
+ fakeHttp <- FakeHttpRequest$new()
+ fakeHttpParser <- FakeHttpParser$new()
+
+ arv <- FakeArvados$new("token",
+ "https:/host/",
+ "https:/webdavHost/",
+ fakeHttp,
+ fakeHttpParser)
+
+ REST <- RESTService$new(arv)
+
+ uuid <- "aaaaa-j7d0g-ccccccccccccccc"
+ REST$getResourceSize("file", uuid)
+
+ expect_that(fakeHttpParser$parserCallCount, equals(1))
+})