Add integration test for page_size=512

This commit is contained in:
Jussi Saurio
2025-08-12 21:29:31 +03:00
parent a2a88e2c69
commit 8a1c3390e6

View File

@@ -57,3 +57,107 @@ fn test_pragma_module_list_generate_series() {
assert!(found, "generate_series should appear in module_list");
}
#[test]
fn test_pragma_page_sizes_without_writes_persists() {
for test_page_size in [512, 1024, 2048, 4096, 8192, 16384, 32768, 65536] {
let db = TempDatabase::new_empty(false);
{
let conn = db.connect_limbo();
let pragma_query = format!("PRAGMA page_size={test_page_size}");
conn.execute(&pragma_query).unwrap();
conn.execute("PRAGMA user_version=1").unwrap(); // even sqlite behavior is that just changing page_size pragma doesn't persist it, so we do this to make a minimal persistent change
}
let conn = db.connect_limbo();
let mut rows = conn.query("PRAGMA page_size").unwrap().unwrap();
let StepResult::Row = rows.step().unwrap() else {
panic!("expected row");
};
let row = rows.row().unwrap();
let Value::Integer(page_size) = row.get_value(0) else {
panic!("expected integer value");
};
assert_eq!(*page_size, test_page_size);
// Reopen database and verify page size
let db = TempDatabase::new_with_existent(&db.path, false);
let conn = db.connect_limbo();
let mut rows = conn.query("PRAGMA page_size").unwrap().unwrap();
let StepResult::Row = rows.step().unwrap() else {
panic!("expected row");
};
let row = rows.row().unwrap();
let Value::Integer(page_size) = row.get_value(0) else {
panic!("expected integer value");
};
assert_eq!(*page_size, test_page_size);
}
}
#[test]
fn test_pragma_page_sizes_with_writes_persists() {
for test_page_size in [512, 1024, 2048, 4096, 8192, 16384, 32768, 65536] {
let db = TempDatabase::new_empty(false);
{
{
let conn = db.connect_limbo();
let pragma_query = format!("PRAGMA page_size={test_page_size}");
conn.execute(&pragma_query).unwrap();
// Create table and insert data
conn.execute("CREATE TABLE test (id INTEGER PRIMARY KEY, value TEXT)")
.unwrap();
conn.execute("INSERT INTO test (id, value) VALUES (1, 'test data')")
.unwrap();
let mut page_size = conn.pragma_query("page_size").unwrap();
let mut page_size = page_size.pop().unwrap();
let page_size = page_size.pop().unwrap();
let Value::Integer(page_size) = page_size else {
panic!("expected integer value");
};
assert_eq!(page_size, test_page_size);
} // Connection is dropped here
// Reopen database and verify page size and data
let conn = db.connect_limbo();
// Check page size is still test_page_size
let mut page_size = conn.pragma_query("page_size").unwrap();
let mut page_size = page_size.pop().unwrap();
let page_size = page_size.pop().unwrap();
let Value::Integer(page_size) = page_size else {
panic!("expected integer value");
};
assert_eq!(page_size, test_page_size);
// Verify data can still be read
let mut rows = conn
.query("SELECT value FROM test WHERE id = 1")
.unwrap()
.unwrap();
loop {
if let StepResult::Row = rows.step().unwrap() {
let row = rows.row().unwrap();
let Value::Text(value) = row.get_value(0) else {
panic!("expected text value");
};
assert_eq!(value.as_str(), "test data");
break;
}
rows.run_once().unwrap();
}
}
// Drop the db and reopen it, and verify the same
let db = TempDatabase::new_with_existent(&db.path, false);
let conn = db.connect_limbo();
let mut page_size = conn.pragma_query("page_size").unwrap();
let mut page_size = page_size.pop().unwrap();
let page_size = page_size.pop().unwrap();
let Value::Integer(page_size) = page_size else {
panic!("expected integer value");
};
assert_eq!(page_size, test_page_size);
}
}