X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/134815098b060c232d1eee381d1eeb8e9d6162ff..1a7c5c627ca9cbbbc13e1c9710bbd6268c59b22a:/sdk/R/tests/testthat/test-HttpRequest.R diff --git a/sdk/R/tests/testthat/test-HttpRequest.R b/sdk/R/tests/testthat/test-HttpRequest.R index 5c2fb602fd..c1b6f1039c 100644 --- a/sdk/R/tests/testthat/test-HttpRequest.R +++ b/sdk/R/tests/testthat/test-HttpRequest.R @@ -1,12 +1,16 @@ +# Copyright (C) The Arvados Authors. All rights reserved. +# +# SPDX-License-Identifier: Apache-2.0 + context("Http Request") -test_that("execyte raises exception if http verb is not valid", { +test_that("execute raises exception if http verb is not valid", { http <- HttpRequest$new() expect_that(http$exec("FAKE VERB", "url"), throws_error("Http verb is not valid.")) -}) +}) test_that("createQuery generates and encodes query portion of http", { @@ -16,12 +20,89 @@ test_that("createQuery generates and encodes query portion of http", { queryParams$limit <- 20 queryParams$offset <- 50 expect_that(http$createQuery(queryParams), - equals(paste0("/?filters=%5B%5B%22color%22%2C%22%3D%22%2C%22red", + equals(paste0("?filters=%5B%5B%22color%22%2C%22%3D%22%2C%22red", "%22%5D%5D&limit=20&offset=50"))) -}) +}) test_that("createQuery generates and empty string when queryParams is an empty list", { http <- HttpRequest$new() expect_that(http$createQuery(list()), equals("")) -}) +}) + +test_that("exec calls httr functions correctly", { + httrNamespace <- getNamespace("httr") + + # Monkeypatch httr functions and assert that they are called later + add_headersCalled <- FALSE + unlockBinding("add_headers", httrNamespace) + newAddHeaders <- function(h) + { + add_headersCalled <<- TRUE + list() + } + httrNamespace$add_headers <- newAddHeaders + lockBinding("add_headers", httrNamespace) + + expectedConfig <- list() + retryCalled <- FALSE + unlockBinding("RETRY", httrNamespace) + newRETRY <- function(verb, url, body, config, times) + { + retryCalled <<- TRUE + expectedConfig <<- config + } + httrNamespace$RETRY <- newRETRY + lockBinding("RETRY", httrNamespace) + + Sys.setenv("ARVADOS_API_HOST_INSECURE" = TRUE) + http <- HttpRequest$new() + http$exec("GET", "url") + + expect_true(add_headersCalled) + expect_true(retryCalled) + expect_that(expectedConfig$options, equals(list(ssl_verifypeer = 0L))) +}) + +test_that("getConnection calls curl functions correctly", { + curlNamespace <- getNamespace("curl") + + # Monkeypatch curl functions and assert that they are called later + curlCalled <- FALSE + unlockBinding("curl", curlNamespace) + newCurl <- function(url, open, handle) curlCalled <<- TRUE + curlNamespace$curl <- newCurl + lockBinding("curl", curlNamespace) + + new_handleCalled <- FALSE + unlockBinding("new_handle", curlNamespace) + newHandleFun <- function() + { + new_handleCalled <<- TRUE + list() + } + curlNamespace$new_handle <- newHandleFun + lockBinding("new_handle", curlNamespace) + + handle_setheadersCalled <- FALSE + unlockBinding("handle_setheaders", curlNamespace) + newHandleSetHeaders <- function(h, .list) handle_setheadersCalled <<- TRUE + curlNamespace$handle_setheaders <- newHandleSetHeaders + lockBinding("handle_setheaders", curlNamespace) + + handle_setoptCalled <- FALSE + unlockBinding("handle_setopt", curlNamespace) + newHandleSetOpt <- function(h, ssl_verifypeer) handle_setoptCalled <<- TRUE + curlNamespace$handle_setopt <- newHandleSetOpt + lockBinding("handle_setopt", curlNamespace) + + + Sys.setenv("ARVADOS_API_HOST_INSECURE" = TRUE) + http <- HttpRequest$new() + http$getConnection("location", list(), "r") + + expect_true(new_handleCalled) + expect_true(handle_setheadersCalled) + expect_true(handle_setoptCalled) + expect_true(curlCalled) +})