mirror of
https://github.com/aljazceru/turso.git
synced 2025-12-18 09:04:19 +01:00
Add a simple test for encryption
This commit is contained in:
2
.github/workflows/rust.yml
vendored
2
.github/workflows/rust.yml
vendored
@@ -38,6 +38,8 @@ jobs:
|
|||||||
python-version: "3.10"
|
python-version: "3.10"
|
||||||
- name: Build
|
- name: Build
|
||||||
run: cargo build --verbose
|
run: cargo build --verbose
|
||||||
|
- name: Test Encryption
|
||||||
|
run: cargo test --features encryption --color=always --test integration_tests query_processing::encryption
|
||||||
- name: Test
|
- name: Test
|
||||||
env:
|
env:
|
||||||
RUST_LOG: ${{ runner.debug && 'turso_core::storage=trace' || '' }}
|
RUST_LOG: ${{ runner.debug && 'turso_core::storage=trace' || '' }}
|
||||||
|
|||||||
@@ -32,3 +32,6 @@ zerocopy = "0.8.26"
|
|||||||
test-log = { version = "0.2.17", features = ["trace"] }
|
test-log = { version = "0.2.17", features = ["trace"] }
|
||||||
tracing-subscriber = { version = "0.3.19", features = ["env-filter"] }
|
tracing-subscriber = { version = "0.3.19", features = ["env-filter"] }
|
||||||
tracing = "0.1.41"
|
tracing = "0.1.41"
|
||||||
|
|
||||||
|
[features]
|
||||||
|
encryption = ["turso_core/encryption"]
|
||||||
70
tests/integration/query_processing/encryption.rs
Normal file
70
tests/integration/query_processing/encryption.rs
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
use crate::common::{do_flush, TempDatabase};
|
||||||
|
use crate::query_processing::test_write_path::{run_query, run_query_on_row};
|
||||||
|
use rand::{rng, RngCore};
|
||||||
|
use std::panic;
|
||||||
|
use turso_core::Row;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_per_page_encryption() -> anyhow::Result<()> {
|
||||||
|
let _ = env_logger::try_init();
|
||||||
|
let db_name = format!("test-{}.db", rng().next_u32());
|
||||||
|
let tmp_db = TempDatabase::new(&db_name, false);
|
||||||
|
let db_path = tmp_db.path.clone();
|
||||||
|
|
||||||
|
{
|
||||||
|
let conn = tmp_db.connect_limbo();
|
||||||
|
run_query(
|
||||||
|
&tmp_db,
|
||||||
|
&conn,
|
||||||
|
"PRAGMA key = 'super secret key for encryption';",
|
||||||
|
)?;
|
||||||
|
run_query(
|
||||||
|
&tmp_db,
|
||||||
|
&conn,
|
||||||
|
"CREATE TABLE test (id INTEGER PRIMARY KEY, value TEXT);",
|
||||||
|
)?;
|
||||||
|
run_query(
|
||||||
|
&tmp_db,
|
||||||
|
&conn,
|
||||||
|
"INSERT INTO test (value) VALUES ('Hello, World!')",
|
||||||
|
)?;
|
||||||
|
let mut row_count = 0;
|
||||||
|
run_query_on_row(&tmp_db, &conn, "SELECT * FROM test", |row: &Row| {
|
||||||
|
assert_eq!(row.get::<i64>(0).unwrap(), 1);
|
||||||
|
assert_eq!(row.get::<String>(1).unwrap(), "Hello, World!");
|
||||||
|
row_count += 1;
|
||||||
|
})?;
|
||||||
|
assert_eq!(row_count, 1);
|
||||||
|
do_flush(&conn, &tmp_db)?;
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
// this should panik because we should not be able to access the encrypted database
|
||||||
|
// without the key
|
||||||
|
let conn = tmp_db.connect_limbo();
|
||||||
|
let should_panic = panic::catch_unwind(panic::AssertUnwindSafe(|| {
|
||||||
|
run_query_on_row(&tmp_db, &conn, "SELECT * FROM test", |_: &Row| {}).unwrap();
|
||||||
|
}));
|
||||||
|
assert!(
|
||||||
|
should_panic.is_err(),
|
||||||
|
"should panic when accessing encrypted DB without key"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
// let's test the existing db with the key
|
||||||
|
let existing_db = TempDatabase::new_with_existent(&db_path, false);
|
||||||
|
let conn = existing_db.connect_limbo();
|
||||||
|
run_query(
|
||||||
|
&existing_db,
|
||||||
|
&conn,
|
||||||
|
"PRAGMA key = 'super secret key for encryption';",
|
||||||
|
)?;
|
||||||
|
run_query_on_row(&existing_db, &conn, "SELECT * FROM test", |row: &Row| {
|
||||||
|
assert_eq!(row.get::<i64>(0).unwrap(), 1);
|
||||||
|
assert_eq!(row.get::<String>(1).unwrap(), "Hello, World!");
|
||||||
|
})?;
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
@@ -4,3 +4,6 @@ mod test_write_path;
|
|||||||
|
|
||||||
mod test_multi_thread;
|
mod test_multi_thread;
|
||||||
mod test_transactions;
|
mod test_transactions;
|
||||||
|
|
||||||
|
#[cfg(feature = "encryption")]
|
||||||
|
mod encryption;
|
||||||
|
|||||||
Reference in New Issue
Block a user