mirror of
https://github.com/deuxfleurs-org/garage.git
synced 2026-08-10 22:36:53 +00:00
Add basic k2v_client integration tests
This commit is contained in:
@@ -73,6 +73,8 @@ assert-json-diff = "2.0"
|
||||
serde_json = "1.0"
|
||||
base64 = "0.21"
|
||||
|
||||
k2v-client.workspace = true
|
||||
|
||||
|
||||
[features]
|
||||
default = [ "bundled-libs", "metrics", "sled", "k2v" ]
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
use aws_sdk_s3::{Client, Region};
|
||||
use ext::*;
|
||||
use k2v_client::K2vClient;
|
||||
|
||||
#[macro_use]
|
||||
pub mod macros;
|
||||
@@ -68,6 +69,19 @@ impl Context {
|
||||
|
||||
bucket_name
|
||||
}
|
||||
|
||||
/// Build a K2vClient for a given bucket
|
||||
pub fn k2v_client(&self, bucket: &str) -> K2vClient {
|
||||
let config = k2v_client::K2vClientConfig {
|
||||
region: REGION.to_string(),
|
||||
endpoint: self.garage.k2v_uri().to_string(),
|
||||
aws_access_key_id: self.key.id.clone(),
|
||||
aws_secret_access_key: self.key.secret.clone(),
|
||||
bucket: bucket.to_string(),
|
||||
user_agent: None,
|
||||
};
|
||||
K2vClient::new(config).expect("Could not create K2V client")
|
||||
}
|
||||
}
|
||||
|
||||
pub fn context() -> Context {
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
pub mod simple;
|
||||
@@ -0,0 +1,60 @@
|
||||
use std::time::Duration;
|
||||
|
||||
use k2v_client::*;
|
||||
|
||||
use crate::common;
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_simple() {
|
||||
let ctx = common::context();
|
||||
let bucket = ctx.create_bucket("test-k2v-client-simple");
|
||||
let k2v_client = ctx.k2v_client(&bucket);
|
||||
|
||||
k2v_client
|
||||
.insert_item("root", "test1", b"Hello, world!".to_vec(), None)
|
||||
.await
|
||||
.unwrap();
|
||||
|
||||
let res = k2v_client.read_item("root", "test1").await.unwrap();
|
||||
|
||||
assert_eq!(res.value.len(), 1);
|
||||
assert_eq!(res.value[0], K2vValue::Value(b"Hello, world!".to_vec()));
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_special_chars() {
|
||||
let ctx = common::context();
|
||||
let bucket = ctx.create_bucket("test-k2v-client-simple-special-chars");
|
||||
let k2v_client = ctx.k2v_client(&bucket);
|
||||
|
||||
let (pk, sk) = ("root@plépp", "≤≤««");
|
||||
k2v_client
|
||||
.insert_item(pk, sk, b"Hello, world!".to_vec(), None)
|
||||
.await
|
||||
.unwrap();
|
||||
|
||||
let res = k2v_client.read_item(pk, sk).await.unwrap();
|
||||
assert_eq!(res.value.len(), 1);
|
||||
assert_eq!(res.value[0], K2vValue::Value(b"Hello, world!".to_vec()));
|
||||
|
||||
// sleep a bit before read_index
|
||||
tokio::time::sleep(Duration::from_secs(1)).await;
|
||||
let res = k2v_client.read_index(Default::default()).await.unwrap();
|
||||
assert_eq!(res.items.len(), 1);
|
||||
assert_eq!(res.items.keys().next().unwrap(), pk);
|
||||
|
||||
let res = k2v_client
|
||||
.read_batch(&[BatchReadOp {
|
||||
partition_key: pk,
|
||||
filter: Default::default(),
|
||||
single_item: false,
|
||||
conflicts_only: false,
|
||||
tombstones: false,
|
||||
}])
|
||||
.await
|
||||
.unwrap();
|
||||
assert_eq!(res.len(), 1);
|
||||
let res = &res[0];
|
||||
assert_eq!(res.items.len(), 1);
|
||||
assert_eq!(res.items.keys().next().unwrap(), sk);
|
||||
}
|
||||
@@ -8,3 +8,5 @@ mod s3;
|
||||
|
||||
#[cfg(feature = "k2v")]
|
||||
mod k2v;
|
||||
#[cfg(feature = "k2v")]
|
||||
mod k2v_client;
|
||||
|
||||
Reference in New Issue
Block a user