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