context("Nonblocking connection") test_that("Non blocking connections ", { h <- new_handle() con <- curl(httpbin("drip?duration=3&numbytes=50&code=200"), handle = h) expect_equal(handle_data(h)$status_code, 0L) open(con, "rb", blocking = FALSE) expect_equal(handle_data(h)$status_code, 200L) n <- 0 while(isIncomplete(con)){ Sys.sleep(0.01) buf <- readBin(con, raw(), 5) n <- n + length(buf) } expect_equal(n, 50L) rm(h) close(con) gc() expect_equal(total_handles(), 0L) }) test_that("Non blocking readline", { con <- curl(httpbin("stream/71")) open(con, "r", blocking = FALSE) n <- 0 while(isIncomplete(con)){ buf <- readLines(con, 5) n <- n + length(buf) } expect_equal(n, 71L) close(con) gc() expect_equal(total_handles(), 0L) }) test_that("isIncomplete for blocking connections", { con <- curl(httpbin("stream/71")) expect_false(isIncomplete(con)) expect_equal(length(readLines(con)), 71L) expect_false(isIncomplete(con)) open(con) expect_true(isIncomplete(con)) n <- 0 while(isIncomplete(con)){ buf <- readLines(con, 5) n <- n + length(buf) } expect_equal(n, 71L) close(con) gc() expect_equal(total_handles(), 0L) }) test_that("Small buffers", { con <- curl(httpbin("")) expect_false(isIncomplete(con = con)) open(con) on.exit(close(con), add = TRUE) expect_true(isIncomplete(con = con)) readLines(con, 1) expect_true(isIncomplete(con = con)) readLines(con, warn = FALSE) expect_false(isIncomplete(con = con)) })