#[allow(non_camel_case_types)]
extern crate k2hash_sys;
extern crate libc;
use std::ffi::CString;
fn open_test_handler() -> k2hash_sys::k2h_h {
let path = "/tmp/tmp.k2hash";
let c_path = CString::new(path).unwrap();
unsafe {
k2hash_sys::k2h_open(c_path.as_ptr(), false, true, true, 8, 4, 32, 128)
}
}
#[test]
fn test_open() {
let handler = open_test_handler();
assert_ne!(handler, 0);
}
#[test]
fn test_set_value() {
let handler = open_test_handler();
let rkey = vec![0x74, 0x65, 0x73, 0x74, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65];
let rval = vec![1, 2, 3, 4, 5];
unsafe {
let success = k2hash_sys::k2h_set_value(handler, rkey.as_ptr(), rkey.len(), rval.as_ptr(), rval.len());
assert!(success);
};
}
#[test]
fn test_set_str_value() {
let handler = open_test_handler();
let rkey = "test_set_str_value";
let rval = "value";
let ckey = CString::new(rkey).unwrap();
let cval = CString::new(rval).unwrap();
unsafe {
let success = k2hash_sys::k2h_set_str_value(handler, ckey.as_ptr(), cval.as_ptr());
assert!(success);
}
}
#[test]
fn test_get_str_direct_value() {
let handler = open_test_handler();
let rkey = "test_get_str_direct_value";
let rval = "value";
let ckey = CString::new(rkey).unwrap();
let cval = CString::new(rval).unwrap();
unsafe {
k2hash_sys::k2h_set_str_value(handler, ckey.as_ptr(), cval.as_ptr());
}
unsafe {
let directval = k2hash_sys::k2h_get_str_direct_value(handler, ckey.as_ptr());
let rvsize = ::libc::strlen(directval as *const i8);
let valstr = String::from_raw_parts(directval as *mut _, rvsize, rvsize);
assert_eq!(valstr, rval);
}
}