K2V #293
2 changed files with 142 additions and 0 deletions
141
src/garage/tests/k2v/errorcodes.rs
Normal file
141
src/garage/tests/k2v/errorcodes.rs
Normal file
|
@ -0,0 +1,141 @@
|
||||||
|
use crate::common;
|
||||||
|
|
||||||
|
use hyper::Method;
|
||||||
|
|
||||||
|
#[tokio::test]
|
||||||
|
async fn test_error_codes() {
|
||||||
|
let ctx = common::context();
|
||||||
|
let bucket = ctx.create_bucket("test-k2v-error-codes");
|
||||||
|
|
||||||
|
// Regular insert should work (code 200)
|
||||||
|
let res = ctx
|
||||||
|
.k2v
|
||||||
|
.request
|
||||||
|
.builder(bucket.clone())
|
||||||
|
.method(Method::PUT)
|
||||||
|
.path("root")
|
||||||
|
.query_param("sort_key", Some("test1"))
|
||||||
|
.body(b"Hello, world!".to_vec())
|
||||||
|
.send()
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
assert_eq!(res.status(), 200);
|
||||||
|
|
||||||
|
// Insert with trash causality token: invalid request
|
||||||
|
let res = ctx
|
||||||
|
.k2v
|
||||||
|
.request
|
||||||
|
.builder(bucket.clone())
|
||||||
|
.method(Method::PUT)
|
||||||
|
.path("root")
|
||||||
|
.query_param("sort_key", Some("test1"))
|
||||||
|
.signed_header("x-garage-causality-token", "tra$sh")
|
||||||
|
.body(b"Hello, world!".to_vec())
|
||||||
|
.send()
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
assert_eq!(res.status(), 400);
|
||||||
|
|
||||||
|
// Search without partition key: invalid request
|
||||||
|
let res = ctx
|
||||||
|
.k2v
|
||||||
|
.request
|
||||||
|
.builder(bucket.clone())
|
||||||
|
.query_param("search", Option::<&str>::None)
|
||||||
|
.body(
|
||||||
|
br#"[
|
||||||
|
{},
|
||||||
|
]"#
|
||||||
|
.to_vec(),
|
||||||
|
)
|
||||||
|
.method(Method::POST)
|
||||||
|
.send()
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
assert_eq!(res.status(), 400);
|
||||||
|
|
||||||
|
// Search with start that is not in prefix: invalid request
|
||||||
|
let res = ctx
|
||||||
|
.k2v
|
||||||
|
.request
|
||||||
|
.builder(bucket.clone())
|
||||||
|
.query_param("search", Option::<&str>::None)
|
||||||
|
.body(
|
||||||
|
br#"[
|
||||||
|
{"partition_key": "root", "prefix": "a", "start": "bx"},
|
||||||
|
]"#
|
||||||
|
.to_vec(),
|
||||||
|
)
|
||||||
|
.method(Method::POST)
|
||||||
|
.send()
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
assert_eq!(res.status(), 400);
|
||||||
|
|
||||||
|
// Search with invalid json: 400
|
||||||
|
let res = ctx
|
||||||
|
.k2v
|
||||||
|
.request
|
||||||
|
.builder(bucket.clone())
|
||||||
|
.query_param("search", Option::<&str>::None)
|
||||||
|
.body(
|
||||||
|
br#"[
|
||||||
|
{"partition_key": "root"
|
||||||
|
]"#
|
||||||
|
.to_vec(),
|
||||||
|
)
|
||||||
|
.method(Method::POST)
|
||||||
|
.send()
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
assert_eq!(res.status(), 400);
|
||||||
|
|
||||||
|
// Batch insert with invalid causality token: 400
|
||||||
|
let res = ctx
|
||||||
|
.k2v
|
||||||
|
.request
|
||||||
|
.builder(bucket.clone())
|
||||||
|
.body(
|
||||||
|
br#"[
|
||||||
|
{"pk": "root", "sk": "a", "ct": "tra$h", "v": "aGVsbG8sIHdvcmxkCg=="}
|
||||||
|
]"#
|
||||||
|
.to_vec(),
|
||||||
|
)
|
||||||
|
.method(Method::POST)
|
||||||
|
.send()
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
assert_eq!(res.status(), 400);
|
||||||
|
|
||||||
|
// Batch insert with invalid data: 400
|
||||||
|
let res = ctx
|
||||||
|
.k2v
|
||||||
|
.request
|
||||||
|
.builder(bucket.clone())
|
||||||
|
.body(
|
||||||
|
br#"[
|
||||||
|
{"pk": "root", "sk": "a", "ct": null, "v": "aGVsbG8sIHdvcmx$Cg=="}
|
||||||
|
]"#
|
||||||
|
.to_vec(),
|
||||||
|
)
|
||||||
|
.method(Method::POST)
|
||||||
|
.send()
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
assert_eq!(res.status(), 400);
|
||||||
|
|
||||||
|
// Poll with invalid causality token: 400
|
||||||
|
let res = ctx
|
||||||
|
.k2v
|
||||||
|
.request
|
||||||
|
.builder(bucket.clone())
|
||||||
|
.path("root")
|
||||||
|
.query_param("sort_key", Some("test1"))
|
||||||
|
.query_param("causality_token", Some("tra$h"))
|
||||||
|
.query_param("timeout", Some("10"))
|
||||||
|
.signed_header("accept", "application/octet-stream")
|
||||||
|
.send()
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
assert_eq!(res.status(), 400);
|
||||||
|
}
|
|
@ -1,4 +1,5 @@
|
||||||
pub mod batch;
|
pub mod batch;
|
||||||
|
pub mod errorcodes;
|
||||||
pub mod item;
|
pub mod item;
|
||||||
pub mod poll;
|
pub mod poll;
|
||||||
pub mod simple;
|
pub mod simple;
|
||||||
|
|
Loading…
Reference in a new issue