Nothing
context("ssh-tunnel")
is_windows <- function(){
Sys.info()[["sysname"]] == "Windows"
}
test_that("Tunnel: recycle port in process",{
# Start tunnel twice!
pid <- sys::r_background(std_out = FALSE, std_err = FALSE, args = c("-e",
paste0("library(ssh);x=ssh_connect('dev.opencpu.org');ssh_tunnel(x,target='ds043942.mongolab.com:43942');",
"ssh_tunnel(x,target='ds043942.mongolab.com:43942');ssh_disconnect(x)")))
# Connect and disconnect twice on the same parent process
for(i in 1:2){
Sys.sleep(3)
expect_equal(sys::exec_status(pid, wait = FALSE), NA_integer_)
con <- mongolite::mongo("mtcars", url = "mongodb://readwrite:test@localhost:5555/jeroen_test")
expect_is(con, 'mongo')
rm(con); gc();
}
Sys.sleep(3)
expect_error(mongolite::mongo("mtcars", url = "mongodb://readwrite:test@localhost:5555/jeroen_test"))
expect_equal(sys::exec_status(pid, wait = FALSE), 0)
})
test_that("Tunnel: free port on exit", {
for(i in 1:3){
pid <- sys::r_background(std_out = interactive(), std_err = interactive(), args = c("-e",
"x=ssh::ssh_connect('dev.opencpu.org');ssh::ssh_tunnel(x,target='ds043942.mongolab.com:43942');ssh::ssh_disconnect(x)"))
Sys.sleep(3)
expect_equal(sys::exec_status(pid, wait = FALSE), NA_integer_)
Sys.sleep(3)
con <- mongolite::mongo("mtcars", url = "mongodb://readwrite:test@localhost:5555/jeroen_test")
expect_is(con, 'mongo')
if(con$count())
con$drop()
con$insert(mtcars)
out <- con$find()
expect_equal(out, mtcars)
con$drop()
if(i == 2){
# Test that process can also be interrupted. For Windows this results in non-success.
tools::pskill(pid, tools::SIGINT)
expect_equal(sys::exec_status(pid), ifelse(is_windows(), 1, 0))
} else {
con$disconnect()
expect_equal(sys::exec_status(pid), 0)
}
expect_error(con$count())
#not needed but just in case:
tools::pskill(pid, tools::SIGKILL)
}
})
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.