Skip to content

Commit

Permalink
Trying test loops
Browse files Browse the repository at this point in the history
  • Loading branch information
Schuemie authored and Schuemie committed Oct 21, 2023
1 parent d3f7a8b commit 2b6e31c
Show file tree
Hide file tree
Showing 3 changed files with 256 additions and 397 deletions.
218 changes: 212 additions & 6 deletions tests/testthat/setup.R
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# Download the JDBC drivers used in the tests

library(DatabaseConnector)
# Download the JDBC drivers used in the tests ----------------------------------
if (Sys.getenv("DONT_DOWNLOAD_JDBC_DRIVERS", "") != "TRUE") {
oldJarFolder <- Sys.getenv("DATABASECONNECTOR_JAR_FOLDER")
Sys.setenv("DATABASECONNECTOR_JAR_FOLDER" = tempfile("jdbcDrivers"))
Expand All @@ -10,12 +10,218 @@ if (Sys.getenv("DONT_DOWNLOAD_JDBC_DRIVERS", "") != "TRUE") {
downloadJdbcDrivers("redshift")
downloadJdbcDrivers("spark")
downloadJdbcDrivers("snowflake")

withr::defer(
{
if (testthat::is_testing()) {
withr::defer({
unlink(Sys.getenv("DATABASECONNECTOR_JAR_FOLDER"), recursive = TRUE, force = TRUE)
Sys.setenv("DATABASECONNECTOR_JAR_FOLDER" = oldJarFolder)
},
testthat::teardown_env()
)
)
}
}

# Create a list with testing server details ------------------------------
testServers <- list()

# Postgres
parts <- unlist(strsplit(Sys.getenv("CDM5_POSTGRESQL_SERVER"), "/"))
host <- parts[1]
database <- parts[2]
port <- "5432"
connectionString <- paste0("jdbc:postgresql://", host, ":", port, "/", database)
testServers[[length(testServers) + 1]] <- list(
connectionDetails = createConnectionDetails(
dbms = "postgresql",
user = Sys.getenv("CDM5_POSTGRESQL_USER"),
password = URLdecode(Sys.getenv("CDM5_POSTGRESQL_PASSWORD")),
server = Sys.getenv("CDM5_POSTGRESQL_SERVER")
),
connectionDetails2 = details <- createConnectionDetails(
dbms = "postgresql",
connectionString = !!connectionString,
user = Sys.getenv("CDM5_POSTGRESQL_USER"),
password = URLdecode(Sys.getenv("CDM5_POSTGRESQL_PASSWORD"))
),
cdmDatabaseSchema = Sys.getenv("CDM5_POSTGRESQL_CDM54_SCHEMA"),
tempEmulationSchema = NULL
)

# SQL Server
connectionString <- paste0("jdbc:sqlserver://", Sys.getenv("CDM5_SQL_SERVER_SERVER"))
testServers[[length(testServers) + 1]] <- list(
connectionDetails = details <- createConnectionDetails(
dbms = "sql server",
user = Sys.getenv("CDM5_SQL_SERVER_USER"),
password = URLdecode(Sys.getenv("CDM5_SQL_SERVER_PASSWORD")),
server = Sys.getenv("CDM5_SQL_SERVER_SERVER")
),
connectionDetails2 = details <- createConnectionDetails(
dbms = "sql server",
connectionString = !!connectionString,
user = Sys.getenv("CDM5_SQL_SERVER_USER"),
password = URLdecode(Sys.getenv("CDM5_SQL_SERVER_PASSWORD"))
),
cdmDatabaseSchema = Sys.getenv("CDM5_SQL_SERVER_CDM54_SCHEMA"),
tempEmulationSchema = NULL
)

# Oracle
port <- "1521"
parts <- unlist(strsplit(Sys.getenv("CDM5_ORACLE_SERVER"), "/"))
host <- parts[1]
sid <- parts[2]
connectionString <- paste0("jdbc:oracle:thin:@", host, ":", port, ":", sid)
testServers[[length(testServers) + 1]] <- list(
connectionDetails = details <- createConnectionDetails(
dbms = "oracle",
user = Sys.getenv("CDM5_ORACLE_USER"),
password = URLdecode(Sys.getenv("CDM5_ORACLE_PASSWORD")),
server = Sys.getenv("CDM5_ORACLE_SERVER")
),
connectionDetails2 = details <- createConnectionDetails(
dbms = "oracle",
connectionString = !!connectionString,
user = Sys.getenv("CDM5_ORACLE_USER"),
password = URLdecode(Sys.getenv("CDM5_ORACLE_PASSWORD"))
),
cdmDatabaseSchema = Sys.getenv("CDM5_ORACLE_CDM54_SCHEMA"),
tempEmulationSchema = Sys.getenv("CDM5_ORACLE_OHDSI_SCHEMA")
)

# RedShift
parts <- unlist(strsplit(Sys.getenv("CDM5_REDSHIFT_SERVER"), "/"))
host <- parts[1]
database <- parts[2]
port <- "5439"
connectionString <- paste0("jdbc:redshift://", host, ":", port, "/", database)
testServers[[length(testServers) + 1]] <- list(
connectionDetails = details <- createConnectionDetails(
dbms = "redshift",
user = Sys.getenv("CDM5_REDSHIFT_USER"),
password = URLdecode(Sys.getenv("CDM5_REDSHIFT_PASSWORD")),
server = Sys.getenv("CDM5_REDSHIFT_SERVER")
),
connectionDetails2 = details <- createConnectionDetails(
dbms = "redshift",
connectionString = connectionString,
user = Sys.getenv("CDM5_REDSHIFT_USER"),
password = URLdecode(Sys.getenv("CDM5_REDSHIFT_PASSWORD"))
),
cdmDatabaseSchema = Sys.getenv("CDM5_REDSHIFT_CDM54_SCHEMA"),
tempEmulationSchema = NULL
)

# Snowflake
testServers[[length(testServers) + 1]] <- list(
connectionDetails = details <- createConnectionDetails(
dbms = "snowflake",
user = Sys.getenv("CDM_SNOWFLAKE_USER"),
password = URLdecode(Sys.getenv("CDM_SNOWFLAKE_PASSWORD")),
connectionString = Sys.getenv("CDM_SNOWFLAKE_CONNECTION_STRING")
),
NULL,
cdmDatabaseSchema = Sys.getenv("CDM_SNOWFLAKE_CDM53_SCHEMA"),
tempEmulationSchema = Sys.getenv("CDM_SNOWFLAKE_OHDSI_SCHEMA")
)

# SQLite
sqliteFile <- tempfile(fileext = ".sqlite")
if (testthat::is_testing()) {
withr::defer(unlink(sqliteFile, force = TRUE), testthat::teardown_env())
}
cdmDatabaseSchema <- "main"
connectionDetails <- createConnectionDetails(
dbms = "sqlite",
server = sqliteFile
)
connection <- connect(connectionDetails)
insertTable(
connection = connection,
databaseSchema = cdmDatabaseSchema,
tableName = "person",
data = data.frame(person_id = seq_len(100),
year_of_birth = round(runif(100, 1900, 2000)),
race_concept_id = as.numeric(NA),
gender_concept_id = rep(c(8507, 8532), 50),
care_site_id = round(runif(100, 1, 1e7)))
)
insertTable(
connection = connection,
databaseSchema = cdmDatabaseSchema,
tableName = "observation_period",
data = data.frame(person_id = seq_len(100),
observation_period_start_date = rep(as.Date("2000-01-01"), 100),
observation_period_end_date = rep(as.Date(c("2000-06-01", "2001-12-31")), 50),
period_type_concept_id = rep(0, 100))
)
insertTable(
connection = connection,
databaseSchema = cdmDatabaseSchema,
tableName = "vocabulary",
data = data.frame(vocabulary_id = c("a", "b"),
vocabulary_name = c("a", "b"),
vocabulary_reference= c("a", "b"),
vocabulary_version = c("a", "b"),
vocabulary_concpet_id = c(1, 2))
)
disconnect(connection)
testServers[[length(testServers) + 1]] <- list(
connectionDetails = connectionDetails,
NULL,
cdmDatabaseSchema = cdmDatabaseSchema,
tempEmulationSchema = NULL
)

# DuckDB
duckdbFile <- tempfile(fileext = ".duckdb")
if (testthat::is_testing()) {
withr::defer(unlink(duckdbFile, force = TRUE), testthat::teardown_env())
}
cdmDatabaseSchema <- "main"
connectionDetails <- createConnectionDetails(
dbms = "duckdb",
server = duckdbFile
)
connection <- connect(connectionDetails)
insertTable(
connection = connection,
databaseSchema = cdmDatabaseSchema,
tableName = "person",
data = data.frame(person_id = seq_len(100),
year_of_birth = round(runif(100, 1900, 2000)),
race_concept_id = as.numeric(NA),
gender_concept_id = rep(c(8507, 8532), 50),
care_site_id = round(runif(100, 1, 1e7)))
)
insertTable(
connection = connection,
databaseSchema = cdmDatabaseSchema,
tableName = "observation_period",
data = data.frame(person_id = seq_len(100),
observation_period_start_date = rep(as.Date("2000-01-01"), 100),
observation_period_end_date = rep(as.Date(c("2000-06-01", "2001-12-31")), 50),
period_type_concept_id = rep(0, 100))
)
insertTable(
connection = connection,
databaseSchema = cdmDatabaseSchema,
tableName = "vocabulary",
data = data.frame(vocabulary_id = c("a", "b"),
vocabulary_name = c("a", "b"),
vocabulary_reference= c("a", "b"),
vocabulary_version = c("a", "b"),
vocabulary_concpet_id = c(1, 2))
)
disconnect(connection)
testServers[[length(testServers) + 1]] <- list(
connectionDetails = connectionDetails,
NULL,
cdmDatabaseSchema = cdmDatabaseSchema,
tempEmulationSchema = NULL
)

addDbmsToLabel <- function(label, testServer) {
return(paste(label, testServer$connectionDetails$dbms))
}

161 changes: 25 additions & 136 deletions tests/testthat/test-BatchProcess.R
Original file line number Diff line number Diff line change
@@ -1,136 +1,25 @@
test_that("renderTranslateQueryApplyBatched works", {
connection <- connect(
dbms = "postgresql",
user = Sys.getenv("CDM5_POSTGRESQL_USER"),
password = URLdecode(Sys.getenv("CDM5_POSTGRESQL_PASSWORD")),
server = Sys.getenv("CDM5_POSTGRESQL_SERVER")
)
cdmDatabaseSchema <- Sys.getenv("CDM5_POSTGRESQL_CDM54_SCHEMA")
sql <- "SELECT TOP 10 * FROM @cdm_database_schema.vocabulary;"

fun <- function(data, position, myString) {
data$test <- myString
return(data)
}
args <- list(myString = "MY STRING")
data <- renderTranslateQueryApplyBatched(connection,
sql,
fun,
args,
cdm_database_schema = cdmDatabaseSchema
)
data <- do.call(rbind, data)
expect_true("test" %in% colnames(data))
expect_true(all(data$test == "MY STRING"))
disconnect(connection)


# Oracle ---------------------------------------
connection <- connect(
dbms = "oracle",
user = Sys.getenv("CDM5_ORACLE_USER"),
password = URLdecode(Sys.getenv("CDM5_ORACLE_PASSWORD")),
server = Sys.getenv("CDM5_ORACLE_SERVER")
)
cdmDatabaseSchema <- Sys.getenv("CDM5_ORACLE_CDM54_SCHEMA")
sql <- "SELECT TOP 10 * FROM @cdm_database_schema.vocabulary;"
data <- renderTranslateQueryApplyBatched(connection,
sql,
fun,
args,
cdm_database_schema = cdmDatabaseSchema
)
data <- do.call(rbind, data)
expect_true("test" %in% colnames(data))
expect_true(all(data$test == "MY STRING"))
disconnect(connection)

# SQL Server --------------------------------------
connection <- connect(
dbms = "sql server",
user = Sys.getenv("CDM5_SQL_SERVER_USER"),
password = URLdecode(Sys.getenv("CDM5_SQL_SERVER_PASSWORD")),
server = Sys.getenv("CDM5_SQL_SERVER_SERVER")
)
cdmDatabaseSchema <- Sys.getenv("CDM5_SQL_SERVER_CDM54_SCHEMA")

sql <- "SELECT TOP 10 * FROM @cdm_database_schema.vocabulary;"
data <- renderTranslateQueryApplyBatched(connection,
sql,
fun,
args,
cdm_database_schema = cdmDatabaseSchema
)
data <- do.call(rbind, data)
expect_true("test" %in% colnames(data))
expect_true(all(data$test == "MY STRING"))
disconnect(connection)

# RedShift ----------------------------------------------
connection <- connect(
dbms = "redshift",
user = Sys.getenv("CDM5_REDSHIFT_USER"),
password = URLdecode(Sys.getenv("CDM5_REDSHIFT_PASSWORD")),
server = Sys.getenv("CDM5_REDSHIFT_SERVER")
)
cdmDatabaseSchema <- Sys.getenv("CDM5_REDSHIFT_CDM54_SCHEMA")

sql <- "SELECT TOP 10 * FROM @cdm_database_schema.vocabulary;"
data <- renderTranslateQueryApplyBatched(connection,
sql,
fun,
args,
cdm_database_schema = cdmDatabaseSchema
)
data <- do.call(rbind, data)
expect_true("test" %in% colnames(data))
expect_true(all(data$test == "MY STRING"))
disconnect(connection)


# Sqlite --------------------------------------------------
dbFile <- tempfile()
details <- createConnectionDetails(
dbms = "sqlite",
server = dbFile
)
connection <- connect(details)
executeSql(connection, "CREATE TABLE person (x INT);
INSERT INTO person (x) VALUES (1); INSERT INTO person (x) VALUES (2); INSERT INTO person (x) VALUES (3);")

sql <- "SELECT * FROM person;"
data <- renderTranslateQueryApplyBatched(
connection,
sql,
fun,
args
)
data <- do.call(rbind, data)
expect_true("test" %in% colnames(data))
expect_true(all(data$test == "MY STRING"))

disconnect(connection)
unlink(dbFile)

# Snowflake --------------------------------------------------
details <- createConnectionDetails(
dbms = "snowflake",
user = Sys.getenv("CDM_SNOWFLAKE_USER"),
password = URLdecode(Sys.getenv("CDM_SNOWFLAKE_PASSWORD")),
connectionString = Sys.getenv("CDM_SNOWFLAKE_CONNECTION_STRING")
)
connection <- connect(details)
cdmDatabaseSchema <- Sys.getenv("CDM_SNOWFLAKE_CDM53_SCHEMA")

sql <- "SELECT TOP 10 * FROM @cdm_database_schema.vocabulary;"
data <- renderTranslateQueryApplyBatched(connection,
sql,
fun,
args,
cdm_database_schema = cdmDatabaseSchema
)
data <- do.call(rbind, data)
expect_true("test" %in% colnames(data))
expect_true(all(data$test == "MY STRING"))
disconnect(connection)
})
library(testthat)

fun <- function(data, position, myString) {
data$test <- myString
return(data)
}
args <- list(myString = "MY STRING")

for (testServer in testServers) {
test_that(addDbmsToLabel("Open and close connection", testServer), {
connection <- connect(testServer$connectionDetails)
on.exit(disconnect(connection))
sql <- "SELECT TOP 10 * FROM @cdm_database_schema.vocabulary;"
data <- renderTranslateQueryApplyBatched(
connection,
sql,
fun,
args,
cdm_database_schema = testServer$cdmDatabaseSchema
)
data <- do.call(rbind, data)
expect_true("test" %in% colnames(data))
expect_true(all(data$test == "MY STRING"))
})
}
Loading

0 comments on commit 2b6e31c

Please sign in to comment.