1 # Copyright (C) The Arvados Authors. All rights reserved.
3 # SPDX-License-Identifier: Apache-2.0
5 FakeHttpRequest <- R6::R6Class(
11 serverMaxElementsPerRequest = NULL,
15 URLIsProperlyConfigured = NULL,
16 expectedQueryFilters = NULL,
17 queryFiltersAreCorrect = NULL,
18 requestHeaderContainsAuthorizationField = NULL,
19 requestHeaderContainsDestinationField = NULL,
20 requestHeaderContainsRangeField = NULL,
21 requestHeaderContainsContentTypeField = NULL,
22 JSONEncodedBodyIsProvided = NULL,
23 requestBodyIsProvided = NULL,
25 numberOfGETRequests = NULL,
26 numberOfDELETERequests = NULL,
27 numberOfPUTRequests = NULL,
28 numberOfPOSTRequests = NULL,
29 numberOfMOVERequests = NULL,
30 numberOfgetConnectionCalls = NULL,
32 initialize = function(expectedURL = NULL,
33 serverResponse = NULL,
34 expectedFilters = NULL)
36 if(is.null(serverResponse))
38 self$content <- list()
39 self$content$status_code <- 200
42 self$content <- serverResponse
44 self$expectedURL <- expectedURL
45 self$URLIsProperlyConfigured <- FALSE
46 self$expectedQueryFilters <- expectedFilters
47 self$queryFiltersAreCorrect <- FALSE
48 self$requestHeaderContainsAuthorizationField <- FALSE
49 self$requestHeaderContainsDestinationField <- FALSE
50 self$requestHeaderContainsRangeField <- FALSE
51 self$requestHeaderContainsContentTypeField <- FALSE
52 self$JSONEncodedBodyIsProvided <- FALSE
53 self$requestBodyIsProvided <- FALSE
55 self$numberOfGETRequests <- 0
56 self$numberOfDELETERequests <- 0
57 self$numberOfPUTRequests <- 0
58 self$numberOfPOSTRequests <- 0
59 self$numberOfMOVERequests <- 0
61 self$numberOfgetConnectionCalls <- 0
63 self$serverMaxElementsPerRequest <- 5
66 exec = function(verb, url, headers = NULL, body = NULL, query = NULL,
67 limit = NULL, offset = NULL, retryTimes = 0)
69 private$validateURL(url)
70 private$validateHeaders(headers)
71 private$validateFilters(queryFilters)
72 private$validateBody(body)
75 self$numberOfGETRequests <- self$numberOfGETRequests + 1
76 else if(verb == "POST")
77 self$numberOfPOSTRequests <- self$numberOfPOSTRequests + 1
78 else if(verb == "PUT")
79 self$numberOfPUTRequests <- self$numberOfPUTRequests + 1
80 else if(verb == "DELETE")
81 self$numberOfDELETERequests <- self$numberOfDELETERequests + 1
82 else if(verb == "MOVE")
83 self$numberOfMOVERequests <- self$numberOfMOVERequests + 1
84 else if(verb == "PROPFIND")
89 if(!is.null(self$content$items_available))
90 return(private$getElements(offset, limit))
95 getConnection = function(url, headers, openMode)
97 self$numberOfgetConnectionCalls <- self$numberOfgetConnectionCalls + 1
98 c(url, headers, openMode)
104 validateURL = function(url)
106 if(!is.null(self$expectedURL) && url == self$expectedURL)
107 self$URLIsProperlyConfigured <- TRUE
110 validateHeaders = function(headers)
112 if(!is.null(headers$Authorization))
113 self$requestHeaderContainsAuthorizationField <- TRUE
115 if(!is.null(headers$Destination))
116 self$requestHeaderContainsDestinationField <- TRUE
118 if(!is.null(headers$Range))
119 self$requestHeaderContainsRangeField <- TRUE
121 if(!is.null(headers[["Content-Type"]]))
122 self$requestHeaderContainsContentTypeField <- TRUE
125 validateBody = function(body)
129 self$requestBodyIsProvided <- TRUE
131 if(class(body) == "json")
132 self$JSONEncodedBodyIsProvided <- TRUE
136 validateFilters = function(filters)
138 if(!is.null(self$expectedQueryFilters) &&
140 all.equal(unname(filters), self$expectedQueryFilters))
142 self$queryFiltersAreCorrect <- TRUE
146 getElements = function(offset, limit)
149 elementCount <- self$serverMaxElementsPerRequest
153 if(offset > self$content$items_available)
154 stop("Invalid offset")
160 if(limit < self$serverMaxElementsPerRequest)
161 elementCount <- limit - 1
164 serverResponse <- list()
165 serverResponse$items_available <- self$content$items_available
166 serverResponse$items <- self$content$items[start:(start + elementCount - 1)]
168 if(start + elementCount > self$content$items_available)
170 elementCount = self$content$items_available - start
171 serverResponse$items <- self$content$items[start:(start + elementCount)]