#[cfg(feature = "fs_persist")]
use serial_test::serial;
#[cfg(feature = "fs_persist")]
#[tokio::test]
#[serial]
async fn test_sqlite_indexeddb_is_send() {
use absurder_sql::{DatabaseConfig, SqliteIndexedDB};
use tempfile::TempDir;
fn assert_send<T: Send>() {}
assert_send::<SqliteIndexedDB>();
let temp_dir = TempDir::new().expect("Failed to create temp dir");
unsafe {
std::env::set_var("ABSURDERSQL_FS_BASE", temp_dir.path());
}
let config = DatabaseConfig {
name: "test_send.db".to_string(),
cache_size: Some(2000),
..Default::default()
};
let db = SqliteIndexedDB::new(config)
.await
.expect("Failed to create database");
let handle = tokio::task::spawn(async move {
let _db = db; "Database successfully sent across threads"
});
let result = handle.await.expect("Task failed");
assert_eq!(result, "Database successfully sent across threads");
}
#[cfg(feature = "fs_persist")]
#[tokio::test]
#[serial]
async fn test_database_operations_across_threads() {
use absurder_sql::{DatabaseConfig, SqliteIndexedDB};
use tempfile::TempDir;
let _temp_dir = TempDir::new().expect("Failed to create temp dir");
let temp_path = _temp_dir.path().to_path_buf();
unsafe {
std::env::set_var("ABSURDERSQL_FS_BASE", &temp_path);
}
let config = DatabaseConfig {
name: "test_thread_ops.db".to_string(),
cache_size: Some(2000),
journal_mode: Some("DELETE".to_string()), ..Default::default()
};
let mut db = SqliteIndexedDB::new(config)
.await
.expect("Failed to create database");
db.execute("CREATE TABLE IF NOT EXISTS test (id INTEGER PRIMARY KEY, value TEXT)")
.await
.expect("Failed to create table");
db.execute("INSERT INTO test (value) VALUES ('test_value')")
.await
.expect("Failed to insert");
let handle = tokio::task::spawn(async move {
let result = db
.execute("SELECT * FROM test")
.await
.expect("Failed to select");
(db, result)
});
let (_db, result) = handle.await.expect("Task failed");
assert_eq!(result.rows.len(), 1);
drop(_temp_dir);
}