Add a stress test

This commit is contained in:
Ivan Ukhov 2015-06-11 22:14:36 -04:00
parent 10d99dadce
commit 9bd6db2ab5

View File

@ -2,6 +2,7 @@ extern crate sqlite;
extern crate temporary;
use std::path::PathBuf;
use std::thread;
use temporary::Directory;
macro_rules! ok(
@ -55,6 +56,35 @@ fn workflow() {
}
}
#[test]
fn stress() {
use sqlite::Binding::*;
use sqlite::State;
let (path, _directory) = setup();
let database = ok!(sqlite::open(&path));
let sql = r#"CREATE TABLE `users` (id INTEGER, name VARCHAR(255), age REAL);"#;
ok!(database.execute(sql));
let guards = (0..100).map(|_| {
let path = PathBuf::from(&path);
thread::spawn(move || {
let mut database = ok!(sqlite::open(&path));
ok!(database.set_busy_handler(|_| true));
let sql = r#"INSERT INTO `users` (id, name, age) VALUES (?, ?, ?);"#;
let mut statement = ok!(database.prepare(sql));
ok!(statement.bind(&[Integer(1, 1), Text(2, "Alice"), Float(3, 20.99)]));
assert!(ok!(statement.step()) == State::Done);
true
})
}).collect::<Vec<_>>();
for guard in guards {
assert!(guard.join().unwrap());
}
}
fn setup() -> (PathBuf, Directory) {
let directory = ok!(Directory::new("sqlite"));
(directory.path().join("database.sqlite3"), directory)