#![cfg(any(feature = "sqlite", feature = "postgres", feature = "mysql"))]
use inklog::InklogError;
use std::env;
mod database_lifecycle_test;
mod database_sink_test;
mod dbnexus_adapter_test;
pub fn get_test_db_url() -> Option<String> {
env::var("INKLOG_TEST_DB_URL").ok()
}
pub fn get_test_db_url_or_skip() -> Option<String> {
let url = env::var("INKLOG_TEST_DB_URL").ok()?;
if url.trim().is_empty() {
return None;
}
Some(url)
}
pub fn unique_sqlite_url(name: &str) -> String {
let pid = std::process::id();
format!("sqlite:///tmp/inklog_test_{}_{}.db?mode=rwc", name, pid)
}
pub const CREATE_TABLE_SQL: &str = "CREATE TABLE IF NOT EXISTS logs ( \
timestamp TEXT NOT NULL, \
level TEXT NOT NULL, \
target TEXT NOT NULL, \
message TEXT NOT NULL, \
fields TEXT NOT NULL, \
file TEXT, \
line INTEGER, \
thread_id TEXT NOT NULL \
)";
pub fn create_table_sql(table_name: &str) -> String {
format!(
"CREATE TABLE IF NOT EXISTS {} ( \
timestamp TEXT NOT NULL, \
level TEXT NOT NULL, \
target TEXT NOT NULL, \
message TEXT NOT NULL, \
fields TEXT NOT NULL, \
file TEXT, \
line INTEGER, \
thread_id TEXT NOT NULL \
)",
table_name
)
}
pub const COUNT_TABLE_SQL: &str = "SELECT COUNT(*) FROM logs";
pub fn make_log_record(level: &str, target: &str, message: &str) -> inklog::LogRecord {
use inklog::tracing::Level;
let lvl = match level.to_uppercase().as_str() {
"ERROR" => Level::ERROR,
"WARN" => Level::WARN,
"INFO" => Level::INFO,
"DEBUG" => Level::DEBUG,
_ => Level::TRACE,
};
inklog::LogRecord::new(lvl, target.to_string(), message.to_string())
}
pub fn cleanup_sqlite_file(url: &str) {
if let Some(path) = url
.strip_prefix("sqlite://")
.and_then(|s| s.split('?').next())
{
let _ = std::fs::remove_file(path);
}
}
pub fn err_to_string(e: &InklogError) -> String {
e.to_string()
}