1 extern crate lmdb_sys;
2
3 use lmdb_sys::*;
4
5 use std::ffi::{c_void, CString};
6 use std::ptr;
7
8 // https://github.com/victorporof/lmdb/blob/mdb.master/libraries/liblmdb/moz-test.c
9
10 macro_rules! E {
11 ($expr:expr) => {{
12 match $expr {
13 ::MDB_SUCCESS => (),
14 err_code => assert!(false, "Failed with code {}", err_code),
15 }
16 }};
17 }
18
19 macro_rules! str {
20 ($expr:expr) => {
21 ::CString::new($expr).unwrap().as_ptr()
22 };
23 }
24
25 #[test]
26 #[cfg(all(target_os = "windows", target_arch = "x86"))]
27 #[should_panic(expected = "Failed with code -30793")]
test_simple_win_32()28 fn test_simple_win_32() {
29 test_simple()
30 }
31
32 #[test]
33 #[cfg(not(all(target_os = "windows", target_arch = "x86")))]
test_simple_other()34 fn test_simple_other() {
35 test_simple()
36 }
37
test_simple()38 fn test_simple() {
39 let mut env: *mut MDB_env = ptr::null_mut();
40 let mut dbi: MDB_dbi = 0;
41 let mut key = MDB_val {
42 mv_size: 0,
43 mv_data: ptr::null_mut(),
44 };
45 let mut data = MDB_val {
46 mv_size: 0,
47 mv_data: ptr::null_mut(),
48 };
49 let mut txn: *mut MDB_txn = ptr::null_mut();
50 let sval = str!("foo") as *mut c_void;
51 let dval = str!("bar") as *mut c_void;
52
53 unsafe {
54 E!(mdb_env_create(&mut env));
55 E!(mdb_env_set_maxdbs(env, 2));
56 E!(mdb_env_open(env, str!("./tests/fixtures/testdb"), 0, 0664));
57
58 E!(mdb_txn_begin(env, ptr::null_mut(), 0, &mut txn));
59 E!(mdb_dbi_open(txn, str!("subdb"), MDB_CREATE, &mut dbi));
60 E!(mdb_txn_commit(txn));
61
62 key.mv_size = 3;
63 key.mv_data = sval;
64 data.mv_size = 3;
65 data.mv_data = dval;
66
67 E!(mdb_txn_begin(env, ptr::null_mut(), 0, &mut txn));
68 E!(mdb_put(txn, dbi, &mut key, &mut data, 0));
69 E!(mdb_txn_commit(txn));
70
71 mdb_dbi_close(env, dbi);
72 mdb_env_close(env);
73 }
74 }
75