use essential_node_db as node_db;
use essential_types::{Key, Value};
use util::test_conn;
mod util;
#[test]
fn test_state_value() {
let seed = 72;
let contract = util::test_contract(seed);
let key = Key::from([0xAB; 32]);
let value = Value::from([0xCD; 32]);
let mut conn = test_conn();
let tx = conn.transaction().unwrap();
node_db::create_tables(&tx).unwrap();
let contract_ca = essential_hash::content_addr(&contract);
node_db::update_state(&tx, &contract_ca, &key, &value).unwrap();
tx.commit().unwrap();
let fetched_value = node_db::query_state(&conn, &contract_ca, &key)
.unwrap()
.unwrap();
assert_eq!(value, fetched_value);
}
#[test]
fn test_state_values_with_deletion() {
let seed = 36;
let contract = util::test_contract(seed);
let mut keys = vec![];
let mut values = vec![];
for i in 0i64..1024 {
let key = vec![(i + 1) * 5; ((i + 1) as usize * 103) % 128];
let value = vec![(i + 1) * 7; ((i + 1) as usize * 391) % 128];
keys.push(key);
values.push(value);
}
let mut conn = test_conn();
let tx = conn.transaction().unwrap();
node_db::create_tables(&tx).unwrap();
let contract_ca = essential_hash::content_addr(&contract);
for (k, v) in keys.iter().zip(&values) {
node_db::update_state(&tx, &contract_ca, k, v).unwrap();
}
tx.commit().unwrap();
let mut fetched = vec![];
for k in &keys {
fetched.push(
node_db::query_state(&conn, &contract_ca, k)
.unwrap()
.unwrap(),
);
}
assert_eq!(values, fetched);
for k in &keys {
node_db::delete_state(&conn, &contract_ca, k).unwrap();
}
for k in &keys {
let opt = node_db::query_state(&conn, &contract_ca, k).unwrap();
assert!(opt.is_none());
}
}